猜数字小游戏基本实现的逻辑也是大小关系来实现的,电脑随机生成1~100之间的一个随机数,然后需要我们来输入数字来进行猜数字,如果输入的数字比电脑随机生成的数字大,那么就会提示猜大了,如果输入的数字比随机生成的数字小,那么就会提示猜小了,但是要涉及到随机数的设置,这个也会一一分析
基本实现结果:
先给出一个菜单,然后可以让玩家进行选择,然后输入1~100之间的数字,进行猜数字,如果输入的数字小于电脑生成的数字,就提示你猜小了,如果大于,就提示猜大了,直到你猜中数字
要实现游戏菜单,首先在代码运行起来之后就要打印这个菜单,而且玩完一次游戏之后还想再玩也是可以选择的,因此就需要一个循环,而且是先打印循环语句再进行判断,所以就需要do while循环
代码实现:
#include
void menu()
{
printf("*************************\n");
printf("*************************\n");
printf("******** 1. Play ********\n");
printf("******** 0. Exit ********\n");
printf("*************************\n");
printf("*************************\n");
}
int main()
{
int input = 0;
do
{
//打印菜单
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字小游戏:\n");
break;
case 0:
printf("退出游戏:\n");
break;
default: //加上输入的不为0也不为1的情况
printf("输入非法,请重新输入:\n");
break;
}
} while (input); //将input放进判断条件意思是当input为真时进入循环
//为假退出循环,当输入的不为0时就会进入循环
//这样就可以实现一次玩完之后还可以再玩
return 0;
}
void game()
{
//1.生成随机数
//2.猜数字
}
要实现猜数字,首先得设置一个数来猜,并且这个数谁也不知道,需要电脑设置一个1~100的随机数,然后玩家再进行猜数字,如果猜大了就显示猜大了,猜小了就显示猜小了,直至猜对,因此如果让电脑来随机生成一个随机数是一个关键,那么接下来就来看看随机数怎么生成
C语言中有一个库函数是专门生成随机数,这个函数是rand,关于这个函数的具体细节我们可以再使用C语言的工具来学习一下
rand函数会返回一个0~RANG_MAX的一个随机值,那这个RAND_MAX的值是多少呢?,我们可以在编译器上面看一看
也就是说,rand函数会返回一个0~32767的一个随机数,我们可以打印看一看
#include
#include
void game()
{
//1.生成随机数
int target_num = rand();
printf("%d", target_num);
//2.猜数字
}
可以看到两次运行之后生成的随机数居然是一模一样,如果这样设置随机数就没有意思,每次设置的数都一样,猜完一次就知道第二次的结果,因此,不能只是单纯的用rand函数来设置随机数,上面对rand函数的介绍我们只看了前半段话,后半段话还没有看
后半段说了,在使用rand函数之前需要使用srand函数来进行设置,那srand怎么用呢?可以看一下
因此我们来使用一下srand来设置一下随机数的生成器
#include
#include
void game()
{
//1.生成随机数
srand(1); //函数的参数类型为unsigned int 类型,所以可以设置不同的数字先来观察一下
int target_num = rand();
printf("%d\n", target_num);
//2.猜数字
}
只有当srand函数参数设置不同数字时生成的随机数才会改变,那这就证明在srand函数参数为一个随机值时才可以得到不同的随机数,那这就很奇怪,我们需要生成随机数,而这个函数的参数也需要随机数,这就很挫了,那是不是证明这个方法行不通呢?
在生成随机数时,我们只需要在里面放进去一个随时在变化的值,那么什么值是一直在变化的呢?那就是时间,时间在每分每秒的一直变化,那这个不就是我们所需要的值吗?因此我们需要使用时间戳,因为时间在随时变化,时间戳跟着时间也在随时变化,在C语言中有表示时间的函数叫time函数,关于time函数我们可以来看一看
time函数的函数参数是需要一个指针,但在设置随机数的时候并不需要什么指针,因此就传给它一个空指针NULL,time函数的返回类型是time_t,其实time_t是long long经过重命名之后的值,但是我们在使用srand时它所需要的函数参数是unsigned int 的值,所以我们需要对time函数进行强制类型转换来达到设置随机数的目的
#include
#include
srand(( unsigned int )time(NULL)); //设置随机数生成器
在设置随机数的生成器的时候,我们只需要生成一次随机数就够了,因此要将随机数的生成器放在主函数中,如果放进game函数中,每玩一次就会生成一次随机数,这样子很会导致生成的随机数并不是很随机,生成的随机数两个数之间的差异并不是很大,所以将随机数的生成器放在主函数的内部就够了,我们可以看一下效果:
#include
#include
void game()
{
//1.生成随机数
int target_num = rand();
printf("%d\n", target_num);
//2.猜数字
}
int main()
{
int input = 0;
//设置随机数的生成器
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字小游戏:\n");
game();
break;
case 0:
printf("退出游戏:\n");
break;
default:
printf("输入非法,请重新输入:\n");
break;
}
} while (input);
return 0;
}
但是如果这样写,那生成的随机数是0~32767之间的数,猜数字的难度就及其大,因此我们得将范围变小,缩小至1~100,要知道任何一个数模上100得到的结果是0~99之间的,那如果使用生成的随机数%100然后+1就可以得到1~100之间的随机数
int ret = rand() % 100 + 1; //随机生成1~100之间的数字
当随机数设置好了之后,我们就需要进行猜数字了,那这个逻辑就很简单
关于猜数字,我们需要输入一个值,如果这个输入的值比电脑随机生成的值大,那么就会提示猜大了,如果输入的数比电脑随机生成的数字小了,那么就会提示猜小了,这样反复的循环,直到猜对
代码实现:
void game()
{
int target_num = rand() % 100 + 1; //随机生成的1~100之间的数
int num = 0;
while (1) //设置死循环,如果没有猜对就一直猜
{
printf("请猜数字:");
//输入
scanf("%d", &num);
//判断
if (num > target_num)
printf("猜大了\n");
else if (num < target_num)
printf("猜小了\n");
//猜对获胜break跳出循环
else
{
printf("猜对了\n");
break;
}
}
}
写到这里整个代码的基本逻辑都写完了,下面展示完整的代码
//猜数字小游戏
//头文件的包含
#include
#include
#include
//菜单
void menu()
{
printf("*************************\n");
printf("*************************\n");
printf("******** 1. Play ********\n");
printf("******** 0. Exit ********\n");
printf("*************************\n");
printf("*************************\n");
}
//猜数字游戏逻辑
void game()
{
//1.随机数的生成
int target_num = rand() % 100 + 1; //生成的随机数是1~100
//rand%100是0~99之间的数,再加上1就是1~100之间的数
int num = 0;
//2.猜数字
while (1)
{
printf("请猜数字:");
//输入
scanf("%d", &num);
//判断
if (num > target_num)
printf("猜大了\n");
else if (num < target_num)
printf("猜小了\n");
//猜对了就获胜
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
//设置随机数的生成器
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字小游戏:\n");
game();
break;
case 0:
printf("退出游戏:\n");
break;
default:
printf("输入非法,请重新输入:\n");
break;
}
} while (input);
return 0;
}
那么猜数字小游戏整个游戏逻辑和代码就展示完了,如果大家有什么疑问可以打在评论区,我们可以一起讨论一下,或者也可以私信我,感谢大家的支持!谢谢!