新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言实现简易扫雷游戏

发布时间:2026/10/2 12:01:14来源:尧图网络
C语言实现简易扫雷游戏
前言扫雷是经典的小游戏非常适合用来练习C语言二维数组、循环、函数封装的知识点。本篇使用的两个二维数组的思路1. mine数组雷盘存放地雷信息‘1’代表地雷‘0’代表无雷给程序内部看玩家不可见。2. show数组展示盘给玩家看默认全部都是’ * ’排查后显示周围地雷数量。整体设计思路1. 头文件game.h宏定义函数声明2. 游戏实现game.c各个功能函数棋盘初始化 InitBoard打印棋盘 DisplayBoard随机布雷 SetMine统计坐标周围地雷数 GetMineCount玩家排雷逻辑 FindMine菜单 menu游戏入口 game3. 主文件test.c程序入口循环菜单启动游戏完整代码game.h#pragma once #include stdio.h #include stdlib.h #include time.h #define EASY_COUNT 10//地雷数量 #define ROW 9 #define COL 9 #define ROWS ROW2 #define COLS COL2 //初始化棋盘 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 board[ROWS][COLS], int r, int c); //玩家排雷逻辑 void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c);game.c#define _CRT_SECURE_NO_WARNINGS #include game.h void menu() { printf( 扫雷 \n); printf(--------------------\n); printf(-----1.开始游戏-----\n); printf(-----0.退出游戏-----\n); printf(--------------------\n); } void game() { char mine[ROWS][COLS]; char show[ROWS][COLS]; InitBoard(mine, ROWS, COLS,0);//定义雷盘 InitBoard(show, ROWS, COLS, *);//定义棋盘 SetMine(mine, ROW, COL);//布雷 DisplayBoard(show, ROW, COL);//打印棋盘 //DisplayBoard(mine, 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; }test.c#define _CRT_SECURE_NO_WARNINGS #include game.h void InitBoard(char board[ROWS][COLS], int r, int c, char set) { int i 0; int j 0; for (i 0; i r; i) { for (j 0; j c; j) { board[i][j] set; } } } void DisplayBoard(char board[ROWS][COLS], int r, int c) { system(cls); int i 0; int j 0; for (j 0; j c; j) { printf(%d , j); } printf(\n); for (i 1; i r; i) { printf(%d , i); for (j 1; j c; j) { printf(%c , board[i][j]); } printf(\n); } printf(\n); } void SetMine(char board[ROWS][COLS], int r, int c) { int count EASY_COUNT; while (count) { int x rand() % r 1; int y rand() % c 1; if (board[x][y] 0) { board[x][y] 1; count--; } } } int GetMineCount(char mine[ROWS][COLS], int x, int y) { return mine[x - 1][y - 1] mine[x - 1][y] mine[x - 1][y 1] mine[x][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) { printf(例如5 2\n); 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 10 y 1 y 10) { if (show[x][y] ! *) { printf(已排查过此位置请输入其他坐标\n); } else { if (mine[x][y] 1) { system(cls); DisplayBoard(mine, ROW, COL); printf(雷被引爆游戏失败\n); break; } else { int count GetMineCount(mine, x, y); show[x][y] count 0; DisplayBoard(show, ROW, COL); win; } } } else { printf(请输入正确的坐标\n); } } if (win r * c - EASY_COUNT) { system(cls); DisplayBoard(mine, ROW, COL); printf(已排出全部雷游戏胜利\n); } }代码核心知识点讲解1. 为什么数组要ROW2如果直接用9*9数组当排查边界格子比如第一行、最后一列统计周围8格的时候数组下标会越界。外围多一圈不会放雷计算周围雷数时就不用额外写大量边界判断简化代码。2. 两个棋盘的作用mine后台雷盘记录地雷位置玩家正常看不到。show前端展示盘玩家看到的界面默认全部‘ * ‘点开后显示数字。3. GetMineCount计算雷数原理把周围8个格子的字符加起来减去8*’0‘利用ASCII码差值把字符数转换成真实数字。4. 胜利与失败判定失败输入坐标对应的mine[x][y] 1踩到地雷。胜利点开的空白格子数量win 总格子数-地雷数量。运行演示1. 运行程序选择1进入游戏2. 输入坐标例如5 2排查对应位置3. 踩雷直接游戏结束点开所有非雷格子获得胜利小结这个扫雷项目非常适合C语言入门练手综合考察二维数组、函数封装、循环分支、随机数、ASCII码转换。把数据和显示分离两个棋盘的思想也是后面写小游戏很常用的思路。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RapidAISkill 发布后,Cursor 里怎么用 SKILL.md 跑通 Agent Skill 2026/10/2 12:43:23

RapidAISkill 发布后,Cursor 里怎么用 SKILL.md 跑通 Agent Skill

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
写工程管理毕业论文,AI 工具到底怎么挑?一篇装配式成本控制论文的实战选型分享 [特殊字符]️ 2026/10/2 12:43:23

写工程管理毕业论文,AI 工具到底怎么挑?一篇装配式成本控制论文的实战选型分享 [特殊字符]️

先交代一下背景:我是工程管理专业的(培养路径是管理学 → 管理科学与工程类 → 工程管理),这个专业最"分裂"的地方在于——我们既要懂施工技术、看得懂图纸和进度计划,又要会算账、做成本分析、搞管理建模。…

阅读更多 →
信锐设备等保测评核查命令与整改要点梳理 2026/10/2 12:43:17

信锐设备等保测评核查命令与整改要点梳理

做了几年等保测评,最常被网络管理员追着问的一句话就是:“你这套测评到底要在设备上敲哪些命令?”华为、H3C的命令资料网上随手一搜就有一堆,但换成信锐的无线控制器和安视交换机,不管是测评同行还是运维人员&#xff…

阅读更多 →
钉钉群消息自动转发怎么搞? 2026/10/2 12:42:52

钉钉群消息自动转发怎么搞?

做企业运营的朋友,经常碰到这种需求:一个钉钉群里的消息,自动同步到另外一个群里。比如项目群消息同步到通知群、跨部门信息传递、运营群消息汇总——这种活儿纯靠手动复制粘贴实在太累,自己跑一遍就懂了。今天就把这事一次讲透。…

阅读更多 →
网址导航系统源码评测:个性 UI 与轻量化架构实战 2026/10/2 12:42:52

网址导航系统源码评测:个性 UI 与轻量化架构实战

在接手一个全新的 Web 项目时,开发者往往面临两难选择:是选用功能庞大但臃肿的商业框架,还是寻找轻量灵活却可能文档缺失的开源源码?很多时候,我们需要的不是一个“大而全”的解决方案,而是一个能够快速上手…

阅读更多 →
玄铁语言与 Python/Go/Rust 对比:中文关键字、静态类型与自举定位 2026/10/2 12:42:51

玄铁语言与 Python/Go/Rust 对比:中文关键字、静态类型与自举定位

对比定位 本文把玄铁(XuanTie-Lang)与三门主流语言(Python、Go、Rust)按关键维度对比,供选型与学习参考。玄铁是 2026 年公开的新语言(当前版本 v1.0-rc.2),中文关键字、编译到原生…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉