游戏要求:
1.系统自动产生一个1-100的随机数字
2.开始菜单里,可以选择开始游戏或者退出游戏
3.猜数字时,如果猜大或者猜小了会提醒,猜对了会恭喜你游戏结束
代码实现:
#include <stdio.h>
#include <stdlib.h> // rand函数需要用到的头文件
#include <time.h> // time函数需要用到的头文件
void menu()
{
printf("********************\n"); //普普通通的一个菜单界面,没啥好说的
printf("*****1.开始游戏*****\n");
printf("*****0.退出游戏*****\n");
printf("********************\n");
}
void game()
{
int num = rand() % 100 + 1; //除100取余数,得到的余数一定在0-99之间,因为超过100会进1
int guess = 0;
while (1)
{
printf("请输入你猜的数字:");
scanf_s("%d", &guess);
if (guess < num)
{
printf("猜小了\n");
}
else if (guess > num)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!!\n");
break;
}
}
}
int main()
{
int choose = 0;
srand((unsigned int)time(NULL)); //运用时间戳生成随机数
do
{
menu();
printf("请输入数字(1/0):");
scanf_s("%d" ,&choose);
switch (choose)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("请重新输入:\n");
break;
}
} while (choose);
}
rand函数返回的是整型int,它的作用就是生成一个随机数,范围在0-32767之间。
为了确定rand的范围,我们需要用到srand函数
但重复运行rand函数生成的随机数是不变的,这样不符合我们的要求,这样会降低游戏的可玩性。
所以我们加入了时间戳,因为时间就是一个不断变化的数。
还有就是最重要的一点,srand函数为什么不放在rand前面,因为如果srand被重复调用,生成的数字变化不会太大,所以把它放在main主函数中,运行过程中只调用一次,就能稳定的生成变化范围大的随机数。
以下是运行效果:
猜数字最快捷的方法就是二分法,也就是取中位数。比如0-100我先取最中间的数字50,目标数字在0-50之间的话,就能排除50-100这一半的数字,以此类推。多试试几次就能掌握技巧。