写⼀个猜数字游戏
游戏要求:
1. 电脑⾃动⽣成1~100的随机数
2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束
根据游戏要求,我们先实现自动生成1~100随机数,我们引入"rand函数" ,rand函数的使用形式如下:
int rand (void);
使用rand函数的头文件是 "<stdlib.h>",rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。
但是我们在使用rand函数生成随机数时,会产生如下情况:
#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;
}
两次运行结果都是同样的随机数,这就说明rand函数生成的是伪随机数,不是真正的随机数,我们再深入研究这个问题,⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数,上面的rand函数的种子一直是不变的。
为了引入种子这一概念,C语言提供了srand函数,通过 srand 函数的参数来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。
void srand (unsigned int seed);
我们需要这颗种子随时随刻变化,我们就能够联想到时间概念 ,接下来我们就运用时间函数:
time_t time (time_t* timer);
如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。
time函数的时候需要包含头⽂件:time.h
如果只是让time函数返回时间戳,我们就可以这样写:
time(NULL);
接下来我们设置随机数的范围:
根据游戏要求,我们需要设置1~100之间的随机数:
int i = rand % 100 + 1;
//rand % 100 的余数是 0~99 ,加1就是1~100.
一切准备就绪,我们开始实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
int i = rand() % 100 + 1;
int guess = 0;
int count = 5;
while (count)
{
printf("\n你还有%d次机会\n", count);
printf("请猜数字>:");
scanf_s("%d", &guess);
if (guess < i)
{
printf("猜小了,小笨蛋\n");
}
else if (guess > i)
{
printf("猜大了,小笨蛋\n");
}
else
{
printf("猜对了,大聪明\n");
break;
}
count--;
}
if (count == 0)
{
printf("你失败了,正确值是:%d\n", i);
}
}
void menu()
{
printf("***************\n");
printf("*****1.play****\n");
printf("*****0.exit****\n");
printf("***************\n");
}
//游戏开始
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
printf("请输入:");
scanf_s("%d", &input);
do
{
menu();
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,重新开始\n");
break;
}
} while (input);
return 0;
}