1.分析和设计
1.1 扫雷游戏基本功能
通过控制台实现扫雷游戏,游戏可以通过菜单实现游戏的开始和退出。
扫雷游戏的棋盘默认为9x9的大小,共有10个雷,通过输入坐标排查雷,若坐标非雷,显示坐标周围一圈雷的个数,否则游戏结束,将所有非雷的坐标排查出来,则排雷成功,游戏结束。
1.2 分析和设计
1.创建11x11的数组存储棋盘信息
棋盘大小为9x9,因为排查时访问周围一圈的信息,为了方便,不妨设置11x11的数组,仅显示9x9
的棋盘。
2.创建两个棋盘,使棋盘的符号易于改变,且不易混淆
棋盘一:显示给玩家的棋盘。棋盘由符号‘*’组成,并在棋盘的上方和左方打印0~9的数字,方便玩家确定坐标。
棋盘二:显示给电脑的棋盘。棋盘由符号‘1’和‘0’组成,0表示非雷,1表示雷。电脑根据玩家输入的坐标,访问棋盘二的信息,并给出相应的信息。
3.利用random函数设置雷
4.实现电脑排查雷
2.代码实现
为使代码简洁明了,将函数的声明,函数的实现和游戏的测试分别在三个文件中实现:
game.h:函数的声明;game.c:函数的实现;test.c:游戏的测试,同时game.c和test.c文件引用game.h文件,避免重复。
2.1 game.h
在game.h中写入要实现的函数声明:
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY 10
//初始化棋盘
void setboard(char mine[ROWS][COLS], int row, int col, char c);
//设置雷
void setmine(char show[ROWS][COLS], int row, int col,int d);
//显示棋盘
void Reveal(char show[ROWS][COLS], int row, int col);
//数坐标一圈的雷的个数
int Countmine(char mine[ROWS][COLS], int x, int y);
//接受玩家输入的坐标,进行反馈
void Play(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col,int d);
2.2 game.c
game.c中实现函数功能:
初始化棋盘setboard:
接受4个参数,第一个参数作为要初始化的棋盘,第二、三个用rows和cols限制棋盘大小,第四个参数表示坐标处初始的符号
设置雷setmine:
使用random和srand函数设置随机的雷的坐标,并加入if确保雷的个数
显示棋盘Reveal:
游玩play:接收玩家输入的坐标,并利用数雷函数给予反馈
数雷countmine:根据玩家输入的坐标,确定其周围一圈的雷的个数
总的game.c文件:
2.3 test.c
test.c文件: