今天为大家带来C语言猜数字小游戏
话不多说,首先确定我们的逻辑框架
1.电脑生成一个1~100的数字
2.猜数字
猜大了,就告诉猜大了
猜小了,就告诉猜小了
猜对了,就结束
好,我们在日常玩游戏,一开始都会出现一个菜单,选择开始游戏或者退出游戏
菜单如图:
![](https://i-blog.csdnimg.cn/blog_migrate/3ae4f2cbe7172d88a5b46dbe7d7e67db.png)
函数的名称为menu,内容也很明了,输入1就是开始游戏,输入0就是离开游戏。
所以我们用switch来选择1或0
因为游戏是可以反复进行的,所以我们要使用循环,那么问题来了,要用什么循环呢,如果我们想要一运行代码,就显示游戏菜单,用 do while 循环。
如图:
![](https://i-blog.csdnimg.cn/blog_migrate/e3dd3c50c6d6cd80e34455b55cd4f91c.png)
在电脑内部申请一块空间,创立input,然后输入input,如果intput=1,case1开始游戏,如果input=0,case 0退出游戏,输入的是其他的数就提醒重新输入。
以上是游戏执行的基本框架,还差游戏本身,当case1执行后,游戏就得运行起来了,所以关于游戏执行部分的代码,我们用一个game()函数来写。
在case1后边把那句printf函数替换成game();
在game()函数中
第一步,生成随机数。
怎么生成呢?这里给大家介绍一个库函数rand()
![](https://i-blog.csdnimg.cn/blog_migrate/e7cb0fb44f59d16e542139f8c3739671.png)
他就是专门用来生成随机数的,从图片里可以得知,rand生成0~32767之间的数字。
把rand()放在game()函数里,让我们运行一下代码
![](https://i-blog.csdnimg.cn/blog_migrate/87ae7b99fedf44cde7eb0234432240dd.png)
确实是生成随机数了,但是!!如果我们这时候重新来一次运行代码,你会发现一件事,就是第二次生成的随机数,和第一次一模一样。无论试多少次都是一样的。这怎么办呢
注意读这句话
![](https://i-blog.csdnimg.cn/blog_migrate/54927694de23caadda698797fee126e6.png)
在使用rand前,要使用srand函数来设置随机数的生成,srand是生成随机数的种子
srand()括号里如果放的是一个一成不变数那么生成的随机数永远都是一个,里边是1的话,生成随机数是45,里边是2随机数是60,所以要想srand生成随机数传给rand,srand()里边也得是随机数。
这就迷惑了,无限套娃了嘛这不是,要想获得随机数们就得先传进去一个随机的数。怎么解决?当然有办法!
问:无论什么时候都不会发生停止得东西试什么?
是时间。时间永远在变化。电脑里有一个东西叫做时间戳(新概念要记住),他是一直变化的一个东西,把他放在srand里,srand(时间戳)
时间戳在代码里怎么表示?
![](https://i-blog.csdnimg.cn/blog_migrate/83210c80854be46e0bfcedfe09849870.png)
如图,里边就是时间戳引用了time函数,也是库函数,用它的时候要有头文件#include<time.h>
好,现在随机数的问题解决了
接下来就是我们该猜一猜了。
创立一个整形变量guess,存储我们猜的数,输入
然后进行判定
猜大了,就告诉猜大了
猜小了,就告诉猜小了
猜对了,就结束
代码实现:
![](https://i-blog.csdnimg.cn/blog_migrate/92f6e8df676a6a702c6d20abe98562ad.png)
讲解:
rand%100+1是什么意思呢,前面我们提到过,rand函数生成的是0~32767之间的数字,我们想要的是1~100之间的数字,所以%100+1范围就变成了1~100。
完整代码:
#include<stdio.h>
void menu()
{
printf("*****************\n");
printf("***** 1.play ****\n");
printf("***** 0.exit ****\n");
printf("*****************\n");
}
void game()
{
//生成随机数
int ret=rand()%100+1;
int guess;
while(1)
{
printf("请输入数字:");
scanf("%d",&guess);
if(ret>guess)
{
printf("猜小了\n");
}
else if(ret<guess)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
int main()
{
//设置随机数生成器
srand((unsigned int)time(NULL));
int input=0;
do
{
menu();
printf("是否开始游戏\n");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("输入错误,请重新输入!");
break;
}
}while(input);
return 0;
}
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/0a561eb76668848ff5c2523e1f9debf8.png)
还有什么不懂的请在评论区发言。
有兴趣的伙伴可以去我的gitee提取更多有趣代码。