From 755b80e81a71ae72874096615041fb7c2c5e4fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=8A=E9=B1=BC?= <1045190064@qq.com> Date: Fri, 15 Apr 2022 22:12:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=8D=9A=E5=AE=A2=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teamwork3blog.md | 212 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 teamwork3blog.md diff --git a/teamwork3blog.md b/teamwork3blog.md new file mode 100644 index 0000000..6c7d18f --- /dev/null +++ b/teamwork3blog.md @@ -0,0 +1,212 @@ +| 这个作业属于哪个课程 | [***2022福大-软件工程、实践W班***](https://bbs.csdn.net/forums/se-se_practice) | +| ---------- | -------------------------------------------------------------------- | +| 这个作业要求在哪里 | [*要求*](https://bbs.csdn.net/topics/605819025) | +| 这个作业的目标 | 完成数据库设计和系统设计 | +| 其他参考文献 | 无 | + +--- + +@[toc] + +# 一.系统和数据库设计 + +## 1.体系结构设计 + +系统脚本和业务脚本用来控制对资源和数据的读取与存储,并且脚本与unity组件直接进行交互以控制游戏对象的行为,最后unity渲染出游戏对象。 + +![img](https://img-community.csdnimg.cn/images/7c6b1334284a428ead42777f6a29ad37.png "#left") + +## 2.功能模块层次图 + +主要有三大模块:界面模块、战斗模块和资源模块。 + +![img](https://img-community.csdnimg.cn/images/a9cee6f03f8d4ba8bbf9d4e45bbf81b4.png "#left") + +界面模块包括主菜单、战斗UI、升级界面、设置界面; +战斗模块包含玩家操作和关卡的内容; +资源模块负责游戏内资源的管理和应用。 + +## 3.E-R分析和表结构设计 + +![img](https://img-community.csdnimg.cn/images/b347c60ec78f4c1b89149c9b5e423b16.png "#left") + +由于我们团队的项目是基于unity开发的小型单机游戏,不需要联机数据采用本地存储,对游戏内的一些数据如枪、子弹的伤害、移速的存储采用的是Unity的[ScriptableObject](https://docs.unity.cn/cn/2018.4/Manual/class-ScriptableObject.html)。 + +> ScriptableObject是一个可独立于类实例来保存大量数据的数据容器。ScriptableObjects 的一个主要用例是通过避免重复值来减少项目的内存使用量。如果项目有一个预制件在附加的 MonoBehaviour 脚本中存储不变的数据,这将非常有用。每次实例化预制件时,都会产生单独的数据副本。这种情况下可以不使用该方法并且不存储重复数据,而是使用 ScriptableObject 来存储数据,然后通过所有预制件的引用访问数据。这意味着内存中只有一个数据副本。 + +其它数据如玩家的键位设置、货币数量、解锁的武器,这些数据的数量量小,我们采用的是轻量化的json方式存储数据。这些数据的对应的json如下: + +(1)玩家设置setting + +| 序号 | 标识 | 字段名称 | 字段类型 | +| --- | --- | ------- | ------ | +| 1 | 音量 | volume | Number | +| 2 | 快捷键 | Keycode | Array | + +(2) 货币数量currencies + +| 序号 | 标识 | 字段名称 | 字段类型 | +| --- | --- | ---- | ------ | +| 1 | 魔石 | MS | Number | +| 2 | 魔核 | MC | Number | + +(2) 武器weapon + +| 序号 | 标识 | 字段名称 | 字段类型 | +| --- | ---- | ---------- | ------- | +| 1 | 武器名称 | name | String | +| 2 | 是否解锁 | isUnlocked | Boolean | + +# 二.类图、系统安全和权限设计 + +## 1.类图 + +![img](https://img-community.csdnimg.cn/images/fe7c4914979d4b84a9d4597d900cdb42.png "#left") + +BattleUnit:战斗单元类,所有战斗单位的抽象类。 +Player:玩家类,所有玩家角色的抽象父类。 +Enemy:敌人类,所有敌人的抽象父类。 +PlayerController:玩家控制类,封装对玩家的操作。 +Weapon:武器类 +WeaponData_SO:武器数据类,利用 Unity 的 ScriptableObject 存放武器数据。 +SingletonManager:单例类,负责一场游戏的创建和维护。 +CamereController:相机控制类,负责游戏视角和窗口的控制。 +GameManager:游戏管理类,负责玩家的创建和地图的加载等。 +SaveManager:存档管理类。 +EnemyGenerator:敌人生成类,生成地图主分支和其它分支上的敌人 +MapBuilder:地图创建类。 +Mapmaker:生成地图和休息点 +ResourceRoom:资源房间类 +RestRoom:休息点类 +BossRoom:Boss 房间类 + +## 2.系统安全 + +• 市场上的单机游戏都面临着被破解、盗版的风险。 +• 我们的团队使用Unity引擎开发游戏,相比 C/C++ 游戏,Unity 游戏存在分析工具多、破解门槛低、攻击方法通用化等安全风险。 +• Unity 支持 Mono 和 IL2CPP 两种编译模式。使用 Mono 模式编译的游戏,会将 C# 脚本代码编译为 IL 中间码,发布到游戏客户端。也就是源代码会泄露,这种中间码安全性较低,可以被一键反编译,一键修改。后来基于安全性和执行效率方面的考虑,Unity 支持了 IL2CPP 编译,大大提升了游戏安全性。 +• 我们团队决定使用IL2CPP 模式编译我们的脚本代码,使用 IL2CPP 模式编译,游戏的脚本代码没有了,脚本代码被编译成了 Native 代码发布。很多反编译的工具都失效了,安全性得到了一定的提升。 + +## 3.权限设计 + +(1)游戏的启动、暂停与退出权限 +(2)主角操纵权限:玩家可以操纵游戏主角的移动、射击。 +(3)信息查看权限:玩家可以查看各游戏角色的信息。 +(4)快捷键设置权限:玩家可以根据自己的习惯更改对主角操控的快捷键设置。 +(5)音量设置权限:玩家可以自由调节音量大小 +(6)查看小地图权限:玩家可以查看小地图了解自己的位置等信息 +(7)对话权限:玩家在相应情景下可以和游戏对象进行对话交流以了解闯关相关信息。 +(8)进入存档权限:玩家可以选择一个存在的存档并点击进入。 +(9)创建存档权限:玩家可以创建一个新的游戏存档。 +(10)删除存档权限:玩家可以删除一个存在的存档。 +(11)保存权限:玩家可以将游戏进度保存到一个存档中。 + +# 三.改进分析 + +Q1:用例图中“浏览菜单”是否可以改为“设置”,“进入游戏”改为“开始游戏”,并把跟游戏相关的归为这个用例之下? + +![img](https://img-community.csdnimg.cn/images/120696d16f9548fba24892ce7aebff02.png "#left") + +> A: 我们最开始对进入游戏这个用例的理解是点击游戏图标打开游戏,后来在老师的提醒下觉得这样的话这个用例就不属于系统责任范围内,于是我们采纳了老师的意见,修改了用例图。 +> ![img](https://img-community.csdnimg.cn/images/1f0e601234c746d08f84d7ed045ce982.png "#left") + +Q2:推车这个类后续可以有功能上的升级变化,可不可以用装饰器模式来设计? + +![img](https://img-community.csdnimg.cn/images/1e8c80772e294ab18af9126ea714c153.png "#left") + +> A:推车升级的方向有四个:血量、放置的炮塔数量、速度、防护罩,为此我们使用了装饰器模式,将不同的升级工作分配给具体的装饰器类。 +> ![img](https://img-community.csdnimg.cn/images/04cfa0b540b944dab466073051abbe98.png "#left") + +Q3:"战士”和“枪手”是两个不同的类还是对象? + +![img](https://img-community.csdnimg.cn/images/6b6bca2b633a496e83f55c988f536b6f.png "#left") + +> A: 战士和枪手是不同的类,具有不同的操作逻辑,但是这两个类具有相似的结构,于是我们新增了一个游戏角色Role类,让战士和枪手类继承自Role类,玩家类包含了Role类。 +> ![img](https://img-community.csdnimg.cn/images/b23d44ba3a2c41eaa84a55d720695024.png "#left") + +Q4:武器和玩家的关系如何? + +> A:之前我们在设计类图的时候没有给出武器和玩家的关系,在这轮的改进分析中我们给武器类和玩家类加入了聚合关系。 +> ![img](https://img-community.csdnimg.cn/images/c7949725dd2d4bbb86ee32bcf907d0a3.png "#left") + +Q5:在类图中还使用了哪些设计模式? + +> A:我们给一局游戏的创建、管理等使用了单例模式,如下图SingletonManager类作为单例类负责游戏管理、视角控制、地图生成等工作。 +> ![img](https://img-community.csdnimg.cn/images/03522dcc80f34fa090e711707414168e.png "#left") + +# 四.团队绩效 + +## 1.工作流程 + +• 召开第一次全体线上会议:类图的修改、工作分配 + +• 小组成员根据分配的工作内容开始搜集资料,完成分配的工作 + +• 初步完成系统设计说明书&数据库设计说明书 + +• 召开第二次全体线上会议:系统设计和数据库设计人员汇报工作,其它人员针对不足之处提出意见 + +• 修改完善系统设计说明书和数据库设计说明书 + +• 召开第三次全体线上会议:组员间按照制定的绩效考核表(下图)进行打分,确定团队贡献度 + +![img](https://img-community.csdnimg.cn/images/4c974edf5e974f9e881baf272192b65c.png "#left") + +• 编写博客、制作答辩PPT + +• 制作评审表,准备答辩 + +## 2.组员分工及贡献度 + +| 学号 | 工作内容 | 贡献度 | +| --------- | ------------------ | --- | +| 221900326 | 负责类图设计、文档复审 | 7 | +| 181800412 | 负责类图设计、文档复审 | 6 | +| 221801220 | 负责类图设计、完善游戏玩法、系统设计 | 11 | +| 221900135 | 负责类图设计、答辩 | 15 | +| 221900234 | 负责编写数据库设计说明书 | 11 | +| 221900208 | 负责编写游戏设计文档、完善游戏玩法 | 6 | +| 021900442 | 负责类图设计和优化 | 7 | +| 221900233 | 负责编写系统设计说明书 | 12 | +| 221900321 | 负责ppt制作 | 9 | +| 221900314 | 负责评审表设计、博客编写 | 16 | + +# 五.开发计划安排 + +## 开发计划和时间安排 + +| 时间 | 活动产出 | 里程碑 | +|:------------------------------:|:--------------------------------------------------------------------------------:|:-----------:| +| 第一周(4.11~4.17)
系统设计和数据库设计 | 系统设计说明书
数据库设计说明书
系统设计和数据库设计答辩PPT
| 完成数据库和系统设计 | +| 第二周(4.18~4.24)
Unity学习 | 团队成员学习Unity的基本使用
准备团队协作上机实训 | 完成团队协作上机实训 | +| 第三周(4.25~5.1)
Alpha版本开发第一周 | 实现玩家控制的基本逻辑
设计怪物AI
设计主菜单、设置、战斗、Esc等基本界面UI
完成玩家、敌人、枪、炮塔等游戏物品的UI设计 | | +| 第四周(5.2~5.8)
Alpha版本开发第二周 | 实现地形和怪物的生成
完成存档功能
完成枪、炮塔、推车、子弹的逻辑设计
整合游戏内容,形成一个可试玩的版本
准备Beta版本答辩 | 完成游戏Alpha版本 | +| 第五周(5.9~5.15)
Beta版本开发第一周 | 对Alpha版本进行测试评估、提出进一步的开发意见
对怪物和地形的生成进行优化
对枪、炮塔的攻击方式、攻击特点进行细化设计 | | +| 第六周(5.16~5.22)
Beta版本开发第二周 | 添加怪物的种类、优化怪物的AI行为
优化怪物攻击、行走、受击等行为的动画
增加玩家可选的职业,并设计相关的控制逻辑 | | +| 第七周(5.23~5.29)
Beta版本开发第三周 | 完成游戏boss及boss房间的设计
对游戏流程进行优化
添加子弹、枪、炮塔等物品的攻击特效 | | +| 第八周(5.30~6.5)
Beta版本开发第四周 | 添加游戏音效,包括背景音效、动作音效、射击音效等
为游戏加入剧情及新手引导
对游戏进行测试和优化 | 完成游戏Beta版本 | + +## 分工安排 + +| 学号 | 分工内容 | 角色 | +|:---------:|:-----------------------------:|:----:| +| 221900326 | 完成推车、炮塔、武器、敌人相关部分的设计 | 游戏开发 | +| 181800412 | 完成玩家相关部分的设计 | 游戏开发 | +| 221801220 | 完成地形和怪物生成部分的设计 | 游戏开发 | +| 221900135 | 收集UI资源,制作枪、炮塔、推车等部分功能性脚本,答辩工作 | 游戏开发 | +| 221900234 | 收集UI资源,制作枪、炮塔、推车等部分功能性脚本 | 游戏开发 | +| 221900208 | 编写游戏开发文档、完善游戏玩法和内容,对游戏提出改进意见 | 游戏策划 | +| 021900442 | 完善游戏玩法和内容,对游戏提出改进意见、答辩工作 | 游戏策划 | +| 221900233 | 完善游戏玩法和内容,对游戏提出改进意见 | 游戏策划 | +| 221900314 | 游戏测试,博客管理 | 游戏测试 | +| 221900321 | 游戏测试,PPT制作 | 游戏测试 | + +# 六.团队仓库和文档链接 + +- [GitCode团队仓库链接](https://gitcode.net/MLSG_fzu/systemanddatabasedesignteam6) + +- [麦丽素鸽_系统设计说明书.pdf](https://gitcode.net/MLSG_fzu/systemanddatabasedesignteam6/-/blob/master/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E8%AF%B4%E6%98%8E%E4%B9%A6.pdf) + +- [麦丽素鸽_数据库设计说明书.pdf]() + +- [麦丽素鸽_系统设计和数据库设计答辩PPT.pdf](https://gitcode.net/SoftwareEngineering2022ClassW/MLSG_fzu/systemanddatabasedesignteam6/-/blob/master/%E9%BA%A6%E4%B8%BD%E7%B4%A0%E9%B8%BD-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8E%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E8%AF%B4%E6%98%8E.pdf) -- GitLab