大作业
Sa1i3ri/ShapezCliGame: 南京大学计算机科学与技术系,2023高级程序设计大作业 (github.com)
南京大学计算机科学与技术系的大二上高级程序设计的大作业,因为我是跨选,所以不愿意继续在这门课上花费时间,理论上可以继续使用Qt库以达到GUI界面,达到更好的效果。也是处于相同的原因,我在完成基本要求后就收手了,不愿意继续打磨和拓展,我在这门跨选课上花费的时间已经够多了。
三个界面
本游戏主要分为三个界面:1. 主界面,2. 商店界面,3. 游戏界面。
1. 主界面
主界面主要由MainInterface支持。
在游戏开始前,可以自行选择开始新游戏(Press t),存档(Press b),读取(Press r),进入商店(Press s),进入游戏(Press 1 2 3),退出游戏(Press 0)
如果开始新游戏(Press t),则会调用Level类和Map类的初始化进程。
如果存档(Press b),则会自动记录下当前Level 1、Level2、Level3的关卡进度,场景布置,获取的金钱,在Store内购买的全局强化,在每一Level中的局部强化,写入于save文件夹下的file.csv。
如果读取(Press r),则会读取save文件夹下的file.csv,将其数据写入本次游戏中,以供继续游玩。
如果进入商店(Press s),则会进入商店界面。
2. 商店界面
Press 1 来增大交付中心面积(半径)
Press 2 来增加A型矿物的额外大小
Press 3 来增加B型矿物的额外大小
Press 4 来扩大地图面积(H、W,即长、宽)
Press 5 来增加A型矿物的价值
Press 6 来增加B型矿物的价值
不论进行了何种升级,都会重置所有Level。
3. 游戏界面
- 红色#:可切割的A型矿物
- 蓝色#:不可切割的B型矿物
- 绿色箭头:传送带
- 黄色箭头:开采器
- 紫色箭头:切割器
- 白色*:垃圾桶
- 白色@:交付中心
- 靛蓝(indigo)色:光标,wasd移动光标
ui下面:
三个任务:
切割器、传送带、切割器的速度
金钱
交付的A型矿物、B型矿物,切割后的A型矿物的数量
Press 1 选择传送带、Press 2 选择开采器、Press 3 选择切割器、Press 4 选择垃圾桶、Press 5 选择空光标。按下空格键在光标处放置。
Press p 让全局运动一个时间单位
Press r 让光标选择到的物品旋转一个方向
类的设计、关系
主要分为四类:
其中,所有Equipment和所有Mineral都继承于Object
NullObject表示没有物品
1. Interface
主要管理三个界面
- MainInterface:负责展示主界面
- Level和Map:各有一个board的双重vector,模拟游戏界面的地图。每一个Level内含一个Map作成员变量。Level的board存储每个Level的初始化情况,且记录的是Object的类型。Map的board存储具体Object*指针。Level也会负责从Level的board转换到Map的board。Map是最主要的类,负责所有Object的相互运作、局部任务、光标等。
- Store:负责展示Store界面和全局变量的增强。
2. Equipment
Equipment是抽象类,剩下的都是它的子类。注意每一个继承Equipment的类都会内置一个Mineral成员变量。
Extractor:开采器
TransmissionBelt:传送带
Cutter:切割器
RubbishBin:垃圾桶
Centre:交付中心
3. Mineral
4. Tools
- Cursor:管理光标
- SavingFile:管理存档系统
- Window:管理展示、更改颜色等操作
存档系统
默认存档位于save文件夹下的file.csv
存档格式
存档中的前7行,是全局强化和金钱的记录。
依次记录的是:
- 交付中心的大小(半径)
- A型矿物的额外大小
- B型矿物的额外大小
- 地图大小(H、W,即长、宽)
- A型矿物的价值
- B型矿物的价值
- 金钱
存档剩余的部分,全部是记录Level信息所用。以Level 1为例
第1行:告知现在是哪一关(level1),随后分别是:
- 已开采的A型矿物数量
- 已开采的B型矿物数量
- 已开采的被切割的A型矿物数量
- 开采器速度
- 传送带速度
- 切割器速度
- 交付中心速度
- 垃圾桶速度
- 局部升级次数
- 是否完成任务1
- 是否完成任务2
- 是否完成任务3
接下来,是H * W大小的矩阵,每一个string对应了一个地图上的对象。
对于Equipment的子类而言,由方向和内置的矿物,由类似于这样的语法规定:
‘:’前对应的是Equipment的类型,’:’到’+’内对应的是内置矿物的类型,’+’后对应的是方向。