今天给大家介绍一款小游戏,猜数游戏,规则很简单,电脑随机生成1~100直接的一个整数,由玩家进行猜测,猜的数比电脑生成的大了,电脑会告诉你猜大了,比生成的小了,会告诉你猜小了,猜对了的话,会恭喜你,猜对了。
首先,我们要写好程序的基本逻辑,让它可以先跑起来,我们写代码要一步一步的敲,不要上来就巴拉巴拉的敲,我之前学java时听过一句话叫:化繁为简,先死后活。意思是我们要把困难的题目给他化解成一块一块小的简单的,便于我们写出来,开始先让它可以跑起来(最开始时候先让代码死板一点,能跑就行),最后再统合变为活的(比如输入各种复杂参数,让代码可以变化无穷),自己需要的。
#include<stdio.h>
int main() {
int input = 0;
do {
printf("这里是菜单函数\n");
printf("请选择:>\n");
scanf("%d", &input);
switch (input) {
case 0:
printf("退出游戏,程序结束!\n");
break;
case 1:
printf("这里是猜数字的游戏函数\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
我们使用do-while循环和switch语句来构成代码的基本逻辑。
再接着,我们来完成菜单函数,这个非常简单,只需要用printf函数打印出一个好看的菜单就行。
void menu() {
printf("*************************\n");
printf("******** 1. play *******\n");
printf("******** 0. exit *******\n");
printf("*************************\n");
}
对应我们switch里的case语句,input输入的为0,退出游戏,输入为1,开始游戏,输入其他的就让他重新输入。
接着我们来完成猜数游戏的游戏函数
void game() {
int n = rand() % 100 + 1;
int x = 0;
int i = 5;
do {
printf("请猜数字,你还有%d次机会\n", i);
scanf("%d", &x);
if (x < n) {
printf("猜小了\n");
i--;
}
else if (x > n) {
printf("猜大了\n");
i--;
}
else {
printf("恭喜你,猜对了\n");
break;
}
} while (i);
}
这里我们使用do-while循环来执行猜数逻辑,设定一个可以猜的次数i,我设置的是5,5次没有猜中就重新开始,大家可以根据自己的需求设置。
这里难的地方是生成随机数,我们重点讲解一下:我们可以使用rand函数来生成一个随机的数字,rand函数会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数),如果我们直接这样写,那么每次游戏生成的随机数是一样的,在使用rand函数前要先使用一个叫srand的函数,去初始化随机数的生成器,srand函数的原型是:void srand(unsigned int seed);参数说明:unsigned seed:随机数产生器的初始值(种子值)。由百度所见,我们在使用srand时,需要给他设置一个参数seed,而且这个seed参数是要变化的才行,不然还是会产生一样的随机数。所以这时候,我们需要引入一个新的函数,叫time函数,因为时间就是在不断的变化,很符合我们的需求,我们设置一个时间戳为seed(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数),time函数的参数我们设置为NULL即可,又因为参数seed为unsigned int类型,我们使用强制转换将time函数的返回值转为该类型。最后写出来的srand是这样的:
srand((unsigned int)time(NULL));
srand函数在整个程序中只需要调用一次即可,所以把他放在main函数里边的开头就行。
使用time函数需要引入头文件#include<time.h>,使用rand函数和srand函数需要引入头文件#include<stdlib.h>。
然后说一下为什么生成的rand值需要%100+1,因为上边说了rand函数会返回一个范围在0到32767的数字,我们对他%100后,会得到一个0到99的数字,此时+1,就可以得到一个1到100的数字了,大家可以根据自己的需求来设置猜数的大小,这样我们的猜数游戏就完成啦。
最后附上完整代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu() {
printf("*************************\n");
printf("******** 1. play *******\n");
printf("******** 0. exit *******\n");
printf("*************************\n");
}
void game() {
int n = rand() % 100 + 1;
int x = 0;
int i = 5;
do {
printf("请猜数字,你还有%d次机会\n", i);
scanf("%d", &x);
if (x < n) {
printf("猜小了\n");
i--;
}
else if (x > n) {
printf("猜大了\n");
i--;
}
else {
printf("恭喜你,猜对了\n");
break;
}
} while (i);
}
int main() {
int input = 0;
srand((unsigned int)time(NULL));
do {
menu();
printf("请选择:>\n");
scanf("%d", &input);
switch (input) {
case 0:
printf("退出游戏,程序结束!\n");
break;
case 1:
game();
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
新人作者,上述文章如有错误,还请大佬指正。