目录
游戏规则
设置一个随机数,让玩家猜这个数字,当玩家进行猜数字时希望可以告诉玩家猜的数字是猜大了还是猜小了,如果猜对了可以提示一下玩家猜对了然后结束游戏,或者再来一局。
准备工作
首先分析游戏的核心,游戏的核心就是需要有一个每一次都不同的随机数,解决了随机数的问题,游戏也就完成了一半。
C语言里有一个库函数,叫做rand,它的头文件是#include<stdlib.h>,用来生成随机数,但这个生成的只是一个伪随机数,并不是真正的随机。
查看文档将这段英文翻译过来是:rand函数返回范围为0到rand_MAX的伪随机整数。在调用rand之前,请使用srand函数为伪随机数生成器设定种子。所以rand还需要另一个函数srand来支撑它生成一个随机数。
再来查看srand的文档,发现这么长一串,其实你无需了解这是什么意思,只要知道他只是支撑rand函数生成随机数的就行。
但发现就算有了srand函数,生成的数还是一个伪随机数,他不会变啊。当srand里的参数是在不断变化它才能是一个真正的随机数。其实我是执行了两次,但是生成的随机数都一样。
那么什么东西在一直变化?就是时间,时间是一直在不断变化的,当srand里放上了一个时间的参数就可以做到随机。库函数就有一个函数可以生成时间戳。
time函数的头文件#include<time.h>,time函数就是一个用来实现时间戳的函数,只要像文档里一样将time函数放到srand函数里,rand函数就可以生成一个随机数,为了保证time函数生成的是一个正数,还需要在全面加上一个unsigned 。参数部分给上一个空NULL。有了time函数每次执行都不会重复了。
![]()
了解了怎么生成随机数就可以直接写代码了。
代码实现
srand一定写在main函数内,如果在game函数也许生成的数字就不那么随机了。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
//菜单
void menu()
{
printf("***************************\n");
printf("** 猜数字 **\n");
printf("** 1 .开始游戏 **\n");
printf("** 0 .退出游戏 **\n");
printf("***************************\n");
}
//游戏函数
void game()
{
system("cls");
int guess = 0;
int count = 0;
//生成随机数
int r = rand() % 100 + 1;//%100+1生成0~100内的随机数
while (1)
{
printf("猜数字:");
scanf("%d", &guess);
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
count++;
system("pause");
system("cls");
break;//猜对跳出循环
}
count++;
}
if (count < 4)
{
printf("您猜了%d次,简直是欧皇本皇\n", count);
}
else if (count < 7)
{
printf("您猜了%d次,运气一般\n", count);
}
else
{
printf("您猜了%d次,酋长咱快回家吧\n", count);
}
system("pause");
system("cls");
}
int main()
{
int input = 0;
//生成时间戳
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入你的选择<1/0>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}