一、扫雷的游戏规则
这款游戏的玩法是在自定义大小的方块矩阵中随机布置一定量的地雷。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷。如果玩家翻开的方块有地雷,则游戏结束。
二、扫雷游戏的基本实现思路(基本流程)
- 建立一个游戏菜单
- 创建两个游戏盘(一个用于用户显示,另一个用于放置地雷)
- 将两个游戏盘初始化
- 将初始化后的游戏盘进行打印
- 玩家翻开游戏盘并打印(玩家输入行列坐标的方式来翻开)
- 更新游戏信息(翻到地雷则直接游戏,未翻到雷则继续游戏并显示周围八个格子的地雷个数)
- 若未翻到雷则回到 4 继续翻雷直至将非地雷的空格全部翻完则游戏胜利。
三、游戏的具体实现过程(源代码)
(一).代码总览
#include<stdio.h>
#include<windows.h>
#include <time.h>
#define MAX_ROW 9//定义一个9x9的游戏盘
#define MAX_COL 9
#define MINE_COUNT 10//定义地雷的数量
//游戏初始化
void init(char showMap[MAX_ROW][MAX_COL],
char mineMap[MAX_ROW][MAX_COL]) {
// 1. 初始化 showMap, 全都设为 *
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
showMap[row][col] = '*';
}
}
// 2. 初始化 mineMap, 先全设为 '0', 然后随机生成 N 个 '1'
// N 的值就是 MINE_COUNT
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
mineMap[row][col] = '0';
}
}
int n = MINE_COUNT;
while (n > 0) {
// 生成雷的随机位置.
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mineMap[row][col] == '1') {
// 如果当前位置已经有雷了, 就直接进入下次循环, 重新
// 产生随机位置.
continue;
}
mineMap[row][col] = '1';
n--;//将十个雷都放进去
}
}
//打印函数(前几次都是打印showMap,游戏结束打印mineMap)
void printMap(char theMap[MAX_ROW][MAX_COL]) {
// 先打印出第一行, 第一行就是包含所有的列号
printf("雷|");
for (int col = 0; col < MAX_COL; col++) {
printf("%d ", col);
}
printf("\n");
printf("--+------------------\n");
// 然后在打印下面的每一行的时候再打印行号
for (int row = 0; row < MAX_ROW; row++) {
printf(" %d|", row);//行号
for (int col = 0; col < MAX_COL; col++) {
printf("%c ", theMap[row][col])