大三工作室项目 - 五子棋世界(1):需求分析与成品截图
前言
前阵子我在将自己以前的博文都搬到新的用 GitHub Pages 搭的博客上时,搬校内日志时,凑巧再翻到我大三进工作室时的五子棋世界项目的截图相册。挺感慨,想将这个相册弄个简单的图集式文章放到新博客上。写简介时想知道当时到底已经看了多少经典技术书了,就去翻硬盘里存的这个项目的相关文件。
比较惊喜,相关文件挺丰富:
- 软件发布版相关文件
- 服务器发布包
- 客户端发布包
- 系统源文件
- Client 源码工程
- Server 源码工程
- 项目文档及演示文稿
- 需求分析.doc
- 设计文档.doc
- 测试文档.doc
- 使用手册.doc
- 工作报告.ppt
- 技术报告.ppt
竟然历史资料这么丰富,那就借此机会为了这个早年心血写的详实些吧。
工作室介绍
我们软件学院在大三的时候让大家进工作室做项目。让大家系统性的做点大的项目,加强实战。这对于我们学生的好处就是大四找实习的机会大很多。
工作室类型大致有 Java 工作室、C++ 工作室,等等。我早早就确定了将来走 C++ 方向,并在进工作室前就自学了《C++ Primer 中文版》、《Windows 程序设计》等经典书,自然进的 C++ 工作室。
我的项目背景简介
需求分析文档里的引言:
进入工作室,开始项目驱动学习。本来和 XLH 等同学组成了三人团队,但是他们选的项目都是 MIS 系统,而我想以后从事 Linux 服务器端后台程序开发。经过取舍,最终决定自己独立出来,以五子棋世界这个项目来完成工作室的学习。
我选的项目是做个类似 QQ Game 这样的休闲游戏对战平台。有本讲 VC 编程的书上刚好有个五子棋的示例,所以就选了五子棋作为平台上第一个游戏。想着后续有空再加其他的,但后来时间不足,就没有时间做更多的项目了。后来看网上有个项目叫做象棋世界,整个游戏里只玩象棋。我就索性将我的项目也称呼为“五子棋世界”了。
需求分析
这里直接摘录当年的需求分析文档。
目标
实现一个单台服务器可支持很多人同时在线稳定游戏的五子棋世界。
运行环境
- 服务器:Linux
- 数据库:Linux 下的 MySQL
- 客户端:Windows XP
条件与限制
- 服务器没有没有公网 IP,几个工作室的教育网 IP 可以通过端口映射进行访问。
- 服务器的 CPU 功率、个数和内存都不能和专业服务器相比,这里的所有测试数据都会比商业需求小很多。
- 服务器的带宽为我们的个人机大小,这也影响测试数据。
数据词典
- 大厅:玩家登录后直接进入大厅,在大厅可以选择房间进入。
- 房间:各个游戏的具体游戏场所。是对现实当中的棋牌室的抽象。分房间是为了方便做横向扩展。
- 游戏房间列表:当前服务器已开启的游戏房间列表,及各房间的在线人数信息。
- 桌子:面对面一起游戏的玩家的区域虚拟,是对现实当中桌子的抽象。
- 座位:五子棋世界的桌子均有两个座位供玩家对弈。
- 棋盘:玩家在上面可以落子的界面部分。
- 棋子:分为黑子和白子,分别用黑白两色的实心圆形表示。
- 玩家:玩游戏的用户。
功能需求描述
服务器端:
- 可外部配置部分:
- 可以设定服务器 IP 及端口。
- 可以动态配置服务器启动参数。
- 可以配置房间的参数。
- 可以动态配置数据库的连接参数。
- 自己内部处理需求:
- 回应客户端的检测 ID 是否可注册。
- 处理客户端的注册请求。
- 处理客户端的登录请求。
- 向登录的玩家发送他的基本信息。
- 向客户端发送并维护房间列表及各房间在线人数信息。
- 处理玩家进出房间的请求。
- 发送并维护各房间里玩家的信息。
- 处理玩家进出桌子的请求。
- 转发同一桌子上的玩家的聊天信息。
- 同步和维护一个桌子上的玩家的游戏状态和数据。
- 处理断线玩家,及正在游戏中的断线玩家及其他玩家的信息。
- 支持扩展。
- 单台服务器支持很多个连接。
- 可外部配置部分:
客户端:
- 登录和注册:
- 检查 ID 是否被注册。
- 注册 ID。
- 登录游戏。
- 大厅里的活动:
- 显示玩家自己的基本信息。
- 显示房间列表及各自在线人数。
- 进出房间。
- 显示进入的房间的玩家列表及信息。
- 显示并实时更新进入的房间的各桌子座位上的玩家头像。
- 进出桌子。
- 桌子上的活动:
- 准备游戏。
- 提示先落子者。
- 游戏中落子。
- 聊天。
- 显示自己的执子颜色及当前执子方。
- 逃跑提示。
- 游戏结果及得分显示。
- 可以在同一桌子游戏结束之后开始新的一局。
- 该自己落子时的任务栏标题闪烁。
- 聊天消息到来时的任务栏闪烁。
- 登录和注册:
性能需求
- 数据精确度和安全性:
- 保护玩家资料、玩家游戏成长数据的正确性,确保玩家的利益。
- 时间特性:
- 同一房间的其他玩家的在桌子上的状态有实时更新给当前玩家,好让当前玩家准确的选择桌子进入。
补充说明,当年写的这个性能需求写的不大对。今天也不打算修改了,维持原貌。
运行需求
- 用户界面:
- 整体风格简单,清晰,让玩家感觉安逸。
- 登录界面、注册界面、大厅界面、房间界面、桌子界面、游戏界面、逃跑提示界面。(注:省略界面图,可看后边的成品图)
- 可扩展:
- 支持以后再新增其他游戏。
- 故障处理:
- 当客户端的网络出现问题,服务器端关闭释放相应套接字,以保证服务器优先稳定运行,这样才可以保证大多数玩家的利益。
- 其他客户端的小故障均有弹出窗口提示。
产品成品图
图中标题为 Ask Game 是因为当时我的网名叫 Ask u,后者寓意自己太无知得总向大家请教各方面的问题。
注册界面:
扒了 QQ 的默认头像并做了索引编号,所以这里的头像编号对应的系统里的 QQ 头像索引号。注册界面上直接填编号,没有做头像预览。登录界面:
大厅界面:
左上角就是 QQ 默认头像。左下是房间列表,其中新手场有 3 人在线。房间界面:
进入新手场房间 1 后,看见了界面中间的桌子们,以及桌子们上坐的人。右上角是这个房间的玩家列表,其中有 2 人处于掉线状态,他们头像是灰色的。抢座位:
看见 2 号桌正 2 缺 1,抢下左边的空位,于是我的头像就上了这个座位。进入桌子坐下,桌子上的棋盘界面:
Ready 按钮按下就表示自己准备好了。开始了,黑子先下:
己方执黑子,正在等待对方第二回合落子。一方赢了,结束:
快速演示输赢,最终己方黑子赢下。右边界面可以聊天,聊天框里也会显示对战结果。下的比较持久的:
可以逃跑: