猜数字游戏(1到100之间)

猜数字游戏是我们日常生活中家喻户晓的游戏,那么我们有没有想过,这么有趣的一个游戏,在c语言中是如何表达出来的呢?让我们一起往下看:

#include

void menu()

{

printf("****************************\n");

printf("******** 1.play 0.exit******\n");

printf("****************************\n");

}

int main()

{

int input = 0;

do

{

menu();(menu()、printf、scanf一定要放在循环内)

printf("请选择\n");

scanf("%d",&input);

switch(input)

{ case 1:

printf("猜数字\n")

break;

case 0:

printf("退出游戏");

break;

default:

printf("输入错误,请重新选择\n");

break;

}

}while(input);

}

首先,我们采用do....while循环,以确保程序至少可以运行一次。当我们进入循环后,就等于我们进入了游戏界面,因此,进入后的第一件事就是打印菜单menu()以供玩家选择,菜单中有0,1两个选项,因此我们需要创建一个变量input作为scanf函数的参数以供玩家输入数字,做出选择。当玩家做出选择以后,每种选择就对应着不同的结果,这时,我们就要用到switch case语句,switch(input)用于判断玩家做出了那种选择,而case:语句则对应着不同选择下不同结果,其中,若玩家输入1,则进入game()函数,开始猜数字游戏。若玩家输入0,则为退出游戏,若玩家输入的数非0非1,则进入default:语句,需要玩家重新输入。代码最后的while中,选择以input作为参数是很有讲究的,若玩家输入1,结束猜数字游戏后,break跳出,因为input == 1,所以条件为真,while循环,玩家重新回到菜单界面,选择继续玩游戏或者退出。若input输入为0,则while中条件为假,程序停止运行,实现退出游戏。若输入的input非0非1,则与第一种情况相同。到此为止,我们已经完成了猜数字游戏的第一步,让我们看看结果:

猜数字游戏(1到100之间)_第1张图片

如图所示,我们很完美的打印出了菜单,以及每个选项对应的结果。紧接着,我们只需要把case1:的擦猜数字游戏实现即可

想要实现猜数字游戏,那么要满足以下两个条件

  1. 生成1—100之间的随机数。

  1. 找一个数与随机数作比较。

  1. 在实现这个函数之前,我们来介绍几个库函数。

  1. rand()随机数函数,他能生成0—2147483647之间的数字,头文件是

若我们只使用这个随机数函数,能否实现游戏呢?让我们往下看看:

#include

#include

void menu()

{

printf("****************************\n");

printf("******** 1.play 0.exit******\n");

printf("****************************\n");

}

void game()

{

int ret = 0;

ret = rand();

printf("%d\n",ret);

}

int main()

{

int input = 0;

do

{

menu();

printf("请选择\n");

scanf("%d",&input);

switch(input)

{ case 1:

game();

break;

case 0:

printf("退出游戏");

break;

default:

printf("输入错误,请重新选择\n");

break;

}

}while(input);

}

结果如下:

猜数字游戏(1到100之间)_第2张图片

看到这很多小伙伴肯定认为一个rand()函数就够用了,别急,我们再运行一次:

猜数字游戏(1到100之间)_第3张图片

由图的结果我们可以发现,两次运行的结果一模一样,rand()产生的随机数一模一样,这又是为什么呢?其实,这里涉及到了起始点的问题,我们得介绍另一个新的函数——srand()函数

  1. srand函数是随机数的初始化函数,用法是srand((unsigned int)seed)。

我们在game()函数中加入srand(1)看看会产生什么结果:

猜数字游戏(1到100之间)_第4张图片

这时候我们又会发现,无论输入多少次1,结果始终是41.这是因为我们在srand()中输入的值是1,这是个常量,所以rand()函数只会被srand()函数初始化一次,因此输出值永远是41。为了改变这种情况,使rand()函数一直在被初始化,我们需要引入一个一直在变化的东西作为srand()函数的参数,让我们动脑想想我们生活中什么东西是随时在变化的呢?很好,是时间。因此我们引入time()函数。

  1. time()函数是时间戳函数,它的起始时间是1970年1月1日,时间戳就是现在的时间减去起始时间。引用time()函数的头文件是

让我们加入time()函数后再试一次:

猜数字游戏(1到100之间)_第5张图片

如图我们可以发现,虽然随机数的值一直在改变,但是相差并不大,几乎相等。这是因为srand()函数被放在了循环中,time()起始点一直在被改变且相差不大(每次选择时间过短,几乎无间隔),因此这种情况time()函数几乎为一个定值,和上一种情况类似,为了解决这种情况,我们将srand()函数放在循环外面,起始时间点只需要调用一次即可:

猜数字游戏(1到100之间)_第6张图片

我们完美的解决了所有出现的问题,只剩下一个问题,如何使rand()函数产生1—100之间的数字呢?

我们不妨给rand()%100,因为任何数%100都产生1—99之间的值,我们再+1,即:

rand()%100+1

我们再试一次看看结果如何:

猜数字游戏(1到100之间)_第7张图片

到目前为止,我们已经实现了这个游戏的大部分,只剩下最后找一个数与随机数作比较。这还是比较简单的部分,我们直接看最后代码:

#include

#include

#include

void menu()

{

printf("****************************\n");

printf("******** 1.play 0.exit******\n");

printf("****************************\n");

}

void game()

{

int ret = 0;

ret = rand()%100+1;

int guess = 0;

while(1)

{

printf("请输入数字\n");

scanf("%d",&guess);

if(ret < guess)

printf("猜大了,请重新猜\n");

else if(ret > guess)

printf("猜小了,请重新猜\n");

else

{

printf("恭喜你,猜对了\n");

break;

}

}

}

int main()

{

srand((unsigned int )time(NULL));

int input = 0;

do

{

menu();

printf("请选择\n");

scanf("%d",&input);

switch(input)

{ case 1:

game();

break;

case 0:

printf("退出游戏");

break;

default:

printf("输入错误,请重新选择\n");

break;

}

}while(input);

}

猜数字游戏(1到100之间)_第8张图片

切记,scanf,printf,menu()一定要放在循环内,因为玩家需要重复进行游戏或者重复进行选择。

注意函数与循环之间的配合,以及循环参数的选用!

文章到此结束,如有不对之处,请大佬们指正!

你可能感兴趣的:(c#)