网页H5小游戏——需求分析与设计

weixin_43793768 2022-01-01 23:30:28

网页H5小游戏——需求分析与设计

一.概述

1.要求

使用Unity或者其他工具,实现一个简易版小游戏,游戏类型不限。支持与局域网内另一玩家对战。需要使用QUIC协议,连接保持(4G/WIFI切换)。采用人机对战方式,支持游戏断开链接后,重新连接游戏并进行对局。保障前端安全性,防止用户篡改前端数据,伪造数据提交。

2.详细说明

由于没有限定游戏的类型,我们计划做一个简化版的《弹弹堂》小游戏:

1.一次两个玩家,回合制。

2.每个玩家在回合内可以进行移动,也可以发射炮弹。炮弹可以给玩家体力值造成伤害,也可以破坏地形。

3.当玩家发射炮弹,或者回合内的倒计时归零时,回合结束,转移控制权。

4.当一方玩家体力值归零时,游戏结束,归零的一方失败。

其详细的流程如下图所示:

 

 

游戏的截图如下所示

 

 

注:

本次工程实践是小组内多人一同开发,主要分为客户端和服务端部分,每个人分工不同。客户端采用Unity工具,服务端采用Go语言实现。

我负责服务器部分的开发,所以接下来的内容不会涉及到客户端开发的部分,只会针对服务端进行。

二.用例建模

1.系统用例示意图

从服务端的角度来看,用户,也就是玩家,有以下这些用例:

玩家功能开始状态终止状态
注册用户点击注册开始填写信息用户收到了注册成功或者失败的反馈
登录用户输入登录信息并发送用户收到了登录成功或者失败的反馈
匹配用户点击“联机”按钮成功匹配到其他玩家
游戏匹配到玩家并游戏开始分出胜负游戏结束

根据用到的功能画出用例示意图。

 

 

2.用例分析

(1)用户注册

用例名称用户注册
执行者未注册用户
执行事件流1.登录首页
 2.跳转注册界面
 3.输入用户名和密码注册
 4.注册成功,返回注册信息
异常事件流输入信息有误,返回注册错误信息

(2)用户登录

用例名称用户登录
执行者已注册用户
基本事件流1.登录平台首页
 2.填写用户名和密码
 3.登录成功,跳转至游戏选项
异常事件流填写信息有误,提示错误

(3)匹配玩家

用例名称匹配玩家
执行者已注册玩家
基本事件流1.单机界面上“联机模式”按钮
 2.等待系统找与其级别匹配的玩家
 3.成功找到对应玩家,创建房间
异常事件流匹配超时,自动进入单机模式

(4)游戏

用例名称游戏
执行者已注册玩家
基本事件流1.初始化房间,告诉双方对手信息和自己的位置信息
 2.转发双方的操作数据,并等待胜负结算数据
 3.收到双方的结算数据,宣告结果并记录数据库
异常事件流玩家至少一方网络断开,断线一方判定战败

三.时序分析

从用户的角度,我们来看看从用户登录开始到成功完成一局游戏。用户,客户端,服务器,数据库的时序示意图。

 

 

对于用户来说,只能看到客户端,服务端和数据库对其是透明的。并且也可以从中看出,服务端并不负责客户端的游戏状态转换,只是负责转发,且十分相信客户端(胜负的结算信息是由客户端主动发送的),这对前端安全来说也是一个挑战。

四.设计

1.实体类的设计

对于服务端来说,主要的实体类有三个:用户,登录用户列表,房间。数据库中只存储用户表,属性包括:id,密码,总游戏场数,胜利游戏场数。数据库表设计如下所示:

属性名类型描述
usernamevarchar用户名,具有唯一性
passwordvarchar用户登录密码,实际存储会加密处理
allgameinteger该用户进行游戏的总场数
wingameinteger该用户胜利的总场数

后两项主要用于在匹配时可以匹配到势均力敌的敌人,从而不会因为双方等级差距太大破坏游戏体验;

登录用户列表(UserList)用于存放已经登录的用户信息,主要包括用户id,用户的通信channel(这是go语言的特性)和用户的ip:端口号以方便通信;

房间(Room)用于维护对局实现双方玩家的通信交流。

登录用户列表和房间都在内存中,不会持久化到数据库。

三者的UML示意如下所示:

 

 

2.设计模式

(1)单例模式

对登录用户的列表UserList我们采用单例模式,因为无论在任何时候,登录用户列表都是唯一的。UML示意图如下:

 

 

(2)传输对象模式

游戏的客户端会向服务器一次性传递带有多个属性的数据。传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输。在这次项目中,无论是玩家的登录/注册信息;还是玩家在游戏中的操作/结算信息,都需要一次传输很多的内容。这里以登录为例作UML示意图:

 

 

(3)数据访问对象模式

当需要对用户信息持久化操作时,就需要这种设计模式。UML示意图如下:

 

 

 

 

作者:093

...全文
610 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农孟宁 2022-01-11
  • 打赏
  • 举报
回复

用例图和序列图的画法有点怪

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

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