发布时间:2023-11-27 15:55:33 浏览量:119次
本文作者使用 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
热门资讯
探讨游戏引擎的文章,介绍了10款游戏引擎及其代表作品,涵盖了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戏设计领域和数字艺术教育的重要性,欢迎点击咨询报名。
游戏中玩家将面临武侠人生的挣扎抉择,战或降?杀或放?每个抉定都将触发更多爱恨纠葛的精彩奇遇。《天命奇御》具有多线剧情多结局,不限主线发展,高自由...
3. B站视频剪辑软件「必剪」:免费、炫酷特效,小白必备工具
B站视频剪辑软件「必剪」,完全免费、一键制作炫酷特效,适合新手小白。快来试试!
4. 手机游戏如何开发(如何制作传奇手游,都需要准备些什么?)
如何制作传奇手游,都需要准备些什么?提到传奇手游相信大家都不陌生,他是许多80、90后的回忆;从起初的端游到现在的手游,说明时代在进步游戏在更新,更趋于方便化移动化。而如果我们想要制作一款传奇手游的
5. 3D动画软件你知道几个?3ds Max、Blender、Maya、Houdini大比拼
当提到3D动画软件或动画工具时,指的是数字内容创建工具。它是用于造型、建模以及绘制3D美术动画的软件程序。但是,在3D动画软件中还包含了其他类型的...
三昧动漫对于著名ARPG游戏《巫师》系列,最近CD Projekt 的高层回应并不会推出《巫师4》。因为《巫师》系列在策划的时候一直定位在“三部曲”的故事框架,所以在游戏的出品上不可能出现《巫师4》
众所周知,虚幻引擎5(下面简称UE5)特别占用存储空间,仅一个版本安装好的文件就有60G,这还不包括我们在使用时保存的工程文件和随之产生的缓存文件。而...
一、声音优化在绝地求生游戏中能够提前听到脚步声往往能提前取得战机,主要有两种方法:1、利用SoundLock软件,软件的功能主要是限制最大音量。百度搜索...
UI设计师、动画设计师、特效设计师每一个职位的功能和负责的方面都不同。所以,3D美术这方面需要大量的人才。但是要成为一个3D游戏建模师,也不是那么...
想让你的3D打印模型更坚固?不妨尝试一下Cura参数设置和设计技巧,让你轻松掌握!
最新文章