怎么用C语言实现简单扫雷游戏
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"怎么用C语言实现简单扫雷游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.主函数
千家信息网最后更新 2026年11月04日怎么用C语言实现简单扫雷游戏
本篇内容介绍了"怎么用C语言实现简单扫雷游戏"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.主函数的构建
int main(){ int input = 0; do { menu(); printf("请选择是否开始游戏(1/0):>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default: printf("输入错误!请重新输入:"); break; } } while (input); return 0;}创建主函数和菜单,并对此进行游戏选择判断。
2.雷盘的设计
char mine[ROWS][COLS]; //扫雷数组char show[ROWS][COLS]; //展示数组InitMine(mine, ROWS, COLS,'0'); //初始化的雷盘InitShow(show, ROW, COL,'*'); //初始化展示的雷盘
这里我们创建两个二维数组,mine数组用来布置雷,show数组用来展示雷盘情况。
InitMine函数实现如下:
void InitMine(char mine[ROWS][COLS], int row, int col) // 初始化雷盘{ int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { mine[i][j] = '0'; } }}接下来我们需要展示雷盘,可我们不会把将布置雷的雷盘展示出去,这时我们用到了show函数来帮助我们实现这一需求。
InitShow函数实现如下:
void InitShow(char show[ROWS][COLS], int row, int col,char set) //初始化展示的雷盘{ int i = 0; int j = 0; for (i = 1; i <= row; i++) { for (j = 1; j <= col; j++) { show[i][j] = set; } }}这样我们就完成了第一步的设计。
3.布置雷
在完成雷盘之后,我们需要在我们的雷盘上布置雷,那这里我们引入了新的函数-SetMine,将雷布置在Mine数组中。
函数实现如下:
void SetMine(char mine[ROWS][COLS], int row, int col, int count) // 随机布雷{ while (count)//雷的个数 { int x = rand() % row + 1;//(1-9) int y = rand() % col + 1;//(1-9) mine[x][y] = '1'; count--; }}这里我们又又又遇见了rand函数,那我们则需要设置一个随机器-srand() ,别忘了它的头文件是
如图:
int main(){ int input = 0; do { menu(); srand((unsigned int)time(NULL)); //产生随机数 printf("请选择是否开始游戏(1/0):>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default: printf("输入错误!请重新输入:"); break; } } while (input); return 0;}4.打印雷盘
这里我们使用DisplayBoard函数来打印雷盘
函数实现如下:
void DisplayBoard(char arr[ROWS][COLS], int row, int col) // 打印展示雷盘{ int i = 0; int j = 0; printf(" "); for (i = 0; i <= row; i++)//打印列号 { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%2d", i);//打印行号 for (j = 1; j <= col; j++) { printf(" %c", arr[i][j]); } printf("\n"); }}5.开始排雷
这里我们创建PlayGame函数来进行我们一系列的操作
函数实现如下:
void PlayGame(char mine[ROWS][COLS], char show[ROWS][COLS]){ int x = 0; int y = 0; int win = 0;//统计排雷的个数 int count = 0;//统计周围雷的个数 while (win < ROW * COL - COUNT)//判断条件 { printf("请输入坐标:>"); scanf("%d %d", &x, &y); if (show[x][y] == count + '0'|| show[x][y] == ' ')//避免重复排雷 { printf("此处已经排过雷\n"); } if (x >= 1 && x <= ROW && y >= 1 && y <= COL)//输入坐标是否合法 { if (mine[x][y] == '1') { printf("很遗憾,你被炸死了\n"); DisplayBoard(mine, ROW, COL); break;//退出循环 } else { count = FindMineCount(mine, x, y); if (count == 0)//满足展开的条件 { show[x][y] = ' '; expand(mine, x, y, show, &win); } else { show[x][y] = count + '0'; } win++; DisplayBoard(show, ROW, COL); } } else { printf("输入坐标不合法\n"); } } if (win == ROW * COL - COUNT)//判断排雷结束 { printf("排雷成功\n"); DisplayBoard(mine, ROW, COL);//打印雷盘中雷的分布 }}这里我们引入了FindMineCount函数和expand函数。
FindMineCount:
static int FindMineCount(char mine[ROWS][COLS], int i, int j) //统计雷的个数{ return mine[i - 1][j] + mine[i - 1][j - 1] + mine[i][j - 1] + mine[i + 1][j - 1] + mine[i + 1][j] + mine[i + 1][j + 1] + mine[i][j + 1] + mine[i - 1][j + 1] - 8 * '0';}使用这个FindMineCount函数用来查找左边周围雷的个数。
expand函数:
void expand(char mine[ROWS][COLS], int x, int y, char show[ROWS][COLS], int* p)//展开函数{ int i,j; for (i = -1; i <=1; i++) { for (j = -1; j <=1; j++) { if (i != 0 || j != 0)//避免排到自己 { if (x + i >= 1 && x + i <= ROW && y + j >= 1 && y + j <= COL) //判断x y坐标是否合法 { if (show[x + i][y + j] == '*' && mine[x + i][y + j] != '1')//防止死递归 { int count = GetMineCount(mine, x + i, y + j); if (count != 0) { show[x + i][y + j] = count + '0'; (*p)++;//排雷数加一 } else { show[x + i][y + j] = ' '; (*p)++;//排雷数加一 expand(mine, x + i, y + j, show, p); } } } } } }}用此函数来判断是否符合条件进行展开。
对此所有步骤都已写完。
附上头文件、源文件。
game.h
#define _CRT_SECURE_NO_WARNINGS 1#include#include #define ROW 9 //雷盘操作范围#define COL 9#define ROWS ROW+2//雷盘实际大小#define COLS COL+2#define COUNT 10 //布置雷的个数//设置游戏菜单void menu(); //初始化雷盘void InitMine(char mine[ROWS][COLS], int row, int col); //初始化展示的雷盘void InitShow(char show[ROWS][COLS], int row, int col); // 随机布雷void SetMine(char mine[ROWS][COLS], int x, int y, int count); // 打印展示雷盘void DisplayBoard(char arr[ROWS][COLS], int row, int col); //玩游戏void PlayGame(char mine[ROWS][COLS], char show[ROWS][COLS]);
game.c
#include "game.h"void menu() //游戏菜单{ printf("****************************\n"); printf("**** 1.开始游戏 ****\n"); printf("**** 0.退出游戏 ****\n"); printf("****************************\n");}void InitMine(char mine[ROWS][COLS], int row, int col,char set) // 初始化雷盘{ int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { mine[i][j] = set; } }} void InitShow(char show[ROWS][COLS], int row, int col,char set) //初始化展示的雷盘{ int i = 0; int j = 0; for (i = 1; i <= row; i++) { for (j = 1; j <= col; j++) { show[i][j] = set; } }} void SetMine(char mine[ROWS][COLS], int row, int col, int count) // 随机布雷{ while (count)//雷的个数 { int x = rand() % row + 1;//(1-9) int y = rand() % col + 1;//(1-9) mine[x][y] = '1'; count--; }} void DisplayBoard(char arr[ROWS][COLS], int row, int col) // 打印展示雷盘{ int i = 0; int j = 0; printf(" "); for (i = 0; i <= row; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%2d", i); for (j = 1; j <= col; j++) { printf(" %c", arr[i][j]); } printf("\n"); }} static int GetMineCount(char mine[ROWS][COLS], int i, int j) //统计雷的个数{ return mine[i - 1][j] + mine[i - 1][j - 1] + mine[i][j - 1] + mine[i + 1][j - 1] + mine[i + 1][j] + mine[i + 1][j + 1] + mine[i][j + 1] + mine[i - 1][j + 1] - 8 * '0';} void expand(char mine[ROWS][COLS], int x, int y, char show[ROWS][COLS], int* p)//展开函数{ int i,j; for (i = -1; i <=1; i++) { for (j = -1; j <=1; j++) { if (i != 0 || j != 0)//避免排到自己 { if (x + i >= 1 && x + i <= ROW && y + j >= 1 && y + j <= COL) //判断x y坐标是否合法 { if (show[x + i][y + j] == '*' && mine[x + i][y + j] != '1')//防止死递归 { int count = GetMineCount(mine, x + i, y + j); if (count != 0) { show[x + i][y + j] = count + '0'; (*p)++;//排雷数加一 } else { show[x + i][y + j] = ' '; (*p)++;//排雷数加一 expand(mine, x + i, y + j, show, p); } } } } } }} // 主逻辑void PlayGame(char mine[ROWS][COLS], char show[ROWS][COLS]){ int x = 0; int y = 0; int win = 0;//统计排雷的个数 int count = 0;// 统计雷的个数 while (win < ROW * COL - COUNT)//判断条件 { printf("请输入坐标:>"); scanf("%d %d", &x, &y); if (show[x][y] == count + '0'|| show[x][y] == ' ')//避免重复排雷 { printf("已经排过雷\n"); } if (x >= 1 && x <= ROW && y >= 1 && y <= COL)//输入坐标是否合法 { if (mine[x][y] == '1') { printf("很遗憾,你被炸死了\n"); DisplayBoard(mine, ROW, COL); break; } else { count = GetMineCount(mine, x, y); if (count == 0) { show[x][y] = ' '; expand(mine, x, y, show, &win); } else { show[x][y] = count + '0'; } win++; DisplayBoard(show, ROW, COL); } } else { printf("输入坐标不合法\n"); } } if (win == ROW * COL - COUNT)//判断排雷结束 { printf("排雷成功\n"); DisplayBoard(mine, ROW, COL); }}text.c
#include "game.h"void game(){ char mine[ROWS][COLS]; //扫雷数组 char show[ROWS][COLS]; //展示数组 InitMine(mine, ROWS, COLS,'0'); //初始化的雷盘 InitShow(show, ROW, COL,'*'); //初始化展示的雷盘 SetMine(mine, ROW, COL, COUNT); //随机布雷 DisplayBoard(show, ROW, COL); //打印雷盘 PlayGame(mine, show); //玩游戏}int main(){ int input = 0; srand((unsigned int)time(NULL)); //产生随机数 do { menu(); printf("请选择是否开始游戏(1/0):>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default: printf("输入错误!请重新输入:"); break; } } while (input); return 0;}"怎么用C语言实现简单扫雷游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
函数
个数
输入
数组
坐标
j++
统计
扫雷
合法
布雷
加一
选择
菜单
错误
语言
成功
遗憾
接下来
内容
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网络科技
科技创新与互联网经济
厦门中拓互联网络科技有限公司
迪茉互联网科技
南京欣网互联网科技
西安互联网科技公司
互联网金融科技委员会
重庆科技学院互联网
字节跳动和互联网科技
中化能源互联网科技招聘
昭通互联网科技选哪家
智腾互联网科技有限公司
互联网与医疗科技
互联网科技大奖都有哪些公司
佛山市翊博互联网络科技有限公司
四川互联网展示科技馆设计
珠海东科互联网科技有限公司
云鲸互联网络科技有限公司
互联网的黑科技实验室
百单网互联网科技有限公司怎么样
盈实互联网科技
朗新科技与工业互联网
互联网科技博客
科技大学互联网专业好不好
卫星互联网科技股票
中国科技创新与世界互联网大会
如何创新互联网科技
东莞新华互联网科技学校
互联网硬科技公司