直接上传代码
这是一个“game.h”头文件
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<time.h>
#define ROW 9
#define COL 9
#define COUNT 10
#define ROWS 11
#define COLS 11
void InitBoard(char Board[ROWS][COLS], int row, int col, char c);
void DisplayBoard(char Board[ROWS][COLS]);
void SetMine(char Board[ROWS][COLS]);
int Sweep(char ShowBoard[ROWS][COLS], char MineBoard[ROWS][COLS]);
#endif //__GAME_H__
这是游戏实现的函数
#include"game.h"
void InitBoard(char Board[ROWS][COLS], int row, int col, char c)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
Board[i][j] = c;
}
}
}//初始化棋盘
void DisplayBoard(char Board[ROWS][COLS])
{
int i = 0;
int j = 0;
printf(" ");
for (j = 1; j < COLS - 1; j++)
{
printf("%d ", j);
}
printf("\n");
for (j = 1; j < COLS - 1; j++)
{
printf("--");
}
printf("-\n");
for (i = 1; i < ROWS - 1; i++)
{
printf("%d|", i);
for (j = 1; j < COLS - 1; j++)
{
printf("%c ", Board[i][j]);
}
printf("\n");
}
}//打印棋盘
void SetMine(char Board[ROWS][COLS])
{
int count = COUNT;
int x = 0;
int y = 0;
while (count)
{
x = rand() % ROW + 1;
y = rand() % COL + 1;
if (Board[x][y] == '0')
{
Board[x][y] = '1';
count--;
}
}
}//布雷
static int GetMine(char MineBoard[ROWS][COLS], int x, int y)
{
int count = 0;
count = MineBoard[x-1][y] + MineBoard[x-1][y-1] + MineBoard[x][y-1] + MineBoard[x+1][y-1] + MineBoard[x+1][y] + MineBoard[x+1][y+1] + \
MineBoard[x][y+1] + MineBoard[x-1][y+1] - 8 * '0';
return count;
}//返回周围累的个数
static void play(char MineBoard[ROWS][COLS], char ShowBoard[ROWS][COLS], int x, int y)
{
int ret = 0;
ret = GetMine(MineBoard, x, y);
if (ret == 0)
{
ShowBoard[x][y] = ' ';
if ((x - 1 > 0) && (y - 1 > 0) && (ShowBoard[x - 1][y - 1] == '*'))
{
play(MineBoard, ShowBoard, x - 1, y - 1);
}
if ((x - 1 > 0) && (y > 0) && (ShowBoard[x - 1][y] == '*'))
{
play(MineBoard, ShowBoard, x - 1, y);
}
if ((x - 1 > 0) && (y + 1> 0) && (ShowBoard[x - 1][y + 1] == '*'))
{
play(MineBoard, ShowBoard, x - 1, y + 1);
}
if ((x > 0) && (y + 1> 0) && (ShowBoard[x][y + 1] == '*'))
{
play(MineBoard, ShowBoard, x, y + 1);
}
if ((x + 1 > 0) && (y + 1 > 0) && (ShowBoard[x + 1][y + 1] == '*'))
{
play(MineBoard, ShowBoard, x + 1, y + 1);
}
if ((x + 1 > 0) && (y > 0) && (ShowBoard[x + 1][y] == '*'))
{
play(MineBoard, ShowBoard, x + 1, y);
}
if ((x + 1 > 0) && (y - 1 > 0) && (ShowBoard[x + 1][y - 1] == '*'))
{
play(MineBoard, ShowBoard, x + 1, y - 1);
}
if ((x > 0) && (y - 1 > 0) && (ShowBoard[x][y - 1] == '*'))
{
play(MineBoard, ShowBoard, x, y - 1);
}
}
else
ShowBoard[x][y] = ret + '0';
}//递归展开无雷区域
int Sweep(char ShowBoard[ROWS][COLS], char MineBoard[ROWS][COLS])
{
int count = 0;
int x = 0;
int y = 0;
int ret = 0;
printf("请输入坐标>:");
while (1)
{
scanf("%d%d", &x, &y);
if (x <= 0 || x > ROW || y <= 0 || y > COL)
{
printf("输入错误,请重新输入>:");
}
else
{
break;
}
}
if (MineBoard[x][y] == '1')
{
int count = 1;
while (count)
{
int m = rand() % ROW + 1;
int n = rand() % COL + 1;
if (MineBoard[m][n] == '0')
{
char str = MineBoard[x][y];
MineBoard[x][y] = MineBoard[m][n];
MineBoard[m][n] = str;
play(MineBoard, ShowBoard, x, y);
/*ret = GetMine(MineBoard, x, y);
ShowBoard[x][y] = ret + '0';*/
DisplayBoard(ShowBoard);
count--;
}
}
}
else
{
play(MineBoard, ShowBoard, x, y);
/*ret = GetMine(MineBoard, x, y);
ShowBoard[x][y] = ret + '0';*/
DisplayBoard(ShowBoard);
}
while (count != (ROW)*(COL)-COUNT-1)
{
printf("请输入坐标>:");
while (1)
{
scanf("%d%d", &x, &y);
if (x <= 0 || x > ROW||y <= 0 || y > COL)
{
printf("输入错误,请重新输入>:");
}
else
{
break;
}
}
if (MineBoard[x][y] == '1')
{
return 1;
}
else
{
play(MineBoard, ShowBoard, x, y);
/*int ret = GetMine(MineBoard, x, y);
ShowBoard[x][y] = ret + '0';*/
DisplayBoard(ShowBoard);
count++;
}
}
return 0;
}//返回1,即被炸死。 返回0,继续游戏
以下为主函数
#include"game.h"
void meun()
{
printf("******************************************\n");
printf("*************** 1.play *****************\n");
printf("*************** 0.exit *****************\n");
printf("******************************************\n");
}
void game()
{
char ShowBoard[ROWS][COLS] = { 0 };
char MineBoard[ROWS][COLS] = { 0 };
int num = 0;
InitBoard(ShowBoard, ROWS, COLS, '*');
InitBoard(MineBoard, ROWS, COLS, '0');
SetMine(MineBoard);
DisplayBoard(ShowBoard);
num = Sweep(ShowBoard, MineBoard);
if (num == 1)
{
printf("GAME OVER\n");
DisplayBoard(MineBoard);
}
else
{
printf("恭喜你胜利了\n");
DisplayBoard(MineBoard);
}
}
void test()
{
int input = 0;
do {
meun();
srand((unsigned int)time(NULL));
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入:>\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
这就是实现游戏的全部代码。若有不足之处请见谅,欢迎批评指正。