扫雷游戏的代码实现
game.h部分
#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_COUNT 10
void InitBoard(char board[ROWS][COLS], int r, int c, char set);
void DisplayBoard(char board[ROWS][COLS] ,int r,int c);
void SetMine(char mine[ROWS][COLS],int r,int c );
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c);
game.c部分
#include"game.h"
void InitBoard(char board[ROWS][COLS], int r, int c,char set)
{int i = 0;for (i = 0;i < r;i++){int j = 0;for (j = 0;j < c;j++) {board[i][j] = set;}}
}
void DisplayBoard(char board[ROWS][COLS], int r, int c)
{int i = 0;printf("- - - - - -扫雷- - - - - -\n");for (i = 0;i <= c;i++){printf("%d ", i);}printf("\n");for (i = 1;i <= r;i++){int j = 0;printf("%d ", i);for (j = 1;j <= r;j++){printf("%c ", board[i][j]);}printf("\n");}
}
void SetMine(char mine[ROWS][COLS], int r, int c)
{int count = EASY_COUNT;while (count){int x = rand() % r + 1;int y = rand() % c + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}
static int GetMineCount(char mine[ROWS][COLS],int x,int y)
{
return mine[x][y + 1] + mine[x + 1][y + 1] + mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)
{int x = 0;int y = 0;int win = 0;while (win<r*c-EASY_COUNT) {printf("请输入要排查的坐标:");scanf("%d %d", &x, &y);if (x >= 1 && x <= r && y >= 1 && y <= c){if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, r, c);break;}else{if (show[x][y] =='*'){int c = GetMineCount(mine, x, y);show[x][y] = c + '0';DisplayBoard(show, ROW, COL);win++;}else{printf("该坐标已经被排查过,请重新输入坐标\n");}}}else{printf("输入的坐标非法,请重新输入\n");}}if (win == r * c - EASY_COUNT){printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}
}
test.c部分
#include"game.h"void menu()
{printf("*********************************\n");printf("************ 1.play **********\n");printf("************ 0.exit **********\n");printf("*********************************\n");
}
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };InitBoard(mine,ROWS,COLS,'0');InitBoard(show, ROWS, COLS,'*');SetMine(mine, ROW, COL);DisplayBoard(show, ROW, COL);FindMine(mine,show,ROW,COL);}
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}