688
社区成员
发帖
与我相关
我的任务
分享
| 这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | <团队作业三——概要设计与数据库设计> |
| 这个作业的目标 | 1篇博客随笔1份《系统设计说明书》1份《数据库设计说明书》 1份《系统设计和数据库设计答辩PPT》 1份《系统设计和数据库设计评审表》 建立GitCode团队仓库 |
| 其他参考文献 | 《构建之法》 |
道具E-R图

一个道具(Item)能拥有多个触发效果(Effect),一个效果在多个道具中,道具与效果为多对多的关系。
法术E-R图
一个技能(Skill)能拥有多个触发效果(Effect),一个效果在多个技能中,技能与效果为多对多的关系。

武器E-R图
一个武器(Weapon)能拥有多个触发效果(Effect),一个效果在多个武器中,武器与效果为多对多的关系。

怪物E-R图
定义怪物的基本属性

存档E-R图
一个存档(Archive)保存一个玩家(Player)信息。为一对一关系。

地图E-R图
定义地图的基础属性,并定义最大最小生成楼层和期望楼层。

Player
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"health": {
"type": "number"
},
"speed": {
"type": "number"
},
"attack": {
"type": "number"
},
"spellPower": {
"type": "number"
},
"defend": {
"type": "number"
}
}
}
Item
{
"title": "Item",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"itemType": {
"type": "number"
},
"price": {
"type": "number"
},
"rarity": {
"type": "number"
},
"description": {
"type": "string"
} ,
"icon": {
"type": "string"
},
"prefab": {
"type": "string"
},
"effects": {
"type": "array"
}
}
}
Monster
{
"title": "Monster",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"monsterType": {
"type": "number"
},
"health": {
"type": "number"
},
"attack": {
"type": "number"
} ,
"exp": {
"type": "number"
},
"speed": {
"type": "number"
},
"gold": {
"type": "number"
},
"defend": {
"type": "number"
},
"prefab": {
"type": "string"
}
}
}
Archive
{
"title": "Archive",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"playerId": {
"type": "number"
},
"withTime": {
"type": "number"
},
"fastestTime": {
"type": "number"
},
"saveTime": {
"type": "number"
},
"power": {
"type": "number"
},
"floor": {
"type": "number"
},
"gold": {
"type": "number"
},
"death": {
"type": "number"
},
}
}
MapDefine
{
"title": "MapDefine",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"mapType": {
"type": "number"
},
"name": {
"type": "string"
},
"minFloor": {
"type": "number"
},
"maxFloor": {
"type": "number"
},
"perferedFloor": {
"type": "number"
},
"prefab": {
"type": "string"
},
}
}
Weapon
{
"title": "Weapon",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"speed": {
"type": "number"
},
"unlockCost": {
"type": "number"
},
"autoLock": {
"type": "boolean"
},
"attack": {
"type": "number"
} ,
"icon": {
"type": "string"
},
"description": {
"type": "string"
},
"effects": {
"type": "array"
}
}
}
Skill
{
"title": "Skill",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"coolDown": {
"type": "number"
},
"skillType": {
"type": "number"
},
"attack": {
"type": "number"
} ,
"icon": {
"type": "string"
},
"description": {
"type": "string"
},
"effects": {
"type": "array"
}
}
}
对象名(若有)采用大驼峰表示法、属性采用小驼峰表示法
数组名使用复数形式
避免使用某些易与JSON关键字混淆的命名,
属性使用双引号
字符串值使用双引号
数值(number)如int、float不使用双引号
布尔类型不使用双引号,值使用false与true
时间戳采用毫秒计int类型,即number




游戏的响应时间在一分钟之内,当游戏所处在的环境处于最繁忙之时,最大的响应时间也要小于一分钟。
跟据游戏规则,对游戏通关时间及在商店购买时间均做出设置
输入:玩家开始游戏前需要登录,输入账号和密码。没有账号的玩家则需要先注册
输出:游戏信息显示,游戏结束后的玩家等级,积分以及排名等。
游戏账号及密码:玩家进入游戏前需要输入,用于登录服务器
玩家昵称:玩家可自定义喜欢的昵称
玩家等级:根据玩家的击败数及获得道具来提升等级
玩家排名:根据玩家的通关层数及通关时间来从高到低进行排名

接口设计思路:以常见的错误码作为本次设计的核心错误码,并对不同接口的调用返回对应的错误码,接口主要还是分post、delete、put、get接口这四大类去实现

用户登录接口
请求方式:post

请求 Body 参数:
正确响应数据:

数据格式:JSON
错误响应数据:

数据格式:JSON
用户注册接口
请求方式:post

请求 Body 参数:
正确响应数据:

数据格式:JSON
错误响应数据:

数据格式:JSON
用户修改接口
请求方式:put

请求 Body 参数:
正确响应数据:

数据格式:JSON
错误相应数据:

数据格式:JSON

管理器需要继承自单例,贯穿整个游戏流程或部分流程,GameEventArgs为自定义的事件值,供调用者使用,派生自C#类EventArgs,并增加唯一标识eventId。DataManager需要维护数据表的内容。道具实体(ItemEntity)存在于游戏内,同时需要获取表的数据,由于一个道具可能存在于地图的不同地方,需要游戏内的entityId标识。

地图管理器在游戏战斗前的地图生成时创建,并聚合Builder,Buider为其从对象池中按规则创建房间并创建出一个地图顺序交给MapManager维护。由于一个地图定义会重复使用,需要唯一标识。

实体类(Entity)表示游戏中实际存在的对象,并有控制器控制刚体与动画的运动,其中玩家的运动受输入管理器(PlayerInputManager)驱动,敌人的控制受状态机AI驱动。

UI管理游戏中存在的UI。UIMessageBox同C#的MessageBox一样,用于显示对话框。

1.用户认证与权限控制
系统应该有一个可靠的认证和授权机制,确保只有授权用户才能访问系统的敏感数据和功能。可以通过使用密码或JWT等方式来实现用户认证与授权。
2.数据库与接口安全
在系统中有效地防止SQL注入、XSS攻击、CSRF攻击等,可以使用参数化SQL语句,防止SQL注入;使用HTML实体编码,防止XSS攻击;使用Token等方式,防止CSRF攻击。
3.数据加密
敏感数据应该加密存储在数据库中,并在传输过程中使用加密协议来保护数据的安全性。这可以通过使用SSL/TLS协议来实现。
4.数据备份与恢复
对于系统数据,需要进行定期备份,并设置合适的恢复策略,防止数据丢失和损坏。
5.异常处理与监控
针对系统中可能出现的异常,需要有相应的异常处理机制,例如登录失败、访问超时等异常情况。同时需要进行系统监控,及时发现并解决异常情况。
6.代码检查与代码规范
对前端和后端代码进行严格的检查和规范,遵循面向对象的设计原则,避免重复代码,减少出错概率。
7.更新与维护
定期对系统进行更新,包括修复漏洞、添加新功能、优化性能等。
8.恶意软件保护
系统应该有恶意软件保护措施,以避免恶意软件的攻击和传播。这可以通过使用防病毒软件、防火墙和入侵检测系统来实现。
1.玩家权限
玩家权限是最基本的权限,只有具有玩家权限的用户才能够进入游戏并进行基本的操作。玩家权限应该是默认的权限,所有用户都应该具有此权限。
2.管理员权限
管理员权限是具有更高级别权限的用户,他们可以对游戏进行更深入的管理和控制。管理员可以对游戏进行修改、调整和优化,以确保游戏的正常运行。管理员还可以对其他用户进行管理和监控,并决定是否禁止某些用户访问游戏。



- Q:玩家和武器是否存在联系?如果有联系是什么?
A:在上一次的需求分析中,我们没有考虑清楚二者之间的联系;在本次改进中,武器与玩家在玩家眼中为一对一的关系,但在实现方面,由于武器在战斗准备时选择,需要动态实例化武器对象并成为玩家的子对象,而实际的效果触发设计为由武器本身的碰撞体触发,角色对象只操控武器的动画。
- Q:玩家从始至终只有一把武器,这合理吗?
- A:这个问题担心的问题是:这样的设定会不会使游戏过于单调乏味。在经过组内讨论后,我们决定保留这个设定。游戏过程中有丰富的法术和道具可供选择,还有角色不同的成长方向。武器决定了角色的攻击方式,装备不同的武器游玩体验会是完全不同的,如果你把“武器”这个词替换为“角色”,就不会有“为何玩家在一场游戏中只能操作一个角色,不能更换角色”这样的疑问了。
1.GitCode团队仓库链接
GitCode团队仓库链接
2.系统设计说明书
系统设计说明书链接
3.数据库设计说明书
数据库设计说明书
4.系统设计和数据库答辩PPT
系统设计和数据库答辩PPT