文章目录
  1. 1. 前言
  2. 2. 工作室介绍
  3. 3. 我的项目背景简介
  4. 4. 需求分析
    1. 4.1. 目标
    2. 4.2. 运行环境
    3. 4.3. 条件与限制
    4. 4.4. 数据词典
    5. 4.5. 功能需求描述
    6. 4.6. 性能需求
    7. 4.7. 运行需求
  5. 5. 产品成品图

前言

前阵子我在将自己以前的博文都搬到新的用 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 按钮按下就表示自己准备好了。

  • 开始了,黑子先下:

    己方执黑子,正在等待对方第二回合落子。

  • 一方赢了,结束:

    快速演示输赢,最终己方黑子赢下。右边界面可以聊天,聊天框里也会显示对战结果。

  • 下的比较持久的:

  • 可以逃跑:

文章目录
  1. 1. 前言
  2. 2. 工作室介绍
  3. 3. 我的项目背景简介
  4. 4. 需求分析
    1. 4.1. 目标
    2. 4.2. 运行环境
    3. 4.3. 条件与限制
    4. 4.4. 数据词典
    5. 4.5. 功能需求描述
    6. 4.6. 性能需求
    7. 4.7. 运行需求
  5. 5. 产品成品图