要用C语言实现一个猜数字游戏,那么首先需要了解我们的游戏的要求~
【游戏要求】
【猜数字游戏】:
由电脑随机生成一个(1~100)的数字,然后由玩家来猜数字。
玩家猜小了,则告知猜小了;玩家猜大了,则告知猜大了。直到猜对为止。
游戏可以一直玩下去。
那么我们将用代码一步步实现这些要求~
【代码实现】
#include <stdio.h>
void menu()
{
}
int main()
{
do
{
menu();
} while ();
return 0;
}
这是一开始的基本的代码架构。因为游戏可以一直玩下去,所以设置了do...while循环来实现这一点。其中的menu是一个“菜单”,帮助玩家选择“开始游戏”或“退出游戏”。目前这些都只是基本架构。
- menu的内容可由程序设计者自行设计调整。这里选择了简洁的画面,提示玩家通过1/0的输入来实现游戏的开始和关闭。
- 用scanf获取玩家输入的数字之后要进行判断。用switch...case语句,分成1、0、其他三种情况进行判断。
- while内的条件判断可以用input的值来决定。因为0代表退出游戏也就是结束循环。
代码实现如下:
#include <stdio.h>
void menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("****************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字\n");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
此时的运行界面是这样的:
输入1会不断循环运行,输入0则会退出。第一阶段的目标就这样达成了!
【补充:建议大家写一段代码之后就要测试一下(比如现在我们的游戏代码就可以测试了)。如果因为前面代码的错误导致后面代码需要推倒重来是非常可惜的!所以一定要记得一个阶段一个阶段的运行检测代码哦!】
当然,我们的游戏并不可能只是循环打印“猜数字”这么简单,接下来要用代码将游戏丰满起来!于是我们可以在case 1 这个需要开始游戏的情况下插入一个关于游戏的函数。一旦需要开始游戏则进入这个游戏函数开始游戏。那么接下来要做的就是实现我们的游戏函数。
实现这个函数首先需要电脑生成一个随机数给我们猜。
C语言中有一个叫做rand()的函数
它可以生成一个范围为0~32767随机数,它不需要参数,可以返回一个int类型的值,头文件是<stdlib.h>。
但是!发现rand生成的随机数每次重开游戏都是一样的顺序!这是不行的!这是伪随机数!
然后我们再次阅读文件,发现上面写在运行rand前需要一个srand函数。
它需要一个参数,如srand(100)。如果输入的数相同则会生成相同的随机数,输入的数不同则生成不同的随机数。那么问题又出现了,如果需要srand生成一个随机数,那么就需要给它输入一个随机数。哈哈哈这个先有鸡还是先有蛋的问题应该要怎么解决呢?
我们需要给srand传进去一个一直在发生变化的数。那么什么东西一直在发生变化呢?时间!时间在不停流逝不停变化!如果把时间传给它就能解决这一问题了!那么接下来,就需要介绍一个东西;
【时间戳】
时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。
C语言的time函数可以返回时间戳。
可以将时间戳放在传入的地址参数里,也可以直接用其返回值返回时间戳,此时参数可以数额职位空指针。它返回的time_t类型本质上是一个整数。而srand需要的也是一个整数。那么就可以实现代码了!代码:srand((unsigned int)time(NULL));但要注意,srand只需要在整个一轮游戏中调用一次即可。(若频繁调用,则可能会得到相同值)于是,我们将srand放在了主函数里。这样就能实现随机数了。另外还要记得调整随机数范围至1~100。我们采取%100+1的方法就行啦!
随机数生成要点如下:1、需要rand 2、需要srand 3、需要利用时间戳 4、srand只需要调用一次 5、调整随机数范围
猜数字的实现
用while循环来让玩家一遍一遍地猜数字,用if...else语句来判断猜的大了还是小了。猜对了则用break跳出循环。
整体代码如下:
#include <stdio.h>
#include <time.h>
void menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("****************\n");
}
//猜数字游戏的实现
//时间戳
void game()
{
int guess = 0;
//生成随机数
int ret = rand() % 100 + 1; //rand可以生成一个0~32767的随机数 调整其范围
//猜数字
while (1)
{
printf("猜数字:>\n");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对啦!\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL)); //srand只需调用一次所以放在这
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
至此,这个猜数字游戏的代码就此结束了!