为了完成这个简单的小游戏,我们首先需要解决的问题是如何获得一个随机数
c语言提供了一个函数rand(需包含头文件stdlib.h)可以生成随机数,但使用rand生成随机数取决于一个叫做“种子”的东西,而种子在未被设定的情况下为默认值1,这样就会导致rand每次生成的随机数其实是固定,也就是伪随机数,并不能达到我们想要的效果,这时c语言又提供了一个可以设定种子的函数srand,在调用rand前先调用srand设定种子,只要种子是随机的那么rand生成的数也就是随机的了,如何获得一个随机的种子呢,时间是在一直变化着的,因此在程序中我们一般使用程序运行的时间作为种子,这样我们的种子就是一直变化着的随机值了,时间的运用c语言中调用的是time函数(需包含头文件time.h)当该函数的参数为NULL时返回的是一个时间的差值(时间戳)将时间戳进行强制类型转换为srand的参数类型(unsigned int)即可作为随机种子,进而通过rand生成获得我们想要的真正的随机数,通过对rand运算还可以设置随机数的范围。
以生成一个1~100的随机数为例,代码如下:
也不要忘记头文件哦!
接下来任务就相对基础了,先整一个piu亮的菜单,这里直接定义了一个menu函数,在后面如需反复运用菜单时会更加的方便;
然后我们来设计主程序,为实现菜单中按1开始游戏按0退出游戏的目的,可以使用一个swich语句,scanf输入变量x,为1时运行game函数开始游戏,为0时退出游戏,当输入其他错误数字时也会给出相应提示,同时为实现多次游戏,可以使用do-while循环,当一局游戏结束时再输入1可通过循环进入下一局游戏;
最后我们来设计游戏本体game函数,获得随机数>>开始游戏,运用的都是一些简单的循环和判断,详细请看图片,这里就不多赘述啦~
完整代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("********************\n");
printf("*** 猜数字小游戏 ***\n");
printf("*** 开始游戏(1)***\n");
printf("*** 退出游戏(0)***\n");
printf("********************\n");
}
void game()
{
srand((unsigned int)time(NULL)); //通过时间戳获得一个随机种子
int a = 1 + rand() % 100; //获得随机数a并且范围是1~100
int b = 0;
int y = 8;
printf("游戏开始\n");
while (y!=0)
{
printf("你还有%d次机会\n",y);
scanf("%d", &b);
if (a > b)
printf("猜小了\n");
else if (a < b)
printf("猜大了\n");
else
{
printf("猜对啦!数字是:%d\n",a);
break;
}
y--;
if (y == 0)
printf("你输了,数字是:%d\n", a);
}
printf("本局游戏结束\n");
menu();
}
int main()
{
int x=0;
menu();
do
{
scanf("%d", &x);
switch (x)
{
case 1:
game();
break;
case 0:
printf("Bye~\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (x);
return 0;
}
c语言小白,博客小白,第一次完整地完成了一篇属于自己的博客,两个多小时的成果,如果有问题的话欢迎指出哦,如果对你有帮助的话可以给我一个赞嘛~我会继续加油哒!(^▽^ )