目录
1.扫雷游戏的介绍
小时候谁不会在电脑课上偷偷点开Windows菜单里的游戏列表呢。蜘蛛纸牌,三维弹球,扫雷,空当接龙...一个个经典小游戏想必是印象深刻了。今天我就带大家还原一下Windows自带小游戏中的经典:扫雷。
虽然说扫雷这游戏很多人都玩过,但可能有些人还不知道游戏规则吧。小时候经常点开扫雷一顿左键操作,最后趟雷而死。其实,扫雷的游戏规则很简单。
(游戏界面)
在一片雷区上,左键点击一块区域,在该区域排雷,若没有雷则会显示附近8个区域地雷的数量,即“扫”雷。
若是不小心踩中地雷,就会直接被“炸死”。
而我们的目标,就是在不踩雷的前提下,一步步探索区域,直至将所有区域探明,就可以取得胜利。
说完了游戏规则,我们使用VS进行扫雷的实现。
2.代码的实现
2.1菜单与游戏入口
要复刻一个扫雷游戏,我们得一步步完成。
首先,我们需要一个菜单与进入游戏的入口。这里我们在主函数内实现,并创造一个menu函数打印菜单。
在主函数内部,我们使用do...while语句与switch语句,达到循环游玩以及选择。
void menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****2.exit*****\n");
printf("****************\n");
}
int main()
{
int input = 0;
do
{
menu();//打印菜单
printf("请输入->:");
scanf("%d", input);
switch (input)
{
case 1:
game();//进入游戏主体函数
break;
case 0:
printf("退出游戏\n");
break;
default :
printf("输入错误,请重新选择\n");
break;
}
} while (input);//当input==0时结束循环,退出游戏
}
2.2棋盘的初始化
完成了棋盘的打印,接下来我们就实现棋盘的初始化。这里我们尝试构造一个二维数组作游戏雷区的储存与展现。这里我们初始化游戏的初级难度版本,区域大小为9*9,地雷数量为10,所以我们的二维数组初始化如下。
void game()
{
char mine[9][9] = { 0 };
}
我们设想在没有地雷的位置放上0,有地雷的位置放上1,以作区别。
我们知道,扫雷游戏在每走一步时就会给出周围地雷的数量,那么,我们可以通过遍历区域周围的八个区域来计算该区域应该显示的数字。
例如图中蓝色区域,周围有两个雷,我们便在点击蓝色区域后在该区域显示数字2。但是这样,周围一圈的区域在遍历周围区域时,就会出现数组越界现象:
例如图中的蓝色区域,其右侧的三个元素均不在数组范围内,这样会导致程序无法进行下去。
所以,我们在这里将数组大小扩大一圈,形成一个11*11大小的数组,并且在最外圈赋予初值0,这样就不会干扰到正常的地雷数量判断,也不会造成数组越界了。
所以我们将原来的数组大小进行修改:
void game()
{
char mine[11][11] = { 0 };
}