本期介绍??
主要介绍:如何一步一步的把整个扫雷游戏的所有功能实现,详细的讲解其中每一个功能从无到有的思考过程以及代码上的实现??。
文章目录
一、扫雷游戏??
扫雷是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。这款游戏的玩法是在一个9 * 9(初级),16 * 16(中级),16 * 30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。值得注意的是:若翻开的格子下没有地雷,则会标记其周围一圈格子中包含雷的个数,所以若想顺利通关就必须利用好这些显示出来的数字。如下图所示。(而我们今天要实现的是9×9方格的扫雷游戏,棋盘上一共放置了10个地雷)
二、test.c文件的实现??
2.1程序实现思路 ??
首先,我们要思考一下怎样才能实现的和计算机里的扫雷游戏一样呢?进入计算机里的扫雷游戏,首先映入眼帘的是9×9的棋盘上所有的格子都被掩盖了。然后随机去翻开一些格子,你肯定能发现会出现几种情况:
1.当翻开的是“地雷”时,你会被炸死游戏结束。
2.当翻开的格子周围一圈当中存在“地雷”时,翻开的格子下面会显示周围一圈格子内存在“地雷”的个数。
3.当翻开的格子周围没有“地雷”时,会一下子展开一大片区域。
然后不断地翻开格子,直到把所有的非“地雷”的格子全部翻开后,游戏提示:扫雷成功!那我们该怎么实现这里双层结构的棋盘呢?你会发现双层结构的第一层是用来覆盖住第二层上显示的内容,一个想法就油然而生了:我们是不是只要创建两个二维数组,其中一个隐藏在暗处用来存放这些地雷啊、数字的信息,用户是看不见的;另一个则是专门向用户展示的,是摆在明面上的棋盘。(这期会实现:可以自己标注地雷位置的操作,还有炸金花式展开的功能)
游戏菜单:选择是否开始玩儿游戏,1:开始游戏,0:退出游戏。
游戏流程:创建两个格子棋盘(其中一个是隐与幕后存放地雷信息用的,另一个是向用户展示的)→ 初始化两个棋盘 → 随机放置地雷 → 实现打印棋盘 → 开始扫雷(用户输入要查找的位置的坐标 → 判断是否有雷 → 有则游戏结束,若没有则显示其周围一圈中地雷的个数或者炸金花式展开一片)→ 直至扫完所有非雷区 → 游戏结束。
2.2代码 ??
代码如下:
#include"game.h"
void menu()
{
printf("*****************************************
");
printf("********* 1.play 0.exit *********
");
printf("*****************************************
");
}
void game()
{
//存放地雷的棋盘
char mine[ROWS][COLS] = { 0 };
//展示给用户看的棋盘
char show[ROWS][COLS] = { 0 };
//初始化棋盘
init_board(mine, ROWS, COLS, '0');
init_board(show, ROWS, COLS, '*');
//放置地雷
set_mine(mine, ROW, COL);
system("cls");//清空屏幕
//打印棋盘
//display_board(mine, ROW, COL);
display_board(show, ROW, COL);
//开始扫雷
find_mind(mine, show, ROW, COL);
}
int main()
{
//设置随机数的起点
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();//菜单
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏
");
break;
default:
printf("输入错误,请重新输入
");
break;
}
} while (input);
return 0;
}
注意:仔细看上面的代码,你会我并没有引<stdio.h>头文件而是引了"game.h"文件,而且程序中出现了很多未定义的标识符:如ROW、COL、ROWS、COLS(这里的ROW表示:行,COL表示:列