扫雷小项目实战
一.项目目标
1.实现扫雷的基本操作,设置雷,排除雷;
2.第一次如果触雷,不被炸死;
3.坐标周围没有雷时,将其区域进行展开。
二.设计思路
1.有一个扫雷的初始菜单界面,供玩家选择开始游戏和退出游戏的选项。
2.有一个扫雷的区域,并且在其中设置初始值,根据所设计的雷区的数目和可玩性来随机的设置雷的位置。
3.在向用户展示的界面需要明白实际数组和向用户所展示的数组之间的相互关系。
4.在第一次具有免死金牌的情况下,如果第一次真的踩到雷了,需要将雷挪动一下,免死金牌作废。
5.如果踩到雷了,直接被炸死。
6.身为资深高手的玩家,一次都没有踩到雷,确实需要恭喜一下这位玩家成功避开所有可爱的小雷雷。
三.大致流程
四.程序文件
该程序分为三个文件:
1.game.h:包含头文件的引用、函数的声明以及行列的宏定义;
2.game.c:包含了各个函数的功能实现;
3.MineSweeping.c:main()对各个功能的调用,实现扫雷这个小项目
五.代码
1.game.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __GAME_H__
#define __GAME_H__
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE_NUM 10
#include<stdlib.h>
#include <stdio.h>
#include<time.h>
//初始化棋盘
void InitBoard(char board[][ROWS],int row,int col,char set);
//打印棋盘
void Show(char board[][ROWS],int row,int col);
//设置雷
void SetMine(char board[][ROWS],int row,int col);
//扫雷
void FindMine(char mine[][ROWS],char mineInfo[][ROWS],int row,int col);
//扩展棋盘
void extend_board(char mine[][COLS], char mineInfo[][COLS], int x, int y);
//未扫的雷区个数
int Count(char mineInfo[ROW][COL], int row, int col);
#endif
2.game.c
(1)引用game.h头文件,定义免死金牌一枚。
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
static int flag = 1;
(2)初始化所传过来的数组,棋盘数组置为‘*’,雷盘数组置为‘0’。
void InitBoard(char board[][ROWS], int row, int col, char set)
{
int i = 0; int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = set;
}
}
}
(3)输出所传入的棋盘数组或者雷盘数组,注意:输出的时候下标应该为1~9开始。
void Show(char board[][ROWS], int row, int col)
{
int i = 0;
int j = 0;
printf("_______________________________\n")