(1.)所需函数
在猜数字游戏中我们要实现的几个功能分别是,生成随机数,玩家输入数字,判定数字是否为随机数,若是则打印“猜对了,游戏胜利”,若猜的数字比随机数大那么打印“猜大了”,若猜的数字比随机数小那么便打印“猜小了”,除此之外还需添加计步的概念,玩家每猜一次次数便减一,那么理论存在,实践开始。
在这其中我们需要用到一个名为rand的
函数,rand函数的作用便是生成随机数,它的头文件是<stdlib.h>,并且它的随机数生成范围在0~32767之间。
它的定义是生成一个伪随机数,为什么要说是伪随机数呢?因为一个rand函数的本质是对一个种子的基准值进行运算生成,这就是说明rand函数生成的随机数并不随机,所以我们需要另一个函数来对rand函数的种子进行初始化。
那么这个函数是什么呢?是srand函数:
srand函数格式为:void srand(unsigned int seed);
程序调用中rand函数先调用srand函数,通过srand函数的参数seed来设置rand函数的生成随机值的种子,只要种子变化则生成的随机数序列也会变动,也就是说,若srand函数的种子随机那么rand函数的值也同样随机,我相信有聪明的读者已经看出了问题,生成随机数也同样需要随机数这个概念就自相矛盾,那么我们就又需要一个随机数函数来拯救这段逻辑失误。
这个函数就是time函数,time函数头文件是<time.h>
格式为time_t time(time_t*t); time函数会返回一个当前日历时间的一个时间戳,即是从1970年0时0分0秒到现在的时间差值。
(2.)程序实现
解决了随机数和函数的问题,我们就该实战了,可是一个新的问题又出现了,rand函数返回的随机数太随机也太大了,我们有没有什么办法可以让rand函数只生成100以内的随机数,这样当然可以,只要将rand函数生成的随机值%上100加上1,即:rand()%100+1;便可以生成100以内的随机数。
首先我们打印出菜单栏
即:
void menu()
{
printf("***************\n");
printf("****1.play ****\n");
printf("****0.exit ****\n");
printf("***************\n");
}
然后开始编出游戏的主体部分,也就是猜数字的实现:
void game()
{
int a = rand() % 100 + 1;
int guess = 0;
int count = 5;
while (count)
{
printf("你还有%d次机会\n", count);
printf("请猜数字>:");
scanf("%d", &guess);
if (guess < a)
{
printf("猜小了\n");
}
else if (guess > a)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了,数字是:%d\n",a);
break;
}
count--;
}
if (count == 0)
{
printf("你失败了,正确值为%d\n", a);
}
}
实现计步的原理很简单,那就是循环,我们定义一个count来进行计步计算,首先给出count的初始值也就是玩家有多少次机会,然后每循环一次初始值便减一,直到为0,则玩家挑战失败,而且我们在每回合开始时便打印出count来告诉玩家还有多少次机会。
最后就是主函数的构建,主函数的构建比较简单,因为游戏部分已经写好,我们只需要调用即可。
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
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;
}
最后我们使用do while循环,以保证玩家玩完一次之后还可以继续选择重新再来一次。
那么最后的程序便是:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("***************\n");
printf("****1.play ****\n");
printf("****0.exit ****\n");
printf("***************\n");
}
void game()
{
int a = rand() % 100 + 1;
int guess = 0;
int count = 5;
while (count)
{
printf("你还有%d次机会\n", count);
printf("请猜数字>:");
scanf("%d", &guess);
if (guess < a)
{
printf("猜小了\n");
}
else if (guess > a)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了,数字是:%d\n",a);
break;
}
count--;
}
if (count == 0)
{
printf("你失败了,正确值为%d\n", a);
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
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;
}