继上次写完控制台扫雷之后,突发奇想,决定好好实现扫雷这个小游戏,于是花两天学了下QT,又花了两天写了一个QT版扫雷!
源代码和打包好的window程序地址:
https://github.com/ChenDongyu-S/mineSweeping
代码可能写的有点乱,见谅!但是尽量多的打了注释。
先放部分游戏截图
初始画面:
在开始里面有三个选项
选项是可以选择默认难度和自定义难度的,默认初级难度,点击应用更新到地图,不关闭选项窗口,点击确认,更新到地图,关闭选项窗口;
窗口设置成模态窗口
点击一个数时,如果这个数为0,那么他会向外遍历,将所有旁边的格子打开,并判断,如果也是0,则递归深入执行这个过程。
右键可以设置旗子和问号;实现三者之间来回切换。
值得一说的是,真实的雷表,我是用一张int型的二维数组描述的,雷标志位-1;数字标志位显示的数字0-8;
因为只能先插旗子,再打问号,所以:
插旗子时将他们的值增加100倍,0设置为99,打问号时将值除以10,0设置为9
这样我们就能通过值来查询他们的状态,如果被翻开则设置为-2;这样设置在判断旗子,雷,左键,右键,双击,按下,弹起的逻辑时很有帮助!
双击可以遍历周围数组,如果没有雷,没有问号,可以直接翻开,按下的时候会有动画效果,显示在扫雷!
如果双击时,周围有雷,并且旗子差错了位置,就会输游戏失败!
然后为了沉浸是的体验,游戏中间的表情会随着按键不停的切换
正常情况
表情被按下
鼠标点击雷区或双击排雷时
游戏失败时,哭哭
游戏成功时,亲亲
写代码的时候也有很多坑,很多细节,在这就不一一细说了。
主要就是游戏算法的实现,和一些Qt类库的使用。
在游戏算法的实现方面对于各种情况都要花心思去思考。
对于不会用的类库,就查Qt帮助文档和百度就好啦!
最后通过windeployqt 把qt打包成window下可以运行的程序,这样就算没有qt环境的电脑也是可以运行的