当前位置: 首页 > news >正文

用C语言做扫雷游戏(上)

在学完函数及多文件分装后,我们便可以用所学的知识在VS2026上写一个简单的9*9扫雷游戏,下面我将手把手教你完成这个较为复杂的C语言工程,Come on!(我的扫雷作品放在了git仓库:毛毛C语言/code_small project - Gitee.com,已开源,建议看一看,便于下面讲解。在(下)的最后也有代码展示!)

目录

一. 效果演示:

二. 整体思路

三. 代码准备工作

框架:

菜单:

game函数:

棋盘说明:

灵活化:


一. 效果演示:

二. 整体思路

1. 文件分装:text.c用于装游戏的整体框架;game.c用于装游戏相关的重要函数;game.h用于装 游戏相关的函数及变量的声明。

2. 游戏思路:搭建出整体框架——》打印菜单(menu())——》玩家选择是否进入——》用数组(mine和show)建立棋 盘并初始化(init_board())——》打印棋盘(print_board()) ——》部署地雷(put_mine())——》 排查地雷(pai_mine())并给予提示(find_mine())——》成功或死亡——》循环下一局。已标注出 相关函数及数组名。

三. 代码准备工作

框架:

因为玩家要先进入游戏菜单选择游玩后在进入循环,所以先用do_while循环语句搭建出整体框架:

int main() { int input = 0; do { menu(); scanf("%d", &input); switch (input) { case 1: { game(); break; } case 0: { printf("退出\n"); break; } default: { printf("输入错误\n"); break; } } } while (input); return 0; }

菜单:

注意:玩家输入1为开始,0为退出,其他数字为输入错误,需重新输入。所以input非零可作为循环标志。menu()作为菜单打印函数单独分装在main函数上面,printf函数的头文件在game.h中:

void menu() { printf("------------------------\n"); printf("------ 1-开始 ------\n"); printf("------ 0-退出 ------\n"); printf("------------------------\n"); printf("请选择:"); }

game函数:

game()作为游戏主体函数,在game()中还有其他分工明确的子函数,他们是按照游戏思路进行排序:

void game() { //引入棋盘数组 char mine[11][11] = { 0 }; char show[11][11] = { 0 }; //初始化 init_board(mine, 11, 11, '0'); init_board(show, 11, 11, '*'); //打印 print_board(show, 11, 11); //部署雷 put_mine(mine, 11, 11); //排雷 pai_mine(mine, show, 11, 11); }

这些子函数都是我们提前规划好各自作用的,要在game.c中实现(下一篇讲解)并在game.h(下面演示)中声明:

//初始化 void init_board(int arr[11][11], int r, int c, char in); //打印 void print_board(char arr[ROWS][COLS], int r, int c); //部雷 void put_mine(char mine[ROWS][COLS], int r, int c); //排雷 void pai_mine(mine, show, r, c);

棋盘说明:

在game中棋盘数组有两个:mine是内部部署地雷棋盘,用于判断玩家排雷状态;show是外部显示棋盘,用于打印在显示屏上给玩家判断。这时细心的同学就发现我们要做9*9扫雷游戏,但两个数组均为11*11的。是我写错了吗?当然不是,这是因为在9*9的数组中,当玩家排查地雷时,游戏需要判断周围8格地雷个数,当在边缘时,数组访问可能会越界,所以用11*11的数组更加方便判断,下面有配图:

灵活化:

这时为了让期盼类型更加灵活,可以将棋盘相关参数转变为变量,行:ROWS,列:COLS,效果如下:

void game() { //棋盘数组 char mine[ROWS][COLS] = { 0 }; char show[ROWS][COLS] = { 0 }; //初始化 init_board(mine, ROWS, COLS, '0'); init_board(show, ROWS, COLS, '*'); //打印 print_board(show, ROWS, COLS); //部署雷 put_mine(mine, ROWS, COLS); //排雷 pai_mine(mine, show, ROWS, COLS); }

这些相关变量在game.h中进行声名:

#define ROW 9//行 #define COL 9//列 #define ROWS ROW+2 #define COLS COL+2

ROW和COL分别表示游戏区域的行和列,ROWS和COLS表示整个棋盘行和列,因为后者要比前者大一圈,所以ROWS=ROW+2,COLS=COL+2。

好了,以上是准备工作,下一篇博客,我将对game函数中的子函数进行逐一讲解,敬请期待!

http://www.jsqmd.com/news/1319203/

相关文章:

  • 2026实力之选:苏州企业法律顾问服务品牌江苏平江律师事务所全维解析 - 品牌发掘
  • Word中MathType公式变形全解析:从根源到修复的完整指南
  • 【AI大模型】长文本提示:超长上下文的高效使用技巧
  • 初中数学解题系统构建:从几何辅助线到二次函数压轴题的思维框架
  • 终极指南:如何用NHSE快速编辑《动物森友会》游戏存档
  • 龙芯为何选择MIPS架构?从技术自主到生态构建的深度解析
  • 006、YOLOv12损失函数协同机制VFL+DFL+Bbox-Loss的权重设计:数学推导与调参实战
  • 驾照准驾车型全解析:从C1到A1,避免扣分罚款的驾驶权限指南
  • 信捷PLC与台达脉冲伺服接线调试实战指南
  • 鸿蒙物理 108 篇 第一百零四篇 非对称维度制衡律
  • 最新资讯/2026广州金价透明有保障 - 日常比对手册
  • 郑州装修性价比怎么选?5 家本地装企客观盘点干货 - 国麟测评
  • DI容器与导航系统:从注册到取用的完整链路
  • Qiankun微前端实战:从白屏到通信的完整避坑指南
  • Ubuntu 22.04部署OpenStack私有云实战指南
  • 2026 中牟装修公司综合实力排名,首选 TOP1 富豫装饰 - 滚动商讯
  • 5分钟学会智慧树自动刷课:终极Chrome插件安装与使用指南
  • 5分钟终极指南:如何在现代电脑上完美运行《塞尔达传说:时之笛》
  • 全息MIMO信道建模与Matlab仿真实践
  • three.js 编辑器的扩展点设计
  • 140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制
  • 5分钟永久保存你的QQ空间青春记忆:GetQzonehistory一键备份终极指南
  • LAV Filters:强力解码神器,让你的Windows媒体播放再无障碍 ✨
  • 山东优质抽沙船厂家推荐从设备选型到服务覆盖的全方位指南 - 栈上春秋
  • 每日极客日报 · 2026年08月03日
  • 东台藏匠心老店,轟車軒守护行车微光 - Ayu8888
  • cas:2055048-42-3 ,Dde Biotin-PEG4-Picolyl azide,DDE-生物素-四聚乙二醇-吡啶甲基叠氮,DDE-生物素-PEG4-吡啶甲基叠氮
  • 010、YOLOv12推理部署框架ONNX/TensorRT/NCNN适配指南:从PyTorch到移动端的完整流程
  • HTTPS加密原理与实战:从握手到安全优化
  • 教培系统Excel批量导入功能的设计方案与数据校验机制