C语言猜数字游戏(详解)

使用C语言写出猜数字游戏

1.思路

1.我们需要电脑生成一个随机数

2.玩家进行猜数字

3.玩过一次可以再玩一次,那么至少要进去一次,可以使用do...while循环

2.大体结构(主函数)

使用do...while循环,使游戏至少进入一次,然后根据菜单提示选择:开始或者退出游戏

需要用到Switch  case语句,来进行判断。

然后加入菜单函数进行选择,1.开始游戏,进入game()函数 0.退出游戏,跳出循环  ,如果输入错误,循环再进行选择。

int main()//主函数
{
    int input = 0;
    printf("猜数字,1--100之间\n");
    //do...while循环
    do
    {
        menu();//菜单函数
        
        printf("请选择数字:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();//游戏函数
            break;
        case 0:
            printf("已退出游戏\n");
            break;
        default:
            printf("输入错误,请重新输入\n");
            break;
        }
    } while (input);
    return 0;
}

3.菜单函数(menu)

使用printf 打印出菜单,void 表示无返回

void menu()//菜单函数
{
    printf("|----------------------------------------------------|\n");
    printf("|------------------- 1.开始游戏 -----------------|\n");
    printf("|------------------- 0.退出游戏 -----------------|\n");
    printf("|----------------------------------------------------|\n");
}

4.游戏函数(game) 

在game()函数内部要使电脑生成一个随机数,由玩家来猜数字。在C语言rand()函数是专门生成随机数的,并且会返回一个随机整数,在0——RAND MAX之间(0----32767),但是在使用rand()之前需要调用srand()函数(设置随机数的生成器),否者随机数生成第一次和第二次完全相同

 srand()函数是设置一个随机起点,需要使用整型,但由于整型为固定值,随机值也相同,所以我们需要一个每时每刻都在发生变化的值,那就是:时间戳(是计算机当前时间-起始时间)所得到的值就是时间戳,使用时间戳来设置随机数的生成起点,使用时间戳要用time()函数来获取当前时间,srand函数返回值为unsigned int 类型,那么要将time强制类型转换成unsigned int 类型,time(NULL)为空指针。

 

srand 生成起点不能多次调用,否则会出现相同的情况,放在主函数内部调用一次就可以。

 

 4.猜数字

随机数是在0--32767之间,数字比较大,很难猜对,所以我们将随机值%100+1(%100余数在1-99之间再+1,就是1-100之间),就会得到1--100之间的数字。

然后进行猜数字,需要进行循环,如果猜大了,提示猜大了,如果猜小了,就提示猜小了,如果猜对了,跳出循环,进行下一次选择。

 

 5.游戏运行和完整程序

 代码:

#include<stdio.h>
#include<stdlib.h>//头文件
#include<time.h>


void menu()//菜单函数
{
    printf("|----------------------------------------------------|\n");
    printf("|------------------- 1.开始游戏 -----------------|\n");
    printf("|------------------- 0.退出游戏 -----------------|\n");
    printf("|----------------------------------------------------|\n");
}
void game()//游戏函数
{
    int i = 0;
    int ret = rand()%100+1 ;//生成随机数
    printf("请猜数字\n");
    while (1)//while循环,如果猜对跳出来
    {
        scanf("%d", &i);
        if (i < ret)
        {
            printf("猜小了!\n");
        }
        else if (i>ret)
        {
            printf("猜大了!\n");
        }
        else
        {
            printf("恭喜你!!猜对了!\n");
            break;
        }
    }
}
int main()//主函数
{
    srand((unsigned int)time(NULL));//随机数生成
    int input = 0;
    printf("猜数字,1--100之间\n");
    //do...while循环
    do
    {
        menu();//菜单函数

        printf("请选择数字:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();//游戏函数
            break;
        case 0:
            printf("已退出游戏\n");
            break;
        default:
            printf("输入错误,请重新输入\n");
            break;
        }
    } while (input);
    return 0;
}
 

  • 15
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值