目录
1.要求
2.思路
3.主函数
5.猜数字
6.游戏函数 game()
7.运行结果
8.完整代码
电脑随机生成一个1~100之间的数字,然后玩家开始猜数字,如果猜小了,电脑会告诉你猜小了,反之会告诉你猜大了,猜对了的话,电脑也会告诉你恭喜你,猜对了。
1.让电脑生成一个随机数
2.玩家开始猜数字
3.玩游戏不可能只玩一次就结束,游戏结束由玩家定,可以使用do...while循环
使用do...while循环可以保证游戏至少进入一次,然后根据menu()菜单函数提示选择:开始或者退出游戏。
选择开始游戏,电脑先生成一个随机数,进入game()游戏函数。
重点说如何生成随机数:
在C语言中rand()函数(需要头文件#include
)是专门生成随机数的,并且会返回一个在(0----32767)之间的随机整数但是rand()生成的树也不是纯粹的随机,下面图片是两次运行后生成随机数的结果。
通过对比,很明显每次重新运行后生成随机数是有规律的,也就是说每次进入游戏后第每局游戏的随机数是固定的,这显然不行。
为此,通过查找,C语言中 srand() (需要头文件#include
) 函数可以解决,只需要在使用rand()之前调用srand()函数(设置随机数的生成器)。
srand((unsigned int)time(NULL)); //放在循环外面
n = rand(); //生成随机数n 范围(0----32767) //放在循环里面
srand()函数是设置一个随机起点,需要使用整型,但由于整型为固定值,随机值也相同,所以我们需要一个每时每刻都在发生变化的值,那就是:时间戳(是计算机当前时间-起始时间)所得到的值就是时间戳,使用时间戳来设置随机数的生成起点,使用时间戳要用time()函数来获取当前时间,srand函数返回值为unsigned int 类型,那么要将time强制类型转换成unsigned int 类型,time(NULL)为空指针。
srand 生成起点不能多次调用,否则会出现相同的情况,放在主函数内部调用一次就可以。
void menu1() { //进入游戏界面
printf("**************\n");
printf(" 1.进入游戏 \n");
printf(" 0.退出游戏 \n");
printf("**************\n");
}
void menu2() { //已经进入游戏玩游戏后的界面
printf("**************\n");
printf(" 1.继续游戏 \n");
printf(" 0.退出游戏 \n");
printf("**************\n");
}
这里为了更加符合游戏逻辑,添加了进入游戏界面和已经进入游戏玩游戏后的界面。
void 表示函数无返回值。
由于rand()生成的随机数是在0---32767之间,数字大,很难猜对,所以我们可以将随机值%100+1(%100余数在1-99之间再加1,就是1--100之间),就会得到1--100之间的数字。
然后进行循环猜数字若猜大了,提示猜大了,若猜小了,提示猜小了,若猜对了,跳出循环 ,选择是否继续游戏。
n = rand() % 100 + 1; //生成1--100的随机数
void game(int n) { //n为从main函数中传入的随机数
int m = 0; //m 玩家输入的猜的数
printf("\n欢迎进入猜数字小游戏\n请猜一个数字->");
while (1) { //while(1)循环 直到猜中, 用break 结束循环
scanf("%d", &m);
if (m > n) printf("猜大了!"); // 玩家猜的数m 与 电脑生成的随机数n 比较大小
if (m < n) printf("猜小了!");
if (m == n) {
printf("恭喜你,猜对了!!!\n\n");
menu2();
printf("\n继续游戏请输入1,退出请输入0->");
break; //猜中,则跳出while循环
}
printf("\n继续猜->");
}
}
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
void menu1() { //进入游戏界面
printf("**************\n");
printf(" 1.进入游戏 \n");
printf(" 0.退出游戏 \n");
printf("**************\n");
}
void menu2() { //已经进入游戏玩游戏后的界面
printf("**************\n");
printf(" 1.继续游戏 \n");
printf(" 0.退出游戏 \n");
printf("**************\n");
}
void game(int n) { //n为从main函数中传入的随机数
int m = 0; //m 玩家输入的猜的数
printf("\n欢迎进入猜数字小游戏\n请猜一个数字->");
while (1) { //while(1)循环 直到猜中, 用break 结束循环
scanf("%d", &m);
if (m > n) printf("猜大了!"); // 玩家猜的数m 与 电脑生成的随机数n 比较大小
if (m < n) printf("猜小了!");
if (m == n) {
printf("恭喜你,猜对了!!!\n\n");
menu2();
printf("\n继续游戏请输入1,退出请输入0->");
break; //猜中,则跳出while循环
}
printf("\n继续猜->");
}
}
int main() {
int input = 0;
int n = 0; //n为随机数
srand((unsigned int)time(NULL)); //放在循环之外
menu1();
printf("\n请输入【0/1】->");
do {
n = rand() % 100 + 1; //生成随机数,放在循环之内
scanf("%d",&input);
if (1 == input) game(n); //进入游戏
else if (0 == input) {
printf("已退出游戏!");
}
else printf("输入有误,请重新输入->");
} while (input);
return 0;
}