设想游戏的基本构架
相关新知识
1.如何生成随机数?
利用rand 函数,使用条件是加入头文件#include<stdlib.h>
在cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/中可以得知虽然一次运行中得到了不同的随机值,但是在多次运行中得到的随机值都一样,因为它产生的事伪随机数,以“种子”的基准值生成的,且每次运行时种子的默认值为1。
所以如何让种子变化才是问题,所以这时候需要用srand 函数,来初始化随机数
2.srand 函数
原型为 ?void srand (unsigned int ?seed);
但是srand 的种子是随机的,rand 就能生成随机数,反之 ,想要rand 随机生成,必须要srand 是随机数,也就是生成随机数需要一个随机数就矛盾了。这时候就需要一个时时刻刻都在变化的数-time 函数
3.time 函数
原型为time_t time (time_t* timer);
使用需要加入头文件#include<time.h>
(它返回的差是时间戳)它返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型。
time 函数的参数如果不是NULL,函数也会将这个返回的差值放在timer指向的内存中。
如果 timer 是NULL,就只返回这个时间的差值。
3.缩小随机数的范围
可知它的范围为0--32767,接下来应该缩小范围,把它变为1--100,可以采用取余的方式,取余后为0--99,则再加上1就可以,若想要100-200,可以对101取余再加100,由此可得,生成a--b的随机数,应采用a+rand()%(b-a+1)。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int m = rand() % 100 + 1;
int guess = 0;
while (1)
{
printf("请输入你猜的数字:\n");
scanf("%d", &guess);
if (m < guess)
printf("猜大了\n");
else if (m > guess)
printf("猜小了\n");
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
void menu()
{
printf("*************************\n");
printf("********1.PLAY***********\n");
printf("********0.EXIT***********\n");
printf("*************************\n");
}
int main()
{
int n = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &n);
switch (n)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (n);
return 0;
}
今天也是加油的一天啦,有不好的地方请见谅!