C++控制台:教你如何快速做出扫雷(附代码)

您所在的位置:网站首页 扫雷游戏自己制作 C++控制台:教你如何快速做出扫雷(附代码)

C++控制台:教你如何快速做出扫雷(附代码)

2024-07-09 09:35| 来源: 网络整理| 查看: 265

之前我做了一期视频是关于用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