嗨!大家好,经过之前的三章学习,我们已经基本掌握了什么是C语言、C语言中的数据类型以及分支与循环语句了。那既然学习了那么多知识,我们也是时候进行运用了。接下来这篇文章,我将会带领着大家来做一个比较简单的小游戏:
  “猜数字小游戏!!!”
目录
设计思路
  那在做这个游戏之前,我们得先想好,它是什么样子的一个游戏。首先,作为一个游戏,肯定得需要一个菜单供玩家选择吧,里面至少应该有“开始游戏”“退出游戏”这样的选项才符合逻辑。所以我们需要做的第一步就是先在屏幕上打印一个菜单。
  那有了菜单以后,玩家会进行选择,如果他选了开始游戏,那么游戏正常进行。若他选择了退出游戏,那程序应该结束掉。所以,这里我们应该运用到选择语句来实现。还有,有些时候玩完一把游戏,我还想再玩一把。所以,程序应该只有在选择“退出游戏”的时候才结束,否者就会一直循环。
  那有了以上思路以后,我们就得考虑游戏的实现了,作为一个猜数字游戏。首先得由计算机生成一个随机的数,而且这个数生成以后,在这一局游戏中不会发生变化。不然很难猜得中。还需要考虑数字的范围,太大了,游戏难度太高。太小了,没什么可玩性。中和来看,我们可以考虑1~1000的范围,比较合理。
  那在计算机生成一个数字以后,我们就得提醒玩家进行猜测,通过键盘输入数字。然后将玩家输入的数字与电脑生成的数字进行对比。如果相同,那玩家胜利。如果不同???我们得考虑玩家不太可能一次性猜对,所以我们可以多给玩家几次机会,并且提供一些提示。具体允许玩家进行多少次,由你来决定。
  大概的一个设计思路就是这样,具体的细节我们就在代码的实现中进行探索和修改。
代码实现
  第一步,打印一个菜单,而且是可以进行循环的。考虑到无论如何,菜单都是优先打印的,所以,我们采用do...while循环来进行。
  这里,我们使用了函数的概念,大家可以理解为“printmenu()”出现的时候,代码就会跳到它的位置进行运算,所以这样我们就成功打印出了一个菜单。
   既然菜单打印出来了,那么我们就该为玩家提供选择的可能性,创建一个整型变量来接受玩家的选择:
  通过对整型变量“input”的结果判定来进行程序的不同执行方式。这里将input放入while循环的判断中,是当玩家选择0时,程序跳出do...while循环,从而结束游戏。否则,无论玩家选择什么,游戏都会不断的刷新开始。
  这里采用“puts”函数打印,是为了在这个阶段进行检验代码的有效性,避免后面写了一大堆,结果前面出错了就不好了。
  好了接下来,我们就设计一个“game”函数来实现,游戏内部的变化。
  可以看到,我们通过“rand()”这个函数随机生成的数,是永恒不变了。rand函数的包含在头文件“<stdilb.h>”中,使用的时候需要引用一下。它的作用是使得计算机自动生成一个数。
  而且,这里rand所生成的数其实并不是41,它远比41要大很多,因为我们给它的变量盒子是int类型的,所以它经过舍却多余的值,每次超过int类型的极限就会减去一个int的范围,所得到的结果才是41。于是,我们做出以下修改:
  首先是对rand函数进行一个范围确定,然后:
  在main函数的开头,使用srand函数来重置不同的答案。因为要每一局游戏的答案是唯一的,所以就不能将srand函数放入循环当中。time函数的头文件是<time.h>。
运行检验
  好了,经过以上代码的书写,我们就成功制作了一个猜数字小游戏,接下来,我们来试验一下:
  可以看到,我们的游戏运行很成功,那这就没什么问题了。大家可以开始动手做起来了!!!
  下面附源代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void printmenu(void)
{
puts("**********************************");
puts("**********************************");
puts("*********** 1.开始游戏 *********");
puts("*********** 0.退出游戏 *********");
puts("**********************************");
puts("**********************************");
}
void game(void)
{
int n = rand() % 1000 + 1;//rand函数是随机生成一个数的意思
//通过%上1000+1,将范围控制在1~1000里。
int input = 0;//创建一个局部变量,接受玩家的猜测
while (1)//进行一个死循环,直到玩家猜对了,才结束
{
printf("你猜测的数字是>:");
scanf("%d", &input);
if (input < n)
{
puts("笨蛋,猜小了!!!");
}
else if (input > n)
{
puts("傻瓜,猜大了!!!");
}
else
{
puts("恭喜你,答对了!!!");
break;
}
}
}
int main(void)
{
int input = 0;
srand((unsigned int)time(NULL));//通过srand重置起点的方式来进行不同的答案生成
//但是srand也是近乎固定的,于是使用time函数来进行变化取值
do
{
printmenu();
printf("玩家请选择>:");
scanf("%d", &input);
if (input == 1)
{
puts("游戏开始!!!");
game();
}
else if (input == 0)
{
puts("游戏结束!!!");
}
else
{
puts("输入错误,请重新输入!!!");
}
} while (input);
return 0;
}