提示:以下是本篇文章正文内容,下面案例可供参考
在线扫雷游戏:http://www.minesweeper.cn/
一、扫雷游戏分析和设计
1.功能(控制台实现)
①菜单
②游戏选项
③页面设计
④放置雷
⑤可以排查雷
我们主要的实现这几个功能,接下来我们逐步分析
2.流程逻辑
2.1菜单
我们玩游戏首先展现出来的就是菜单,我们可以给自己的扫雷游戏设计一个菜单,这个也是比较简单。如下:
#include<stdio.h>
int main()
{
printf("--------------------\n");
printf("-----1.开始游戏-----\n");
printf("-----0.退出游戏-----\n");
printf("--------------------\n");
return 0;
}
就是这样的简易菜单:
2.2游戏选项
接下来我们要根据菜单的选项进行游戏的选择,要可以选择的我们利用我们学过的知识,首先想到的是switch
的选择语句,然后要想我们游戏结束后还可以进行选择继续或者退出,这里又要用到我们的循环语句,do...while
在合适不过了,每一次循环菜单都要打印出来,所以我们菜单应该在循环内。整个思路就大致清晰了,我们接下来就是进行代码的翻译。如下:
#include<stdio.h>
void menu()
{
printf("--------------------\n");
printf("-----1.开始游戏-----\n");
printf("-----0.退出游戏-----\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);
return 0;
}
当我们选择1时:
当我们选择0时:
当我们选择0或1以外的数字时:
我们在游戏选项这一步也完成了,接下来我们要进行的是对我们游戏内容进行设计。
2.3页面设计(游戏内容)
当我们选择进行游戏时,我们要给出玩家我们的游戏页面,我们一般玩的扫雷游戏是由一个n*n的棋盘,让我们进行“扫雷”,要打印出我们的棋盘,我们要能够有可以容纳那么多字符的东西,没错就是我们的二维数组,在进行遍历就可以打印出我们的棋盘了,打印前首先要对我们的棋盘进行初始化。
如下:
void game()
{
char mine[ROWS][COLS];//存放布置好的雷,ROWS代表行,COLS代表列
char show[ROWS][COLS];//存放排查出来雷的信息
//初始化棋盘
InitBoard(mine, ROWS, COLS, '0');//mine数组里最先都存放'0',这里存放的是字符0,而不是数字0,不要搞混
InitBoard(show, ROWS, COLS, '*');//展现出来的show数组里最先存放'*',以防我们直接看到雷的位置
//打印棋盘
DisplayBoard(mine, ROW, COL);
DisplayBoard(show, ROW, COL);
//放置雷
SetMine(mine, ROW, COL);
//查找雷
FindMine(mine, show, ROW, COL);
}
我们整个的游戏内容就是这样的一个流程,此时我们会发现我们如果在一个文件里,那么我们的代码就很显得很杂乱无章,此时我们就要使用多个文件进行分装,使得我们整个代码看起来有序,我一共将整个代码分装成三个文件,①test.c ②game.h ③game.h
我们自定义函数,将我们打印棋盘的打印出来
如下:
//初始化化棋盘
//mine数组最开始是全'0'
//show数组最开始是全'*'
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++