编辑代码

#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_MINE 80

//游戏菜单
void menu();

//游戏主程序
void game();

//初始化棋盘
void InitBoard(char board[ROWS][COLS],int rows,int cols,char ret);

//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);

//布置雷
void SetMine(char mine[ROW][COL], int row, int col);

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

int GetMineCount(char mine[ROW][COL], int x, int y);
#define  _CRT_SECURE_NO_WARNINGS 1
#include "minesweeper.h"

//游戏菜单
void menu()
{
	printf("**********************\n");
	printf("******* 1.paly *******\n");
	printf("******* 2.exit *******\n");
	printf("**********************\n");
}

//游戏主程序
void game()
{
	//mine数组用存放雷的信息
	char mine[ROWS][COLS] = { 0 };
	//show数组用于存放排雷的信息
	char show[ROWS][COLS] = { 0 };
	//初始化棋盘
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');

	//埋雷
	SetMine(mine, ROW, COL);
	//打印棋盘
	PrintBoard(show, ROW, COL);
	/*PrintBoard(mine, ROW, COL);*/
	//排查雷
	FindMine(mine, show, ROW, COL);

}

//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char ret)
{
	for (int i = 0; i < rows;i++)
	{
		for (int j = 0; j < cols; j++)
		{
			board[i][j] = ret;
		}
	}
}

//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col)
{
	//打印游戏的列标
	for (int i = 0; i <= 9; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		//打印游戏的行标
		printf("%d ", i);
		for (int j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
}

//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = EASY_MINE;
	while (count)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		//字符‘1’用来表示雷
		if (mine[x][y] != '1')
		{
			mine[x][y] = '1';
			count--; //布置一个雷
		}
	}
}

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int win = 0;
	int x = 0;
	int y = 0;
	while(win<row*col-EASY_MINE)
	{
		printf("请输入要排查的坐标:\n(格式为x,y)(1<=x<=%d,1<=y<=%d)\n", row, col);
		scanf("%d,%d", &x, &y);
		if ((x >= 1 && x <= row) && (y >= 1 && y <= col))
		{
			if (mine[x][y] == '1')
			{
				printf("踩雷了,游戏结束\n雷的位置为:\n");
				PrintBoard(mine, ROW, COL);
				break;
			}
			else 
			{
				int count = GetMineCount(mine,x, y);
				show[x][y] = count+'0';
				PrintBoard(show, row, col);
				win++;
			}
		}
		else
			printf("该坐标输入错误,请重新输入!\n");
	}
	if (win == row * col - EASY_MINE)
	{
		printf("恭喜你,游戏通关!\n");
		PrintBoard(mine, ROW, COL);
	}
}

//该非雷周围雷的个数
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	int count = 0;
	for (int i = -1; i <= 1; i++)
	{
		for (int j = -1; j <= 1; j++)
		{
			count += (mine[x + i][y + j] - '0');
		}
	}
	return count;
}
#define  _CRT_SECURE_NO_WARNINGS 1
#include "minesweeper.h"


int main()
{
	srand((unsigned int) time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入游戏选项:\n");
		scanf("%d", &input);
		if (input == 1)
		{
			printf("游戏开始:\n");
			game();
		}
		else if (input == 2)
		{
			printf("退出游戏!\n");
			break;
		}
		else
		{
			printf("输入选项不存在,请重新选择!\n");
		}
	}
	while (1);
	return 0;
}