C++控制台:教你如何快速做出扫雷(附代码) |
您所在的位置:网站首页 › 扫雷游戏自己制作 › C++控制台:教你如何快速做出扫雷(附代码) |
之前我做了一期视频是关于用C++制作扫雷的,我答应要做一期教程。 所以就有了你现在看到的这篇专栏(●'◡'●) 代码其实还挺简单的,可以说是我目前做过的最简单的一个游戏,只用了两天就做完了。 在讲解之前,先声明一下: 我把代码用图片的方式穿插在专栏里,不是因为我不想让大家复制,而是因为B站根本不支持放代码( ´・ω・` )(在这里墙裂要求B站加入Markdown!!!) 可以复制的代码我放在这个腾讯文档里了:https://docs.qq.com/doc/DTVRidFVnSnBmSXBK 现在,有朋友(无中生友)就要问了: 你讲了这么多,那C++到底怎么做扫雷呢? 别急,让我先放一个最终效果的传送门(其实就是想捞一捞视频): 实在不想看视频的可以看一下这个看完这个视频,我们可以整理出扫雷程序需要实现的主要功能: 选择难度或自定义 移动光标 打开格子 标记格子 快速打开格子(组合键根据周围已标记格子打开其他格子) 胜负判定 结束后处理(结束程序、再来一局或回到主界面【1】) 把它们按函数分类: 主函数选择难度或自定义难度 开始游戏【游戏进行函数】 根据【游戏进行函数】的返回值进行结束后处理(结束程序、再来一局或调用【主函数】并结束此函数) 游戏进行函数打印界面 检测按键 移动光标 检测按键 标记格子 检测按键 打开格子 检测按键 快速打开格子 胜利判定,决定程序是否结束,如结束则确定结束后处理并返回(失败判定会放在以上各部分中) (接下来会有大量代码,在这之前最好先了解一下我定义的数组和变量) 数组、变量说明:全局变量【int】chang y轴长度 【int】kuan x轴长度 【int】lei 地雷总个数 【int】space 保证第一步不踩雷还是保证第一步周围没有雷(其实可以用bool) 【int】flaged 被标记的格数 全局数组【int】flag[][] 储存每个格子的标记状态、打开状态(0为未打开且未标记;1为未打开且标记;-1为已打开) 【int】boom[][] 储存每个格子周围雷的个数(0-9为周围雷数;-1表示此格为雷) 后面会定义的、在游戏进行函数(gaming()函数)中的主要变量【unsigned long long】t 储存第一次打开格子时time(0)(ctime库中的函数)返回的时间,用于计算用时 【bool】pspac 储存上次按键按下是否为空格(即原版扫雷左键),用于判断连续按下空格 【int】key 储存getch()(按键检测函数)返回值,用于判断按下的按键 【int】p 已打开的格子数量,用于判断胜负 【int】nx 光标x轴坐标 【int】ny 光标y轴坐标 (对不起,我取变量名太随意了,主要是因为懒) (接上文) 当然,除了这些主要函数我们还需要其他函数。由于这些函数都比较简单,我就直接放代码啦(详细讲解看注释): 弹开周围无雷的方格 函数 (BFS) 检测是否出界 函数 (其实不写也可以,但写了会使判断更更简洁、清晰)以及: 设定文本颜色 函数光标定位函数打印格子 函数接下来是游戏中最重要的部分: 游戏进行函数 首先是变量和数组的初始赋值与初始界面的打印: 【打印界面】功能循环检测按键: 【按键检测】功能如果检测到的是方向键: 【移动光标】功能如果是标记键: 【标记格子】功能如果是打开键: 【打开格子】功能如果是组合键(指Z+X,双击空格键已经在前面判断过了): 【快速打开格子】功能最后是胜利判定: 胜利判定game()完成! 编写主函数: main()完整代码可以到我前面放的那个网址看(https://docs.qq.com/doc/DTVRidFVnSnBmSXBK ),图片太大B站专栏放不下(〃´-ω・) 最终效果(其实我把它放到这里主要是为了做封面)…… 这篇专栏就要结束了, 想到即将与你分别, 我的眼眶不争气地在泪水中打起了转, 不舍之情如同便秘似的喷涌而出, 这时我却醒悟, 你不过是一名过路的陌生人而已。 那、那就再让我说一句话吧, 就一句话, 一句话就足够了: 记得三连。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |