此项目为南京大学 2023 级《高级程序设计》课程大作业 目前此项目已经完成,源码已上传
- 完成了评分细则中的所有要求(详述见下方)
- 实现传送带丝滑拖曳,玩家可以从任何传送带,使用鼠标拖曳的方式,对传送带进行连接。传送带支持正向和反向拖曳(即对已经放下的传送带,可以向前(与传送方向相反的方向)续连,也可以向后续连)。
- 实现切割器、堆叠器、旋转器三个加工设备,根据朝向,可进行横向或竖向切割、任意类型堆叠(只要对应位置上没有冲突,即可进行堆叠)
- 实现无尽模式,玩家可以在正常游玩通关后,进入无尽模式,此时任务会随机生成,更加具有挑战性。当然,所有的任务都确保能用已有的工具通过合理组合完成。
- 拥有丰富的背景音乐和图像。一共有 5 首背景音乐和 5 幅背景图片。音乐和图片会随着关卡改变而切换。
- 实现高效存档,程序运行的内存占用非常低,并可通过文件选择器选择并读取存档。为了提高存储和解析效率,地图部分的存档采用二进制压缩编码(类似指令集),编码方式如下(此注释来自
global.h):
/* 矿物最低位为 0,设备最低位为 1,编号均从 1 开始
* 矿物 0b(是否可以切分)(4方格块的编号)0
* 圆形编号:1 0001 0001 0001 0001 0
* 方形编号:1 0010 0010 0010 0010 0
* 圆片编号:0 0000 0000 0000 0011 0
* 三角指向:0 0000 0000 0000 0100 0
* 设备 0b(编号)(2位方向)1
* 占位编号 0001 00 1
* 传送带编号 00 0010 00 1(2位开始方向,自身编号,2位结束方向)
* 采矿机编号 1 0000 0000 0000 0000 0 0011 00 1(矿物编号,自身编号)
* 分割器编号 0100 00 1(自身编号)
* 垃圾桶编号 0101 00 1(自身编号,方向固定)
* 中心编号 0110 00 1(自身编号,方向固定)
* 合成器编号 0111 00 1(自身编号)
* 橡皮擦编号 1000 00 1(自身编号)
* 右旋器编号 1001 00 1(自身编号)
*/如需修改存档,需要修改对应的二进制编码。请参考本路径下的 对照表.xlsx,可以通过修改上面的表,对地图进行修改,然后复制下面的表格,对存档地图进行覆写(请注意,只能复写存档地图部分,地图部分与其他部分中间是以一个空行隔开的,地图的大小需保证与当前地图等级对应(即原来有多大,覆写后就得多大),否则会导致存档校验不通过的情况)
为方便测试,在游戏目录中,预存了几个存档,可以通过选择存档提前体验不同阶段。
读取的存档可以任选,但最终的进度会写入 data.txt 之中
- 实现可视化地图,初始具有
$12\times20$ 的大小,后期可在商店扩展地图至$20\times 32$ 的大小。并实现交付中心。 - 实现三种开采物,其中圆形矿和方形矿可以被切割机切割,圆片矿不行,开采物所在地块均有对应图标,可以将采矿机放置在开采物上。
- 实现开采器、传送带、切割机、垃圾桶、堆叠器五种设备,除垃圾桶无需更改朝向外,其余设备均可通过键盘 WDSA 键改变朝向,鼠标左击放置,鼠标右击可以删除任意设备,会检测当前位置是否可放置设备,不行则会通过改变设备背景颜色提示。传送带可以通过拖曳续连(包括已经放置在地图上的传送带),前后均可,连线丝滑。
- 放置一定量设备后工厂运转正常,交付中心可实时显示当前交付目标和已交付数量。
- 拥有三个大关卡和无尽模式。玩家每完成一个小目标(如果未切换大关卡),可在弹出的界面中对传送带速度、开采器速度、切割机&堆叠器速度三选一进行升级,该升级为局部强化,仅对本大关卡有效。(演示中三个大关卡的小目标数分别为 2,1,1)
- 玩家可通过商店对地图大小、交付中心大小、交付价格进行全局永久升级。地图扩大后,新的地图上会出现更多可开采的矿产。玩家可以通过鼠标拖曳,拖动地图进行查看。
- 游戏可正常存档,每次进入时,玩家可通过选择“开始游戏”和“新游戏”来决定是否使用存档。玩家可自由选择存档,被选择的存档会校验合法性,然后才会读取。无尽模式也会进行存档,下次游戏仍然可从上一次结束的地方继续游戏。默认存档位于游戏
.exe程序同目录的data.txt中。
- 开采物品会随传送带进行传输,可以流程地平移、转弯。
- 开采物品由于设备停止工作或前方无传送带,会正常停滞在传送带上。
- 开采物品经过切割器或堆叠器(若可切割),都会发生相应的变化。
- 设备朝向可见,贴图上有方向指引。
- 添加堆叠器,使玩家可以组合更多的形状,丰富游戏可玩性。
- 开始界面、通关界面(进入无尽模式)、游戏界面均有进行设计,结合 Star Rail 的游戏元素。
- 初始三个大关和无尽模式对应不同的音乐和壁纸,玩家可以在游玩过程中欣赏音乐和壁纸。壁纸会随着地图的扩展而完整展现,当地图扩展到最大时,会显示出完整的壁纸。每次切换大关时,背景音乐也会随之切换。
- 加入**“无尽模式”**,游戏的目标随机生成,由两种可切割矿和一种不可切割矿理论最多可以有
$3^{4}+1=82$ 种不同的组合,均可通过合理使用游戏中已有设备来实现。每完成一个任务,都可以选择进行局部强化,且局部强化不再会消失。无尽模式也会保留存档,玩家永远可以从上一次结束的地方继续进行游戏。 - 其他功能:右上角有暂停按键、游戏说明和教程两个按键。
- 所有设备继承基类
Device,通过全局维护的Device和Item列表完成设备和矿物的渲染和更新。对象之间的调用进行了合理封装。各种设备的功能主要通过动态绑定Device中的虚函数进行实现。 - 符合 Qt 编程习惯,将各种设备、工具栏、商店等对象拆分成单独的文件,在
.h中书写定义,在.cpp中进行实现。 - 重要函数、宏等均有详细注释,变量名符合 Qt 常见命名方式,简洁明了。