C语言实现一个小游戏 —— 猜数字
游戏介绍
游戏介绍:游戏会生成一个0-100的随机数,玩家将通过不断猜数得到反馈(猜大了 或者 猜小了)直至猜到正确的数字。
实现思路
通过游戏的介绍,我们首先分析需求:
- 我们需要一个游戏主界面,功能包含进入游戏或者退出游戏;
- 需要一个符合规则的随机数;
- 需要录入猜数并判断与正确答案的关系(猜大了或者猜小了);
- 优化游戏体验;
代码实现
根据上面的需求分析,我们先构建我们的游戏主界面:
int main()
{
int intput = 0;
do
{
printf("猜数字游戏\n");
printf("-------------------\n");
printf("-----1.geme--------\n");
printf("-----0.exit--------\n");
printf("-------------------\n");
printf("请选择\n");
scanf("%d", &intput);
switch (intput)
{
case 1:
geme();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("非法输入,请重试\n");
}
} while (intput);
return 0;
}
我们利用printf函数打印出我们的游戏主界面,并给出提示选1:进入游戏;选0:退出游戏;输入其他数值反馈非法输入。
为了实现游戏的可重复游玩性,我们使用while循环,并根据输入值来判断游戏是否执行(上面选择用 1 0 来判断的好处就体现在这里)。
使用do while 首先打印一次游戏界面再根据scanf函数录入的值来判断是从switch哪里进入,完成游戏主界面的搭建。
在这段代码的实现中,我们需要使用到 <stdio.h> 头文件
接下来完成游戏主体的创建,我们要实现两个目标:一个是生成随机数,另一个是实现对输入数的判断。
void geme()
{
srand((unsigned)time(NULL));
int num = rand()%100+1;
int i = 0;
printf("可以猜了");
while (1)
{
int guess = 0;
scanf("%d", &guess);
if (guess > num)
{
printf("猜大了!\n");
}
else if (guess < num)
{
printf("猜小了!\n");
}
else
{
printf("恭喜你,猜对了答案是%d\n", num);
break;
}
}
}
我们定义一个game函数来实现我们上述的两个目标:
生成符合要求随机数,我们使用rand函数来实现随机数的生成,rand函数的介绍
根据介绍我们可以知道 rand函数是一个伪随机数,是根据一定的算法来以及srand为参数来实现随机数的生成。
那么我们进一步利用time即时间的动态性,来提高随机数的生成的难以预测性。
在本段代码过程中我们需要用到srand函数 rand函数 time函数,他们相对应的头文件为 <stdlib.h> <time.h>
现在我们已经完成了主界面和游戏主体的实现,但是整个游戏体验却很糟糕,例如上次的游戏内容还残留着。
那么我们对主界面的代码进行优化
int main()
{
int intput = 0;
do
{
printf("猜数字游戏\n");
printf("-------------------\n");
printf("-----1.geme--------\n");
printf("-----0.exit--------\n");
printf("-------------------\n");
printf("请选择\n");
scanf("%d", &intput);
switch (intput)
{
case 1:
geme();
Sleep(2000);
system("cls");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("非法输入,请重试\n");
}
} while (intput);
return 0;
}
我们加入了system函数 以及Sleep函数,他们分别用来实现清屏以及游戏获胜后的短暂停留。
而他们的头文件为 <windows.h>
到了这里我们的游戏就已经完成了,然而我们实际上还可以对游戏进一步优化,比如增加游戏猜数机会的限制等等来增加我们游戏的趣味性。
完整源代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void geme()
{
srand((unsigned)time(NULL));
int num = rand()%100+1;
int i = 0;
printf("可以猜了");
while (1)
{
int guess = 0;
scanf("%d", &guess);
if (guess > num)
{
printf("猜大了!\n");
}
else if (guess < num)
{
printf("猜小了!\n");
}
else
{
printf("恭喜你,猜对了答案是%d\n", num);
break;
}
}
}
int main()
{
int intput = 0;
do
{
printf("猜数字游戏\n");
printf("-------------------\n");
printf("-----1.geme--------\n");
printf("-----0.exit--------\n");
printf("-------------------\n");
printf("请选择\n");
scanf("%d", &intput);
switch (intput)
{
case 1:
geme();
Sleep(2000);
system("cls");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("非法输入,请重试\n");
}
} while (intput);
return 0;
}