网络民工——项目系统设计与数据库设计(改)

网络民工 团队 2023-06-12 19:38:10

这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里<团队作业三——概要设计与数据库设计>
这个作业的目标1篇博客随笔1份《系统设计说明书》1份《数据库设计说明书》 1份《系统设计和数据库设计答辩PPT》 1份《系统设计和数据库设计评审表》 建立GitCode团队仓库
其他参考文献《构建之法》

目录

  • 一、 数据库设计
  • 1.概念结构设计
  • 1.1  实体关系模型
  • 2.逻辑结构设计
  • 2.1  JSON Schema
  • 3.建模规则
  • 3.1命名规定
  • 3.2键值对表示法
  • 4.参考资料
  • 二、系统设计
  • 1.系统结构
  • 1.1系统模块层次
  • 1.2功能模块
  • 1.3处理流程图
  • 1.4优化层次图
  • 2.系统性能设计
  • 2.1时间特性要求
  • 2.2输入输出要求
  • 2.3数据管理要求
  • 3.使用工具
  • 三、接口设计展示
  • 1.状态码
  • 2.接口
  • 2.1登录模块
  • 2.2个人信息模块
  • 2.3其他接口
  • 四、设计类图
  • 五、系统安全
  • 六、权限设计
  • 七、团队绩效
  • 八、开发计划安排与改进分析
  • 时间安排
  • 分工安排
  • 改进分析
  • 九、附件

一、 数据库设计

1.概念结构设计

1.1  实体关系模型

道具E-R图

img

一个道具(Item)能拥有多个触发效果(Effect),一个效果在多个道具中,道具与效果为多对多的关系。

 

法术E-R图

一个技能(Skill)能拥有多个触发效果(Effect),一个效果在多个技能中,技能与效果为多对多的关系。

img

 

 武器E-R图

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

img

 

怪物E-R图

定义怪物的基本属性

img

 

存档E-R图

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

img

 

地图E-R图

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

img

 

 

2.逻辑结构设计

2.1  JSON Schema

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"
  }
 }
}

 

 

3.建模规则

3.1命名规定

对象名(若有)采用大驼峰表示法、属性采用小驼峰表示法
数组名使用复数形式
避免使用某些易与JSON关键字混淆的命名,

 

3.2键值对表示法

属性使用双引号
字符串值使用双引号
数值(number)如int、float不使用双引号
布尔类型不使用双引号,值使用false与true
时间戳采用毫秒计int类型,即number

 

4.参考资料

参考资料链接

 

二、系统设计

1.系统结构

1.1系统模块层次

 

img

 

1.2功能模块

img

 

1.3处理流程图

img

 

1.4优化层次图

 

img

 

 

2.系统性能设计

2.1时间特性要求

游戏的响应时间在一分钟之内,当游戏所处在的环境处于最繁忙之时,最大的响应时间也要小于一分钟。

跟据游戏规则,对游戏通关时间及在商店购买时间均做出设置

 

2.2输入输出要求

输入:玩家开始游戏前需要登录,输入账号和密码。没有账号的玩家则需要先注册

输出:游戏信息显示,游戏结束后的玩家等级,积分以及排名等。

 

2.3数据管理要求

游戏账号及密码:玩家进入游戏前需要输入,用于登录服务器

玩家昵称:玩家可自定义喜欢的昵称

玩家等级:根据玩家的击败数及获得道具来提升等级

玩家排名:根据玩家的通关层数及通关时间来从高到低进行排名

 

3.使用工具

img

 

三、接口设计展示

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

1.状态码

img

 

2.接口

2.1登录模块

用户登录接口

请求方式:post

img

请求 Body 参数:

正确响应数据:

img

数据格式:JSON

错误响应数据:

img

数据格式:JSON

 

用户注册接口

请求方式:post

img

请求 Body 参数:

正确响应数据:

img

数据格式:JSON

错误响应数据:

img

数据格式:JSON

 

2.2个人信息模块

用户修改接口

请求方式:put

img

请求 Body 参数:

正确响应数据:

img

数据格式:JSON

错误相应数据:

img

数据格式:JSON

 

2.3其他接口

img

 

 

四、设计类图

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

img

 

 

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

img

 

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

img

 

 

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

img

 

 

 

 

五、系统安全

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

 

 

六、权限设计

1.玩家权限
玩家权限是最基本的权限,只有具有玩家权限的用户才能够进入游戏并进行基本的操作。玩家权限应该是默认的权限,所有用户都应该具有此权限。
2.管理员权限
管理员权限是具有更高级别权限的用户,他们可以对游戏进行更深入的管理和控制。管理员可以对游戏进行修改、调整和优化,以确保游戏的正常运行。管理员还可以对其他用户进行管理和监控,并决定是否禁止某些用户访问游戏。

 

 

七、团队绩效

img

 

 

八、开发计划安排与改进分析

时间安排

img

 

分工安排

img

 

 

改进分析

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

 

 

九、附件

1.GitCode团队仓库链接
GitCode团队仓库链接

 

2.系统设计说明书
系统设计说明书链接

 

3.数据库设计说明书
数据库设计说明书

 

4.系统设计和数据库答辩PPT
系统设计和数据库答辩PPT

...全文
31 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

688

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • 张书旖
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧