1.建立相关文件
首先建立相关头文件和源文件,如下图:
2.相关文件下的代码(代码内附带注释)
🔥 utili.h:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
🔥 Game.h:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include "utili.h"
#define Row 11
#define Col 11
#define row Row-2
#define col Col-2
#define Level 20
void startMine();
void initBoard(char board[Row][Col], char set);
void Print(char board[Row][Col], int rows, int cols);
void setMine(char board[Row][Col]);
void FindMine(char show[Row][Col], char mine[Row][Col], int rows);
🔥 Game.cpp:
#define _CRT_SECURE_NO_WARNINGS 1
#include "Game.h"
//定义雷阵和显示矩阵
char Mine[Row][Col];
char show[Row][Col];
//初始化
void initBoard(char board[Row][Col], char set) {
for (int i = 0;i < Row;++i) {
for (int j = 0;j < Col;++j) {
board[i][j] = set;//设置为你输入的set符号
}
}
}
//打印
void Print(char board[Row][Col], int rows, int cols) {
//打印出0~rows 方便玩家输入坐标
for (int i = 0;i <= rows;++i) {
printf("%d ", i);
}
printf("\n");
for (int i = 1;i <= rows;++i) {
printf("%d ", i);
for (int j = 1;j <= cols;++j) {
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("\n");
}
//埋雷
void setMine(char mine[Row][Col]) {
int count = Level;
srand(time(0));
//随机设置Level个雷,Level的数量可以根据个人喜好更改
while (count)
{
int x = rand() % row + 1; //1 ~ ROW
int y = rand() % col + 1; //1 ~ COL
if (x > 0 && x <= row && y > 0 && y <= col && mine[x][y] == '0')
{
mine[x][y] = '1';
count--;
}
}
}
//雷的数量
int mineNum(char mine[Row][Col], int x,int y) {
//统计雷的数量
return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1]
+ mine[x][y - 1] + mine[x][y] + mine[x][y + 1]
+ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]
- 9 * '0';
}
//扫雷开始
void FindMine(char show[Row][Col], char mine[Row][Col], int rows,int cols) {
int win = 0;
int x, y;
//胜利条件是win=rows*cols-Level
while (win < rows * cols - Level) {
printf("请输入你要排雷的位置:");
scanf("%d %d", &x, &y);
//判断位置合法性
if (x<0 || x>rows || y<0 || y>cols) {
printf("你输入的位置非法,请重新输入!\n");
}
//判断是否触雷
else if (mine[x][y] == '1') {
printf("很遗憾,你被雷炸死了!\n");
Print(mine, row, col);
break;
}
//位置合法且未触雷则进行此操作
else {
int count = mineNum(mine, x, y);
show[x][y] = (char)('0' + count);
win++;
//刷新 使输入更形象
system("cls");
Print(show, row, col);
}
}
if (win >= rows * cols - Level) {
printf("恭喜你!扫雷成功!!!\n");
}
}
//开始扫雷游戏
void startMine() {
//初始化两个矩阵
initBoard(show, '*');
initBoard(Mine, '0');
//打印
Print(show, row, col);
//埋雷
setMine(Mine);
//扫雷
FindMine(show, Mine, row, col);
}
🔥 Mine.cpp:
#define _CRT_SECURE_NO_WARNINGS 1
#include "Game.h"
int main() {
int select = 1;
while (select) {
printf("******************************\n");
printf("* 简 易 扫 雷 游 戏 *\n");
printf("******************************\n");
printf("* [1]开始游戏 *\n");
printf("* [0]退出 *\n");
printf("******************************\n");
printf("请输入你的选择(1/0):");
scanf("%d", &select);
if (select == 0) {
break;
}
else if (select != 1) {
printf("你输入的数不合法,请重新输入!\n");
}
else {
startMine();
}
}
return 0;
}