要求:用C语言设计一个猜数字的游戏,系统将随机生成一个1~100之间的整数,你将有7次(次数可以自行修改)机会进行猜测,若7次猜测都未成功,则游戏失败;若在7次之内成功,则游戏成功。
分析:首先要解决的问题就是要产生一个随机数,供我们去猜测。下面介绍随机数的引用。
rand()作为一个随机变量,就如同int a;只不过不需要定义,语句printf("%d\n",rand());则会打出一个随机数。但是rand()打出的随机数只是伪随机数,伪随机数不是真正的随机数,是通过某种算法生成的随机数,真正的随机数是无法预测下一个值是多少的。rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。需要在()上加上数字,即rand的种子,不然一次输出的随机数就不会改变。我要通过改变种子来改变随机数,生成种子可以用srand函数,在前面用。然而srand生成的种子也不是随机的,又是个伪随机数种子,又要另一个东西来生成一直在变化的种子,来彻彻底底的实现随机数。我们可以以时间为变量,因为时间每时每刻都在发生改变,所以以时间为种子,种子每时每刻都在变化,生成的就是变化种子的随机数,即完全意义上的随机数。所以引用time函数。最终的代码如下 :
srand((unsigned int)time(NULL));//time是整型,这里强制取整来确保整型。
然后就是把随机数控制在0到100的范围内,任何一个自然数除以100,余数的范围在0~99之间,加上1,范围就变成了0~100。即rand%100+1的范围在0~100之间。
int r = rand() % 100 + 1;
接下来就是创建变量,用一个循环引入开始游戏进入游戏,把这个循环称为循环1,在循环1上嵌套循环2,循环2用来解决猜数字的程序,所以我创建一个game函数,即:猜数字的程序。为了增加游戏难度,我在game函数中设置了猜数字的机会,由二分法可知,1~100之间的猜数字,在有反馈提示的条件下,至多需要7次机会,这里交给读者去思考如何猜才能在七步之内猜到正确答案。这里在开始界面输入1后会开始游戏,猜完之后(无论是否猜对)会再次到这个界面;如果你不想继续或不想开始,输入0直接退出游戏,程序终止。
//猜数字游戏//
#include <stdio.h>
#include <stdlib.h>//使用此头文件,就可以使用伪随机数rand()。再用srand()来生成种子。
#include <time.h>// 时间戳 使用srand来生成种子,又以时时刻刻变化的时间time为种子,如此生成的随机数
//则不再是伪随机数,而是完全意义上的随机数。
void meau()//游戏开始界面的菜单的函数。
{
printf("******猜数字游戏*******\n");
printf("1~(到)100之间猜一个数\n");
printf("***********************\n");
printf("******* 1. play *******\n");//输入1开始游戏
printf("******* 0. exit *******\n");//输入0退出游戏
printf("***********************\n");
}
void game()//猜数字的函数。
{
int r = rand() % 100 + 1;
int guess = 0;
int count = 7;
while (count)
{
printf("你还有%d次猜数字的机会\n", count);
scanf("%d", &guess);
if (guess > r)
printf("猜大了\n");
else if(guess < r)
printf("猜小了\n");
else
{
printf("恭喜你,猜对了\n");
printf("正确答案就是%d", r);
break;
}
count--;
}
if (count==0)
{
printf("你未能猜对数字,游戏失败\n");
printf("正确答案是%d\n", r);
}
}
int main()//主程序
{
int input = 0;
srand((unsigned int)time(NULL));//time是整型,这里强制取整来确保整型。
do
{
meau();//菜单,前面创建函数,这里引入,使代码简洁。
printf("请选择是否开始>:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("游戏开始\n");
game();//前面创建函数,这里引入,使代码简洁。
break;
case 2:
printf("退出游戏\n");
break;
default :
printf("输入错误,请再次输入\n");
break;
}
} while (input);
return 0;
}