说起扫雷游戏,这应该是很多人童年的回忆吧,中小学电脑课最常玩的必有扫雷游戏,那么大家知道它是如何开发出来的吗,扫雷游戏背后的原理是什么呢?今天就让我们一探究竟!
扫雷游戏介绍
如下图,简单版本的扫雷游戏,就是在一个9*9的方格阵中,埋藏了10颗地雷,而玩家就是根据这个方阵的反馈,进行10颗地雷位置的排查。
具体的游戏规则如下,玩家随机选择一个位置,如果选取位置不是雷,则显示数字。对于边缘的数字,则显示图中数字周围临近的5个方格中含有的地雷个数,例如下图红色圈起来的数字2,则说明红框之中必有两个地雷,即黑色×处。再看绿色框出来的数字2,它处于方格阵的中间位置,则看它周围临近的8个方格,含有2个地雷,也是黑色×处。
玩家可以根据数字的提示,筛选出10颗雷的位置,最终获得游戏胜利。反之,如果不幸选取到雷(即踩雷),则游戏失败。
扫雷游戏设计方案
1. 创建两个两个二维数组,一个作为埋雷地图,另一个作为玩家视角的排雷视图。
2. 设计一个9*9的扫雷游戏,但为了防止在统计坐标周围雷的个数的时候越界,设定数组的大小为11*11。
3. 数组均为字符数组.
4. 此次游戏实现同样采用多文件的形式设计。
test.c —— 测试游戏功能是否完好的代码
game.c —— 实现游戏逻辑的核心代码
game.h —— 游戏变量及函数的声明
扫雷游戏具体实现
(一)game.h文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11
#define EASY_MODEL 10
void InitGame(char board[ROWS][COLS], int row, int col, char set);//初始化棋盘
void DisPlayBoard(char board[ROWS][COLS], int row, int col);//展示棋盘
void InitMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//初始化地雷
void StartGame(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int GetMine(char mine[ROWS][COLS], int row, int col);
//int SearchMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col,int x, int y,int count);
void SearchMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y, int* num);
(二)test.c文件
1.main函数
在实现游戏功能的时候,一般都是在main函数中写出大体的框架,当遇到需要实现一些功能时,我们再去设计函数完成对应功能。
这里设定游戏可以玩多局,即当游戏结束是不用退出可以继续选择是否进行下一局游戏,所以这里使用循环。同时,在第一局开始前询问玩家是否开始游戏,则采用do....while()循环。
这里设置一个菜单来提醒玩家是否进行游戏。同时,玩家选择1时表示开始游戏,选择0时表示游戏结束,退出程序,选择其他时要提示玩家输入非法,并重新进行选择,所以这里需要一个switch选择语句。同时设置随机种子,方便每次开始扫雷游戏时,地雷都能随机位置。
int main()
{
int input = 0;
srand((unsigned int)(time(NULL)));//设置随机种子
do {
menu();
scanf("%d", &input);
switch (input)
{
default:
printf("输入错误嗷,请重新输入!\n");
break;
case 1:
printf("扫雷游戏启动....\n");
game();
break;
case 0:
printf("扫雷游戏结束咯....\n");
break;
}
} while (input);
return 0;
}