239
社区成员




这个作业属于哪个课程 | FZU_SE_teacherW_4 |
---|---|
这个作业要求在哪里 | <团队作业 概要设计和数据库设计> |
这个作业的目标 | 概要设计和数据库设计 |
其他参考文献 | 《构建之法》 |
设计思路:在本次的体系结构设计中我们选择了分层架构的设计模式,系统中有四层结构,分别是表现层、控制层、游戏逻辑层和数据层。表现层负责游戏界面的展示与更新,确保玩家的操作能够在界面上及时反映;控制层负责接收表现层玩家输入的信息并且进行处理,再传递到游戏逻辑层调用相应模块;游戏逻辑层是整个系统的核心,存放了主要玩法的逻辑运算,处理来自玩家的操作指令,结果反馈给表现层或数据层;数据层负责管理和加载游戏资源,对游戏进度进行缓存和持久化存储。
设计思路:功能模块的划分从可扩展性和可维护性的角度出发,将功能独立的模块划分出来,每个模块独立运作,降低模块之间的耦合度,来提高系统的可维护性和可测试性。此外,采取这样的划分,有利于团队依照不同的模块功能分工进行开发,避免开发时互相影响,实现并行开发。
角色表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
角色ID | INTEGER | 是 | 是 | ||||
角色名称 | TEXT |
存档表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
存档ID | INTEGER | 是 | 是 | ||||
存档名称 | TEXT | ||||||
存档时间 | TIME | ||||||
金钱 | TEXT | ||||||
道具表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
道具ID | INTEGER | 是 | 是 | ||||
道具名称 | TEXT | 20 | |||||
描述 | TEXT | 255 | |||||
重量 | TEXT | ||||||
品质 | TEXT | ||||||
出售价格 | INTEGER |
作物表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
作物ID | INTEGER | 是 | 是 | ||||
作物名称 | TEXT | 20 | |||||
生长时间周期 | INTEGER |
耕地表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
存档ID | INTEGER | 是 | 是 | ||||
位置x | INTEGER | 是 | 是 | ||||
位置y | INTEGER | 是 | 是 | ||||
土地样式 | TEXT | ||||||
土地状态 | TEXT | ||||||
技能表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
技能ID | INTEGER | 是 | 是 | ||||
技能名称 | TEXT |
npc表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
npcID | INTEGER | 是 | 是 | ||||
npc名称 | TEXT | ||||||
性格 | TEXT |
对话表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
对话ID | INTEGER | 是 | 是 | ||||
内容 | TEXT |
npc_对话表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
npcID | INTEGER | 是 | |||||
对话ID | TEXT | 是 | |||||
发生时间 | TIME | ||||||
对话ID和npcID分别为对话表和npc表中的对应字段的外键,删除和更新时都是级联关系。 | |||||||
存档_技能表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
存档ID | INTEGER | 是 | 是 | ||||
技能ID | INTEGER | ||||||
等级 | INTEGER | ||||||
经验 | TEXT |
存档_道具表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
存档ID | INTEGER | 是 | 是 | ||||
格子ID | INTEGER | ||||||
道具ID | TEXT | 是 | 是 | ||||
背包位置 | TEXT |
存档_作物表
名 | 类型 | 长度 | 小数点 | 不是null | 自动递增 | 主键 | 注释 |
---|---|---|---|---|---|---|---|
存档ID | INTEGER | 是 | 是 | ||||
作物ID | INTEGER | 是 | 是 | ||||
位置x | INTEGER | ||||||
位置y | INTEGER | ||||||
距离收获时间 | INTEGER | ||||||
接口功能:
耕地模块负责管理耕地的状态,包括种植、收获、作物生长等功能。
提供的接口:
使用其他模块的接口:
Player.holdItem():玩家手持种子,进行播种操作。
接口功能:
商店模块用于处理玩家在商店的购物、卖出农产品以及与 NPC 的交易。
提供的接口:
使用其他模块的接口:
Inventory.addItem(Item item,int quantity): 将物品放置到背包中
接口功能:
背包模块管理玩家持有的物品,可以添加、移除物品,并与手持物品进行互动。
提供的接口:
使用的接口:
Player.holdItem():玩家使用背包中的物品
接口功能:
送货模块管理玩家将物品送至指定地点的任务流程。
提供的接口:
使用的接口:
Inventory.selectedItem():玩家选中的背包物品
接口功能:
存档模块负责管理游戏的保存与读取,包括玩家状态、世界状态等数据的保存与加载。
提供的接口:
使用的接口:
Player.getPlayerStatus():获取玩家状态并保存。
Farming.getFieldStatus():获取耕地状态并保存。
Inventory.getItemList():获取玩家的背包信息并保存。
总体设计
设计图
类设计
SaveManager类:用来管理所有的存档,提供新建、删除和加载存档的操作,记录当前的存档。
Save类:在Save类中,记录描述存档的数据,包括存档名、存档位置、存档是否收藏(已收藏的存档无法删除)以及存档的创建时间。
Save类还需要记录游戏内的数据,使用一个GameSaveData类对象来存储。存档保存到文件或数据库中。
GameSaveData类:在GameSaveData中,存储包括玩家、地图以及游戏设置等数据。
类的关系
Save类和SaveManager类使用组合关系,Save类和GameSaveData使用组合关系。
设计模式
存档系统实现采用备忘录模式,为游戏存档系统提供了一种有效的方法来保存和恢复游戏状态,增强了游戏的可玩性和用户体验。
设计图
类设计
类的关系
由于Slot对象由Inventory创建时创建,并且具有强关联关系,因此采用组合关系。
设计模式
使用到单例模式,每个玩家只能拥有一个背包。
设计图
类设计
类的关系
Save类和SaveManager类使用组合关系,Save类和GameSaveData使用组合关系。
设计图
类设计
类的关系
由于我们的游戏为单机游戏,不像联网游戏那样面临大量的外部攻击,但依然有一些安全设计不可忽视,用来保护玩家数据、避免作弊、以及保证游戏的整体体验。
(1)数据加密
使用第三方插件Secure PlayerPrefs对存档进行加密处理,防止用户恶意篡改。
(2)存档系统健壮性
在游戏重要结点备份存档,或游戏内每日开始时,备份存档。同时允许用户保存多个存档,避免单一存档损坏无法恢复。
(3)防止本地作弊
在游戏发布时,采用 IL2CPP编译模式。由于IL2CPP模式将工程中的文件先编译为IL,再使用IL2CPP将这些IL变回CPP,并编译成能执行的汇编代码,最后利用VM运行。相比于unity默认的Mono模式编译,安全性得到很大提高。
在上一次需求分析中,我们设计的类图多处关系设定不合理。
在本次设计中我们慎重考虑类之间的关系。如图类(Graph)和顶点类(Vertex)、边类(Edge)为组合关系,DeliveryManager和Graph为聚合关系。
更加合理地使用继承关系,如多种排序策略继承排序类,多种搜索策略类继承搜索类。
在上一次的类图设计后,我们了解了更多的设计模式,并运用到改进的类图设计中。在存档系统设计中,采用了备忘录模式;在商店系统设计中,对于算法工具,采用了策略模式实现不同的算法。除此之外,我们对单例模式、原型模式等设计模式的理解也更进一步,有利于我们完成接下来的项目工作。
上次设计Player类中,使用其他类的操作,如plant()应该是Crop类的操作,以及其他函数useTool()等。现在删除这些操作,在具体其他类中进行调用。
学号 | 工作内容 | 贡献度 |
---|---|---|
222200105 | 功能模块层次设计,接口设计,系统设计文档撰写,类图设计和修改,组织协调各部分工作,确保各部分设计的一致性 | 18.8% |
222200104 | 体系结构设计,系统设计文档编写 | 15.2% |
222200101 | 数据库er图设计,数据库表结构设计,数据库设计文档编写 | 15.1% |
222200102 | 部分数据流图+部分类图 | 14.6% |
222200103 | 数据库表设计,数据库er图设计,部分类图,博客 | 15.8% |
222200107 | 部分活动图+部分类图+ppt制作 | 14.5% |
222200424 | 评审表,类图设计 | 6% |
时间 | 开发安排 | 里程碑 |
---|---|---|
10.23-10.30 | 1、美工素材准备 2、将游戏场景基本搭建完成 3、实现UI系统的设计和脚本编写 | 完成基本的游戏框架 |
11.1-11.12 | 1、同步开发背包系统,耕地系统,商店系统,送货系统 2、将游戏中所有的道具及物品进行编号,并制作成预制体 | 完成游戏的基本雏形,让游戏各个基本可以使用 |
11.13-11.14 | 1、根据实际的开发情况以及内部测试情况,全体成员共同商议,对功能玩法进行优化和调整的计划。 2、对功能模块进展较慢的部分,进行相应的人员增设,或调换能力更好的成员负责该部分。 | |
11.15-11.19 | 1、对各功能模块进行优化和打磨 2、丰富游戏背景和游戏设定,并丰富npc的对话文本量,添加npc的任务丰富游戏内容 3、在确保游戏数据不会再扩增后,实现游戏的存档功能 4、完成功能开发或其他负责部分的人员,对项目进行相应的测试 | 产出更加完整的游戏内容 |
11.20-11.26 | 1、继续对各个功能进行完善 2、测试Beta冲刺之后新开发的存档模块和其他游戏内容 3、向团队外的人员开放测试 | 项目基本完成 |
学号姓名 | 角色 | 分工 |
---|---|---|
222200105叶沈煜 | PM、设计人员、开发人员 | 负责项目的统筹推进,协调各个部分的工作、负责系统结构设计、负责实现游戏场景的搭建、商店模块的脚本编写及游戏场景里的呈现、存档部分的脚本编写 |
222200104邓彦茜 | 美工、设计人员、开发人员 | 负责美工素材的准备、负责游戏场景的设计和搭建、负责商店模块脚本编写及在游戏场景的呈现 |
222200101王统涵 | UI设计、开发人员 | 负责实现背包模块脚本编写与游戏场景里的呈现、游戏UI |
222200102王浩然 | 开发人员 | 负责耕地模块脚本编写以及游戏场景里的呈现 |
222200103王智健 | 开发人员 | 负责实现送货模块脚本编写以及游戏场景里的呈现 |
222200107兰锦煊 | UI设计、开发人员 | 负责实现背包模块脚本编写与游戏场景里的呈现、游戏UI |
222200424赵伟豪 | 美工、测试 | 负责美工素材准备、负责项目代码的审查,以及项目测试 |