要实现的功能:
- 自动产生一个1~100的随机数。
- 猜数字 - a、猜大了,就恭喜你,游戏结束 b、猜错了,会告诉你是猜大了还是猜小了
- 这个游戏你可以一直玩,直到游戏结束
首先我们要制作一个菜单:
#include <stdio.h>
void menu()
{
printf("####################\n");
printf("#### 1.paly #####\n");
printf("#### 0.exit #####\n");
printf("####################\n");
}
int main()
{
menu();
printf("进入或者退出(1/0):");
return 0;
}
这个菜单会打印输出一个菜单;然后提示你是进入游戏还是退出游戏。这时我们需要从键盘上输入一个数并且要判断这个数是1/0/其他,然后用分支语句分别对输入的数做出不同的行为。
int main()
{
int imput = 0;
menu();
printf("进入或者退出(1/0):");
scanf("%d", &imput);
switch (imput)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输错了,请重新输入\n");
break;
}
return 0;
}
由于我们要实现游戏可以一直玩,知道游戏结束,那么我们可以将主函数中的部分代码放入do - while循环当中,来实现这个功能。
不管imput输入的是什么,循环体都会先走一遍,然后再判断是不是要再进入循环。当imput的值为非0时,循环再次执行;当imput为0时,循环结束,游戏结束。
然后我们就要对进入游戏后要做的事进行编写了。我们的目的是要实现一个1~100的随机数。在C语言中有一个随机数生成函数:rand()。
void game()
{
int rej = rand();
printf("%d\n", rej);
}
但是这里我们发现,我们每次退出程序,再进入游戏,这个随机数都是41,这不符合我们想要的随机数的想法。这里的问题在于这个随机数生成函数在使用的时候需要使用srand()函数对其进行设定。下面是库函数rand()和srand()的说明。rand()和srand()的使用需要引入头文件
#include <stdlib.h>
那么我们应该怎样设置才能让这个数字随机起来呢,我们需要使用srand函数对rand函数进行设定,srand就是给rand随机数设定一个初识的值,就是从哪开始的。
srand((unsigned)time(NULL));
这里所用到的time函数,是使用了时间戳的概念。时间戳就是将系统现在的时间和初始的时间相减,得出的一个差值。
那么当我们把这个时间戳参数给srand函数之后,可以看到现在的每个随机数都离得很近,不是我们希望的那种随机数(也就是不够随机),为了解决这个问题,我们将这个srand函数放到循环外面,整个程序中只对rand设置一次,这样这个数就足够随机了。
接下来我们就要允许玩游戏的人输入一个数,然后程序对这个数和随机生成的数进行比较,然后给出提示来让玩游戏的人继续猜直到猜中。
全部代码:
#include <stdio.h>
#include <stdlib.h>
void menu()
{
printf("####################\n");
printf("#### 1.paly #####\n");
printf("#### 0.exit #####\n");
printf("####################\n");
}
void game()
{
int rej = rand()%100+1;
int guess = 0;
while (1)
{
printf("请输入猜的数:");
scanf("%d", &guess);
if (guess < rej)
{
printf("猜小了\n");
}
else if (guess > rej)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了!!!\n");
break;
}
}
}
int main()
{
int imput = 0;
do
{
srand((unsigned)time(NULL));
menu();
printf("进入或者退出(1/0):");
scanf("%d", &imput);
switch (imput)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输错了,请重新输入\n");
break;
}
} while (imput);
return 0;
}
这里对int rej = rand()%100+1 进行解释:rand()%100是一个0~99的余数,余数加一正好符合我们的需求。
游戏运行的效果为:
一定要认真地去理解这个程序的逻辑结构!加油吧!