对于猜数字游戏,我们分为三个步骤解决。
1:生成随机数。
2:菜单及其游戏整体的封装。
3:游戏核心主体构成(游戏如何运转)。
对于随机数的生成,我们要讲到 rand()函数的应用, rand()函数是专门生成随机数的一个函数,它运用时要用到 #include<stdlib.h> 这个头文件,它生成的随机数是根据一个特定的“种子”来确定的,我们不妨实际测试看看
正如图片显示的一样,它生成的数是不一样的,这对于我们解决猜数字游戏有一定的帮助,但是有一个问题,无论你测试多少次,它生成的这个随机数是不变的,你不妨测试一下。拿为啥呢。这是由于 rand()函数运用前提是有一个“种子”,种子不变,生成的随机数是不变的,这时我们又要学到另外的函数 srand() :void srand( unsigned int seed )和 time 函数()(要用到time.h头文件),srand函数是初始化随机数生成器的工具,而 time函数会返回当前日历时间与1970年1月1日0时0分0秒的差值(这里不细述,可以到网站查找),这时我们就可以把时间作为种子,那么种子就可以一直变化,而随机数的生成也就可以不断变化。time函数运用时我们要将其转换无符号整型,不然编译器会警告(不是报错),而且要给一个空指针NULL参数。如图
至此随机数生成就结束,第一步也就完成。
对于菜单,我们可以这样
void menu()
{
printf("*****************\n");
printf("***1.进行游戏 ***\n");
printf("***0.退出游戏 ***\n");
printf("*****************\n");
}
对于如何进出游戏我们可以循环语句,利用真假判断使用 do—while循环,以及switch语句:
int main()
{
int num=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (num);
return 0;
至此,第二步就完成。整个游戏最重要的就是第三步——游戏的核心运转。
我们猜数字游戏,是猜1到100的数字,我们生成的数字是随机杂乱的,我们不妨运用模计算将其转换,但模之后是0到100(整除就变成0),这里我们可以在最后加给1。
int ret = rand() % 100 + 1;
这样我们的随机数就将其控制在了1到100之间,然后就是一直猜数字。猜数字我们可能不会一次性就猜对,可能会持续许多次,那么我们这里不难想到可能与循环有关,那究竟是for还是while还是do—while循环呢?我们首先排除for,这里基本是与它没有什么关系。那剩下两种如何区别,先判断还是先循环,笔者认为都可以,但我优先推荐while。我们任然可以利用0,1真假性来处理。我们让循环条件为真,那么循环就可以一直持续下去,刚好满足我们猜很大次的要求,但万一我们猜对了,如何让它停下来呢?我们不难想到运用break,一旦我们猜对,立即使用break跳出循环,就成功停止,也就意味着猜数字游戏完成。
while (1)
{
printf("请输入你要猜的数字:");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了,数字是%d\n", ret);
break;
}
}
这就是游戏核心内容。
将所有代码组合到一块,就是猜数字游戏的完整代码。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*****************\n");
printf("***1.进行游戏 ***\n");
printf("***0.退出游戏 ***\n");
printf("*****************\n");
}
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;
while (1)
{
printf("请输入你要猜的数字:");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了,数字是%d\n", ret);
break;
}
}
}
int main()
{
int num=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &num);
switch (num)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新选择\n");
break;
}
} while (num);
return 0;
}
对于复杂的代码,我们不妨拆开一段一段写,保持头脑清醒才能效率最高化,希望我的文章对你们有所帮助!!!