实现流程
1.电脑生成一个1~100的随机数
2.猜数字
1).限定条件:60内和5次机会,游戏失败->关机
2).猜大了和猜小了进行提示
猜数字游戏
1.了解如何生成一个随机数
1)随机数的生成rand()
int rand(void);
rand函数会生成一个伪随机数,其范围为0~RAND_MAX,
这个RAND_MAX是依赖编译实现的,大部分编译器上是32767 。
头文件:stdlib.h
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
多次执行该代码发现,每次生成的5个随机数都一样,所以说是伪随机数
它是通过某种算法生成的随机数,真正的随机数应该是无法预测的,
而rand函数是对于一个叫种子的基准值进行运算生成的随机数,
而rand函数生成随机数的默认种子是1
如果要生成一个无法预测的随机数,就要让种子是变化的
2).种子的设置srand()
void srand(unsigned int seed);
头文件:stdlib.h
发现设置的种子不同,生成的随机数不同
那如何生成一个变换的种子呢?
时间!
时间一直在变化,如果种子是时间,那这个问题就解决了
3).时间time()
time_t time(time_t* timer);
头文件:time.h
类型time_t本质上就是32位或64位的整型类型
time_t* timer给一个NULL指针就行,这里用不到该参数
time函数会返回一个时间戳(自己搜一下时间戳的概念)
这样随机值就变得随机了,但是这里其实还是有一点问题的
如果生成速度特别快的话,生成的随机值就是同一个数
那么怎么解决?
其实只要设置1次种子就行了
该种子是多少是随机的,下一次运行程序,种子又会变化
2.代码实现
#include <stdio.h>//scanf和printf的头文件
#include <stdlib.h>//rand、srand和system的头文件
#include <time.h>//time的头文件
void menu()
{
printf("********************\n");
printf("**** 1.play ****\n");
printf("**** 0.exit ****\n");
printf("********************\n");
}
void game()
{
//1.电脑生成一个1~100的随机数
int r = rand() % 100 + 1;//生成一个1~100的随机数
system("cls");//清空屏幕,玩完一把清空屏幕开始下一把
//2.猜数字
int guess = 0;
//1).限定条件:60内和5次机会,游戏失败->关机
int count = 5;//5次猜数字机会
printf("游戏开始\n");
printf("猜1~100之间的数字\n");
printf("游戏限时60秒,机会5次,游戏失败电脑将自动关机\n");
system("shutdown -s -t 60");//游戏限时60秒
while (count)
{
printf("请猜数字:");
scanf("%d", &guess);
// 2).猜大了和猜小了进行提示
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了,数字是%d\n", r);
system("shutdown -a");//游戏胜利,取消关机
break;
}
count--;
if(count>0)
printf("你还有%d次机会\n", count);//提示还有几次机会
}
printf("5次机会用完,游戏失败\n");
printf("正确的数字是%d\n", r);
system("shutdown -s -t 3");//给玩家3秒看到游戏结果的缓冲时间,再关机
}
int main()
{
srand((unsigned int)time(NULL));//设置一个随机数的生成起点(种子)
int input = 0;
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;
}