# 扫雷游戏（C语言）

## 四、游戏实现

#include<stdio.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define mine_count 10
void Initboard(char board[ROWS][COLS], int rows,int cols,char set);
void Printboard(char board[ROWS][COLS], int row, int col);
void Setmine(char board[ROWS][COLS],int row,int col);
void Finemine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

game.h文件中放入头文件，并定义全文所需的宏变量，这样方便改动，比如本篇讲述的是9*9网格的，你只需将定义的9改成其他数据，就可以得到一个10*10或其他的网格

#include"game.h"
void game()
{
char mine[ROWS][COLS];
char show[ROWS][COLS];
//第一步，初始化棋盘
Initboard(mine, ROWS, COLS,'0');
Initboard(show, ROWS, COLS,'*');
//第二步，打印棋盘
Printboard(show, ROW, COL);
//第三步，布置雷
Setmine(mine, ROW, COL);
//Printboard(mine, ROW, COL);
//第四步，排雷
Finemine(mine, show, ROW, COL);
}
{
printf("****************\n");
printf("**** 1 play ****\n");
printf("**** 0 exit ****\n");
printf("****************\n");
}
int main()
{
int count = 0;
srand((unsigned int)time(NULL));
do
{
printf("请输入你的选择：");
scanf("%d", &count);
switch (count)
{
case 1:
game();
break;
case 0:
printf("你已选择退出游戏\n");
break;
default:
printf("这是一个不规范的选择，请重新选择\n");
break;
}
} while (count);
return 0;
}

1、打印菜单

2、初始化棋盘

3、随机布置十颗雷

5、打印棋盘

4、排雷

### 1、打印菜单

void menu()
{
printf("****************\n");
printf("**** 1 play ****\n");
printf("**** 0 exit ****\n");
printf("****************\n");
}

### 2、初始化棋盘

char mine[ROWS][COLS];
char show[ROWS][COLS];
//第一步，初始化棋盘
Initboard(mine, ROWS, COLS,'0');
Initboard(show, ROWS, COLS,'*');

void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}

### 3、打印棋盘

//第二步，打印棋盘
Printboard(show, ROW, COL);

void Printboard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i <=row; i++)
printf("%d ", i);
printf("\n");
for (i = 1; i <= col; i++)
{
printf("%d ", i);
for (j = 1; j <= row; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}

### 4、布置雷

//第三步，布置雷
Setmine(mine, ROW, COL);
//Printboard(mine, ROW, COL);//这步可以用来检测雷是否布置成功，如果怕出错可以用上

void Setmine(char board[ROWS][COLS], int row, int show)
{
int num = mine_count;
while (num)
{
int i = rand() % 9 + 1;
int j = rand() % 9 + 1;
if (board[i][j] == '0')
{
board[i][j] = '1';
num--;
}
}
}

### 5、排雷

int lei_count(char mine[ROWS][COLS], int a, int b)
{
int count = mine[a - 1][b - 1] + mine[a - 1][b] + mine[a - 1][b + 1] + mine[a][b - 1] + mine[a][b + 1]
+ mine[a + 1][b - 1] + mine[a + 1][b] + mine[a + 1][b + 1] - 8 * '0';
return count;
}
void Finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int a, b;
int wulei = row * col - mine_count;
while (wulei)
{
printf("请输入你要检查的坐标：");
scanf("%d %d", &a, &b);
if (a > 0 && a <= row && b > 0 && b <= col)
{
if (mine[a][b] == '1')
{
printf("抱歉，这是雷，你被炸死了\n");
break;
}
else
{
//既然不是雷，那就统计雷的数量
int count = lei_count(mine, a, b);
show[a][b] = count + '0';
Printboard(show, ROW, COL);
wulei--;
}
}
else
printf("此坐标不存在，请重新输入\n");
}
}

## 五、完整代码

game.h

#include<stdio.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define mine_count 10
void Initboard(char board[ROWS][COLS], int rows,int cols,char set);
void Printboard(char board[ROWS][COLS], int row, int col);
void Setmine(char board[ROWS][COLS],int row,int col);
void Finemine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

test.c

#include"game.h"
void game()
{
char mine[ROWS][COLS];
char show[ROWS][COLS];
//第一步，初始化棋盘
Initboard(mine, ROWS, COLS,'0');
Initboard(show, ROWS, COLS,'*');
//第二步，打印棋盘
Printboard(show, ROW, COL);
//第三步，布置雷
Setmine(mine, ROW, COL);
//Printboard(mine, ROW, COL);
//第四步，排雷
Finemine(mine, show, ROW, COL);
}
{
printf("****************\n");
printf("**** 1 play ****\n");
printf("**** 0 exit ****\n");
printf("****************\n");
}
int main()
{
int count = 0;
srand((unsigned int)time(NULL));
do
{
printf("请输入你的选择：");
scanf("%d", &count);
switch (count)
{
case 1:
game();
break;
case 0:
printf("你已选择退出游戏\n");
break;
default:
printf("这是一个不规范的选择，请重新选择\n");
break;
}
} while (count);
return 0;
}

game.c

#include"game.h"
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
void Printboard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i <=row; i++)
printf("%d ", i);
printf("\n");
for (i = 1; i <= col; i++)
{
printf("%d ", i);
for (j = 1; j <= row; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void Setmine(char board[ROWS][COLS], int row, int show)
{
int num = mine_count;
while (num)
{
int i = rand() % 9 + 1;
int j = rand() % 9 + 1;
if (board[i][j] == '0')
{
board[i][j] = '1';
num--;
}
}
}
int lei_count(char mine[ROWS][COLS], int a, int b)
{
int count = mine[a - 1][b - 1] + mine[a - 1][b] + mine[a - 1][b + 1] + mine[a][b - 1] + mine[a][b + 1]
+ mine[a + 1][b - 1] + mine[a + 1][b] + mine[a + 1][b + 1] - 8 * '0';
return count;
}
void Finemine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int a, b;
int wulei = row * col - mine_count;
while (wulei)
{
printf("请输入你要检查的坐标：");
scanf("%d %d", &a, &b);
if (a > 0 && a <= row && b > 0 && b <= col)
{
if (mine[a][b] == '1')
{
printf("抱歉，这是雷，你被炸死了\n");
break;
}
else
{
//既然不是雷，那就统计雷的数量
int count = lei_count(mine, a, b);
show[a][b] = count + '0';
Printboard(show, ROW, COL);
wulei--;
}
}
else
printf("此坐标不存在，请重新输入\n");
}
}

|
8天前
|

C语言实战 | Flappy Bird游戏
【7月更文挑战第4天】Flappy Bird是由越南开发者制作的简单却极具挑战性的游戏，玩家需控制小鸟穿越水管障碍。游戏涉及角色初始化、显示和更新。小鸟和水管结构体存储数据，使用变量和数组。初始化小鸟和水管，显示背景、小鸟和水管，更新小鸟位置及碰撞检测。代码示例展示了小鸟和水管的状态管理，当小鸟与管道碰撞或触地时，游戏结束。游戏的成功在于其独特的虐心体验。
20 0
|
6天前
|

【C语言】扫雷小游戏（递归展开版）
C语言实现扫雷小游戏
20 3
|
2天前
|

C语言实战 | “贪吃蛇”游戏
【7月更文挑战第5天】在C语言实战中，本文档介绍了如何构建一个简单的“贪吃蛇”游戏。游戏的核心是控制蛇移动并增长，当吃掉食物时，蛇的身体变长。数据结构使用固定大小的数组表示蛇的位置，变量存储食物位置和蛇的长度。初始化后，利用非阻塞式getKey()函数实现WASD键盘控制蛇的运动方向。虽然蛇的边界检测和吃食物后的增长尚未详细说明，但提到了这些问题作为练习留给读者解决，并预告将在后续章节讨论模块化编程以简化复杂代码。
10 0
|
10天前
|

C语言实战 | 使用链表完成“贪吃蛇”游戏
【7月更文挑战第1天】整体思维，即系统思维，强调以整体视角理解事物。在编程中，结构体体现这种思想，将相关变量打包处理。示例展示了如何用链表而非数组实现“贪吃蛇”游戏，链表提供了更灵活的动态数据管理。一系列代码图片详细描绘了链表结构体在游戏中的应用，包括节点定义、移动、碰撞检测等，凸显了使用链表的优势和代码的清晰组织。
17 0
|
14天前
|

C语言实战 | “贪吃蛇”游戏重构

21 0
|
16天前
|
C语言
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏？
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏？
8 1
|
16天前
|
C语言
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏？
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏？
9 1
|
17天前
|

22 1
|
14天前
|
C语言
C语言实现猜数字游戏：代码详解与函数解析
C语言实现猜数字游戏：代码详解与函数解析
12 0
|
14天前
|

C语言实战 | “俄罗斯方块”游戏重构

12 0