Skip to content

byml-c/ShapeZ-StarRail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ShapeZ-Star Rail

231880291 陈柏均

此项目为南京大学 2023 级《高级程序设计》课程大作业 目前此项目已经完成,源码已上传

技术亮点

  1. 完成了评分细则中的所有要求(详述见下方)
  2. 实现传送带丝滑拖曳,玩家可以从任何传送带,使用鼠标拖曳的方式,对传送带进行连接。传送带支持正向和反向拖曳(即对已经放下的传送带,可以向前(与传送方向相反的方向)续连,也可以向后续连)。
  3. 实现切割器、堆叠器、旋转器三个加工设备,根据朝向,可进行横向或竖向切割、任意类型堆叠(只要对应位置上没有冲突,即可进行堆叠)
  4. 实现无尽模式,玩家可以在正常游玩通关后,进入无尽模式,此时任务会随机生成,更加具有挑战性。当然,所有的任务都确保能用已有的工具通过合理组合完成。
  5. 拥有丰富的背景音乐和图像。一共有 5 首背景音乐和 5 幅背景图片。音乐和图片会随着关卡改变而切换。
  6. 实现高效存档,程序运行的内存占用非常低,并可通过文件选择器选择并读取存档。为了提高存储和解析效率,地图部分的存档采用二进制压缩编码(类似指令集),编码方式如下(此注释来自 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 之中

阶段一(35/35)

  1. 实现可视化地图,初始具有 $12\times20$ 的大小,后期可在商店扩展地图至 $20\times 32$ 的大小。并实现交付中心。
  2. 实现三种开采物,其中圆形矿和方形矿可以被切割机切割,圆片矿不行,开采物所在地块均有对应图标,可以将采矿机放置在开采物上。
  3. 实现开采器、传送带、切割机、垃圾桶、堆叠器五种设备,除垃圾桶无需更改朝向外,其余设备均可通过键盘 WDSA 键改变朝向,鼠标左击放置,鼠标右击可以删除任意设备,会检测当前位置是否可放置设备,不行则会通过改变设备背景颜色提示。传送带可以通过拖曳续连(包括已经放置在地图上的传送带),前后均可,连线丝滑
  4. 放置一定量设备后工厂运转正常,交付中心可实时显示当前交付目标和已交付数量。

阶段二(27/27)

  1. 拥有三个大关卡和无尽模式。玩家每完成一个小目标(如果未切换大关卡),可在弹出的界面中对传送带速度、开采器速度、切割机&堆叠器速度三选一进行升级,该升级为局部强化,仅对本大关卡有效。(演示中三个大关卡的小目标数分别为 2,1,1)
  2. 玩家可通过商店对地图大小、交付中心大小、交付价格进行全局永久升级。地图扩大后,新的地图上会出现更多可开采的矿产。玩家可以通过鼠标拖曳,拖动地图进行查看。
  3. 游戏可正常存档,每次进入时,玩家可通过选择“开始游戏”和“新游戏”来决定是否使用存档。玩家可自由选择存档,被选择的存档会校验合法性,然后才会读取。无尽模式也会进行存档,下次游戏仍然可从上一次结束的地方继续游戏。默认存档位于游戏 .exe 程序同目录的 data.txt 中。

阶段三(8/8)

  1. 开采物品会随传送带进行传输,可以流程地平移、转弯。
  2. 开采物品由于设备停止工作或前方无传送带,会正常停滞在传送带上。
  3. 开采物品经过切割器或堆叠器(若可切割),都会发生相应的变化。
  4. 设备朝向可见,贴图上有方向指引。

阶段四拓展(20/20)

  1. 添加堆叠器,使玩家可以组合更多的形状,丰富游戏可玩性。
  2. 开始界面、通关界面(进入无尽模式)、游戏界面均有进行设计,结合 Star Rail 的游戏元素。
  3. 初始三个大关和无尽模式对应不同的音乐和壁纸,玩家可以在游玩过程中欣赏音乐和壁纸。壁纸会随着地图的扩展而完整展现,当地图扩展到最大时,会显示出完整的壁纸。每次切换大关时,背景音乐也会随之切换。
  4. 加入**“无尽模式”**,游戏的目标随机生成,由两种可切割矿和一种不可切割矿理论最多可以有 $3^{4}+1=82$ 种不同的组合,均可通过合理使用游戏中已有设备来实现。每完成一个任务,都可以选择进行局部强化,且局部强化不再会消失。无尽模式也会保留存档,玩家永远可以从上一次结束的地方继续进行游戏。
  5. 其他功能:右上角有暂停按键、游戏说明和教程两个按键。

代码风格(10/10)

  1. 所有设备继承基类 Device,通过全局维护的 DeviceItem 列表完成设备和矿物的渲染和更新。对象之间的调用进行了合理封装。各种设备的功能主要通过动态绑定 Device 中的虚函数进行实现。
  2. 符合 Qt 编程习惯,将各种设备、工具栏、商店等对象拆分成单独的文件,在 .h 中书写定义,在 .cpp 中进行实现。
  3. 重要函数、宏等均有详细注释,变量名符合 Qt 常见命名方式,简洁明了。

About

南京大学高级程序设计大作业

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors