游戏要求:
电脑随机生成一个1~100之间的数字
猜数字
玩家猜小了,电脑会告诉:猜小了
玩家猜大了,电脑会告诉:猜大了
玩家猜对了,电脑会告诉:恭喜你,猜对了
进入游戏,我们看到的应该是菜单界面,
####################
######1.PLAY########
######0.DEFEA#######
####################但是考虑到游戏不止玩一次,所以菜单应该在游戏结束后还会继续出现,所以应该有一个循环,while for do 三种循环的话选择do while 循环
然后我们上面的这个菜单界面我们应该装在一个函数menu( )中 这是一个好的习惯,把某个东西打包,然后使用。
void menu() {
printf("####################\n");
printf("######1.PLAY########\n");
printf("###T##0.DEFEA#######\n");
printf("####################\n");
}
出来菜单后应该是让玩家选择,所以 所以应该是“请输入1或0进行选择,然后再输入一个数字”
便是这样
#include
int main() {
int n = 0;
do {
menu();
printf("请输入1/0选择");
scanf("%d", &n);
} while ();
}
输入完数字后 我们边可以用Switch语句进行操作
如下:
上述便是小游戏的大致轮廓,下面我稍微对这个轮廓大致做一个解释。
我们可以观察到我们这个游戏的循环条件便是n的值,因为循环中“0表示假,非0表示真”
所以我们只要不输入0,那么循环便可以一直进行,则游戏也可以一直进行。然后代码中的default是默认,指的是输入除了0和1,都会执行default。
So,现在只差一东西,游戏game()的函数怎么写
首先我们要想一下,猜数字我们要是一个随机值,那么该如何使计算机产生一个随机值?
我们生活当中有一个东西是一直在变化的——时间(time)
这边我介绍一个库函数——rand 这个库函数生成随机数便是根据时间的变化来产生的
我们可以看到rand函数的作用是“生成一个伪随机数。”
同时可以看到
但是使用rand函数之前要使用一个srand函数 其作用是设置随机数生成器
随机数生成器代码如下
srand( (unsigned)time( NULL ) );
这边我们对这个函数不讨论,了解即可!
猜数字不可能一次就中,因此,应该当进入游戏后一个循环,直到游戏结束。
设计如下
然后这个循环前面加上rand()函数即可 生成一个随机数。
这边又有一个东西要注意**
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX.
这个库函数的返回值是0到RAND_MAX 我们在vs编译器中搜索到
这个随机数字最大可以到几万,因此根据题意我们可以采取rand()%100+1的措施
***还有注意点就是那个随机数生成器的位置安放
是放在game函数里面还是放在主函数中呢?
我们可以想到最初用这个函数是因为时间一直在变化的,我们上代码试试看效果。
结果显示,如果我们放在game函数中,那么如果我们按的很快,那么随机数字就是一样的
因为srand函数在循环内的话,它每次循环都会产生一个新的数字,而数字是根据时间的变化来的,因此在很短很短的时间内时间是不会变化的,因此产生的随机数字也是不变的,所以:
我们应该把srand函数放在主函数,保证随机数一开始就生成了,这样才可。
这样子,就算我按1后接着按enter建再快都不会是相同的数字,也就保证了游戏的可玩性
最后博主贴出完整代码,后期若还可以优化我会持续更新的啦!
#include
#include
#include
void menu() {
printf("####################\n");
printf("######1.PLAY########\n");
printf("###T##0.DEFEAT######\n");
printf("####################\n");
}
void game() {
int guess = 0;
int r = 0;
srand((unsigned)time(NULL));
r = rand() % 100 + 1;
//printf("%d", r);
while (1) {
printf("猜数字->\n");
scanf("%d", &guess);
if (guess > r) {
printf("猜大了!\n");
}
else if (guess < r) {
printf("猜小了!\n");
}
else {
printf("猜对了!\n");
break;
}
}
}
int main() {
int n = 0;
srand((unsigned)time(NULL));
do {
menu();
printf("请输入1/0选择\n");
scanf("%d", &n);
switch (n) {
case 1: game();
break;
case 0:printf("DEFEAT\n");
break;
default:printf("请输入正确数字\n");
break;
}
} while (n);
return 0;
}