扫雷的实现思路
首先我们需要两个棋盘,设计者棋盘和玩家棋盘。打印棋盘后要在棋盘上布雷,这里采用的是九乘九的棋盘放置十个雷。棋盘存储信息用由二维数组来完成,让这个二维数组开始先全部存储0,然后把要布置雷的地方改为1,用来区分雷和非雷。布完雷后开始扫雷,如果第一次输入的坐标处是雷,为了实现第一次不炸死,把这个位置的1改为0,但此时雷的总数就减少一个,需要寻找一个字符为0的坐标将其改成1以维持雷的总数不变;如果第一次输入的坐标不是雷,程序需要实现两个功能,在玩家输入一个周围都没有雷的坐标时用递归展开为空格,在玩家输入一个周围有雷的坐标时显示周围雷的个数。扫完雷后我们需要判断输赢,切忌不要用空格数来判断,因为不是所有没有雷的的地方都显示为空格,有一部分无雷的坐标会显示周围的雷数,空格的个数无法确定,所以要用雷的个数来判断,因为雷的个数是永远不变的。有雷的地方永远显示为’*’,所以玩家扫完所有雷的时只要判断雷的个数是否为10,个数为10时玩家扫雷成功,游戏结束。
需要哪些功能的函数
1.初始化棋盘
扫雷规模为九成九的棋盘布置十个雷,但是为了使玩家能清晰明了的输入坐标,需要给棋盘的行列标上数字,所以实际上我们需要的是一个十一乘十一的棋盘。
2.打印棋盘
3.布置所有的雷
4.获取这个坐标周围的雷数
5.展开一个周围没有雷的坐标
6.第一次不会炸死
7.判断输赢
8.排雷
game.h
#ifndef __GAME_H__
#define __GAME_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#define EASY_COUNT 10
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);
void DisplayBoard(char board[ROWS][COLS],int row,int col);
void SetMine(char board[ROWS][COLS], int row, int col);
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
void SafeMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int c