我们从源码开始,分析整个游戏的运行过程
全部代码请见【C语言扫雷 - 优快云 App】
minesweeper.c片段
#include <stdio.h>
#include "minesweeper.h"
#include <time.h>
char ShowMines[X][Y];
char mine[X][Y];
char MineNumber[X][Y];
char safe[X][Y];
片段中引入了<time.h>,根据时间可以随机生成雷的位置。
下面是四个字符数组,x坐标和y坐标对应了棋盘中的x轴和y轴,不过棋盘中是从1开始,数组中从0开始。
四个数组的含义:
- ShowMines:显示在屏幕上的数组
- mine:记录雷的位置,有雷是1,无雷是0
- MineNumber:记录棋盘中每一个点周围的雷数
- safe:记录无雷的位置,初始状态与mine数组刚好相反
minesweeper.h
#define X 5//棋盘的长
#define Y 5//棋盘的高
#define B 1//雷数
void set();
void show();
void number();
int play();
char IntToChar(int a);
int clean(int a, int b, int x, int y);
int clean_a(int a, int b, int x, int y);
int clean_b(int a, int b);
int clean_x(int a, int b, int x, int y);
int clean_y(int a, int b);
int SetSeed(unsigned int seed);
开头是三个宏定义:X,Y,B。X控制了棋盘的长度,Y控制了棋盘的高度,B控制了棋盘的雷数。
几个函数的意义:
- set():设置四个数组的初始状态
- show():将ShowMines数组打印在屏幕上
- number():设置MineNumber数组
- play():控制游戏的运行和停止
- IntToChar():输入int类型,输出对应的char类型
- clean()系列:递归展示雷数为0的点
- SetSeed():辅助set()在随机位置生成雷