qq塔防(qq塔防游戏有哪些)
时间:2022-04-03 23:07:39
小编:电子芯吧客
阅读:
本文作者使用 QT 框架写了一个塔防游戏程序,该程序中实现了购买炮塔、炮塔升级、怪物按照设定路径移动、炮塔自动寻找范围内目标、朝目标怪物发射炮弹、爆炸效果、怪物走到家时我方生命值减少、方便添加关卡等功能。
运行效果:
这张截图中间的炮塔比较大,这是该炮塔多次升级后的结果。
炮塔升级后图片不会改变,但该炮塔的大小、位置、炮弹大小、攻击所产生的爆炸效果的大小、攻击力、攻击范围都会发生改变。
遗憾点
尽管我已经尽力地标准化这个程序了,但还是因为我对程序后面的步骤的认知不正确,以及由于各种各样的原因,还是遗留下来了很多的遗憾。
在写这个 demo 的后期,我意识到写这个程序已经花费了太长的时间,而且当时我被这个程序折磨的很是难受,为了节省时间尽快完工,在代码上我没有按照最标准的情况来写,且游戏内容也被我简化了许多。
使用 QT 框架写程序,一般好像都是使用各种控件堆起来,然后监听这些控件的信号。但我在程序中却使用了非常原始的办法,即判断鼠标的点击区域,这是因为我发现在connect函数里面,不论是将控件创建在栈区还是堆区都没有用(或许有解决办法,但我不会,从网上也没有找到)。这也就是说没有办法实现最基本的点击一个按钮创建其他按钮的功能,所以我还是用了最原始,也可能是最不标准的搞笑办法实现的相关功能。
方案选择
从 QT 的使用的来看,我可能只是一个十足的新手,但就程序而言,逻辑应该还是差不多的。
如果想要在代码中添加一个关卡,且使用预设的产生怪物方案的话,大概只需要在 mainwindow.cpp 中添加三十五行代码即可,这些代码的用途主要是用于监听进入关卡的按钮、设定怪物的初始位置和路径点、调用预设的产生怪物方案函数和添加新的地图数组。
其实这个添加关卡的方案是我当时想出来的三种方案中最次的一种,这种添加关卡的方案需要直接修改游戏界面类,也就是程序的主要代码,这应该是非常不好的。
而另外两种我设想的方案,读取文件中的内容构建关卡和将关卡相关代码写在开始界面的构造函数中。
第一种方案其实是最好的,但因为涉及到各种各样的文件操作,包括需要精确地移动文件指针、精确地读取到每个字符、字符串和数字之间的转化等,学习这些非常麻烦。并且当时我已经将获取关卡信息的方式设为了读取各个对象、数组的信息的方式,全部修改也非常麻烦,所以放弃。
后来,我想通过将关卡所需要的数据全部写在开始界面类构造函数的方式实现创建关卡,这种方式最起码可以将主程序和关卡信息分离,且原理很简单,就是向主游戏界面对象中传递几个参数即可。但这个时候,我遇到了一个非常致命的问题,这个问题是,在向connect传递lambda表达式做参数时,表达式内部始终没有办法使用函数外部的一个用于传递怪物路径信息的三级指针,而且还是编译失败,并且在我看来,程序中是不存在语法错误的。这个问题导致我花掉了整整一下午的时间都没有找到解决方案,遂放弃。
因为程序比较复杂,所以我为了完成这个程序大概花费了八天的时间之久。这让我认识到,在写复杂程序之时,基础非常重要。
编程步骤
1、编译环境:
Windows Qt 5.9.0 Qt Creator 4.3.0
2、思路:
将二维数组中防御塔空位的坐标保存到动态数组中,遍历这个数组并判断点击区域实现点击防御塔空位,其他的点击也类似。
怪物是根据一个路径点数组中的数据移动的,这个数组需要给出所有怪物的拐点,怪物一直向第一个路径点处移动。这里其实也可以写成像防御塔位置那样自动获取路径点的,这样的话就只需要人为设定怪物遇到交叉路口时的移动方向就好了,但是因为在我想到这个主意时已经写好这一部分了,所以也就懒得改了。
防御塔寻找目标怪物的规则:从后往前找范围内的怪物,如果目标怪物被删除或走出范围了,则重新找到范围内最后一个怪物,否则一直瞄准目标怪物。
该程序中防御塔发射子弹的位置始终处于防御塔的正中心,不会随防御塔的旋转而改变,只是子弹的运动方向会始终跟随目标怪物。另外,因为我不想写了,没有在程序中添加子弹图片的旋转,一律使用的正方形图片作为子弹图片。这两点也是该程序不足的地方。
展示程序的主要代码由于代码行数太多,展示不了,可以私信发给大家~
更多干货内容只需要你关注电子芯吧客微信公众号
版权声明:本文为CSDN博主「白家名」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_46239972/article/details/106073498
本文标签:
-
火影忍者疾风传究极觉醒2(火影忍者疾风传究极觉醒2存档)文/石若萧3月,没有多少质量过硬的影片上映,再加上多地受到疫情影响关闭了影院,全国大盘连续数日都只徘徊在千余万的规模,这点收入摊到每家影院,恐怕连水电房租都难以缴纳。这时候时间:2022-04-22
-
火影忍者疾风传国语(火影忍者疾风传国语版全集国语版在线观看)火影忍者疾风传已经完结,没有追番都小伙伴难道不追了吗?接下来为大家盘点一下火影忍者必看的战斗画面有哪些。1.卡卡西VS桃地再不斩这是火影忍者中的第一次真正的战斗,向我们充时间:2022-04-22
-
火影忍者羁绊密码(火影忍者羁绊密码6.95)随着火影忍者手游二测的开启,全新的羁绊系统终于解开了神秘面纱,我们都知道“羁绊”一次是火影忍者中的意义,所以羁绊系统也是游戏内十分重要的系统之一,羁绊系统可以增加玩家的时间:2022-04-22
-
火影忍者羁绊60六道仙人箴言(火影忍者羁绊6.9仙人真谛)秋名山上行人稀,头昏眼花血糖低。身娇体弱易推倒,带带我吧老司机。第一个:水门在九尾袭击木叶时,水门算好了面具男将来会祸害忍界,于是将一半的九尾之力封印在鸣人体内,还留下了时间:2022-04-22
-
火影忍者羁绊571(火影忍者羁绊571隐藏密码)2021.11.02 农历 九月二十八 辛丑年 【牛年】 戊戌月 甲寅日 周二 第44周希腊概况希腊Ελληνική Δημοκρατία希腊共和国(希腊语:Ελληνική Δημοκ时间:2022-04-22
- 类型:聊天交友
- 语言:简中
- 大小: 104.78MB
- 版本: 8.5.5
- 星级:
热门阅读
- 暗黑3魔盒(暗黑3魔盒使用攻略)
阅读:3578
- dnf五一(dnf五一套2022)
阅读:2266
- 艾尔登法环摩恩城支线攻略 老头环摩恩城主女儿支线任务
阅读:2219
- 微博不小心点了催更怎么取消(视频催更怎么关)
阅读:1931
- 斗罗大陆小舞篇破解版(斗罗大陆小舞篇破解版安卓)
阅读:1647