话不多说直接上代码
main.c
#include"MineClearance.h"
int main()
{
int a = 0;
char board[rows][cols] = { NULL };
char showboard[rows][cols] = { NULL };
srand((unsigned int)time(NULL));
do
{
Menu();
printf("请输入数字开始游戏=》");
scanf("%d", &a);
switch (a)
{
case 1:
Game(board,showboard);
break;
case 2:
printf("游戏退出\n");
break;
default:
printf("输入有误,请重新输入");
break;
}
} while (0);
return 0;
}
MineClearance.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define rows 11
#define cols 11
void Menu();
void Print_(int rrr);
void Game(char board[rows][cols], char showboard[rows][cols]);
void PrintBoard(char board[rows][cols]);
void PutMine(char board[rows][cols]);
void MineRoundAdd(char board[rows][cols]);
void mineroundadd(char* mine);
int FindMine(char board[rows][cols], char showboard[rows][cols]);
MineClearance.c
#include"MineClearance.h"
void Menu()
{
printf("-------------------\n");
printf("--- 1.Play Game ---\n");
printf("--- 2.Exit --------\n");
printf("-------------------\n");
}
void Print_(int rrr)
{
int a = 0;
for (a = 0; a <= rrr+1; a++)
{
if (a == 0)
{
printf("|");
}
else
{
printf("---|");
}
}
}
void PrintBoard(char board[rows][cols])
{
int i = 0;
for (i=-1;i<rows-2;i++)
{
Print_(rows-2);
printf("\n");
int j = 0;
for (j=-1;j<cols-2;j++)
{
if (j == -1 && i != -1)
{
printf("| %d ", i + 1);
}
if (i == -1)
{
printf("| %d ",j+1);
}
if (i!=(-1)&&j!=(-1))
{
if (board[i+1][j+1]==NULL)
{
printf("| - ");
}
else
{
printf("| %c ", board[i+1][j+1]);
}
}
}
printf("|\n");
}
Print_(rows-2);
printf("\n");
}
void ShowBoard(char board[rows][cols])
{
int i = 0;
for (i = -1; i < rows - 2; i++)
{
Print_(rows - 2);
printf("\n");
int j = 0;
for (j = -1; j < cols - 2; j++)
{
if (j == -1 && i != -1)
{
printf("| %d ", i + 1);
}
if (i == -1)
{
printf("| %d ", j + 1);
}
if (i != (-1) && j != (-1))
{
if (board[i + 1][j + 1] == NULL)
{
printf("| - ");
}
else
{
printf("| %c ", board[i + 1][j + 1]);
}
}
}
printf("|\n");
}
Print_(rows - 2);
printf("\n");
}
void PutMine(char board[rows][cols])
{
int count = 0;
for (count = 0; count < 10; count++)
{
int row = (rand() % 9) + 1;
int col = (rand() % 9) + 1;
if (board[row][col]!='*')
{
board[row][col] = '*';
}
}
}
void MineRoundAdd(char board[rows][cols])
{
int i = 0;
for (i=0;i<rows;i++)
{
int j = 0;
for (j=0;j<cols;j++)
{
if (board[i][j]=='*')
{
mineroundadd(&board[i][j]);
}
}
}
}
void mineroundadd(char* mine)
{
if (*(mine-1)==NULL)
{
*(mine - 1) = 48;
}
if (*(mine + 1) == NULL)
{
*(mine + 1) = 48;
}
if (*((mine - rows) - 1) == NULL)
{
*((mine - rows) - 1) = 48;
}
if (*(mine - rows) == NULL)
{
*(mine - rows) = 48;
}
if (*((mine - rows) + 1) == NULL)
{
*((mine - rows) + 1) = 48;
}
if (*((mine + rows) - 1) == NULL)
{
*((mine + rows) - 1) = 48;
}
if (*(mine + rows) == NULL)
{
*(mine + rows) = 48;
}
if (*((mine + rows) + 1) == NULL)
{
*((mine + rows) + 1) = 48;
}
if (*(mine - 1) != 42)
{
*(mine - 1) += 1;
}
if (*(mine + 1) != 42)
{
*(mine + 1) += 1;
}
if (*((mine - rows) - 1) != 42)
{
*((mine - rows) - 1) += 1;
}
if (*(mine - rows) != 42)
{
*(mine - rows) += 1;
}
if (*((mine - rows) + 1) != 42)
{
*((mine - rows) + 1) += 1;
}
if (*((mine + rows) - 1) != 42)
{
*((mine + rows) - 1) += 1;
}
if (*(mine + rows) != 42)
{
*(mine + rows) += 1;
}
if (*((mine + rows) + 1) != 42)
{
*((mine + rows) + 1) += 1;
}
}
int FindMine(char board[rows][cols], char showboard[rows][cols])
{
int PlayerRow = 0;
int PlayerCol = 0;
printf("输入坐标,进行排雷 =》");
scanf("%d %d", &PlayerRow, &PlayerCol);
if (board[PlayerRow][PlayerCol]=='*')
{
printf("踩雷咯,Game Over\n");
PrintBoard(board);
return 0;
}
else
{
if (board[PlayerRow][PlayerCol]==NULL)
{
showboard[PlayerRow][PlayerCol] = 32;
}
else
{
showboard[PlayerRow][PlayerCol] = board[PlayerRow][PlayerCol];
}
return 1;
}
}
void Game(char board[rows][cols],char showboard[rows][cols])
{
printf("游戏开始\n");
PutMine(board);
MineRoundAdd(board);
PrintBoard(showboard);
while (FindMine(board, showboard))
{
ShowBoard(showboard);
}
}