Skip to content

Latest commit

 

History

History
59 lines (49 loc) · 3.49 KB

File metadata and controls

59 lines (49 loc) · 3.49 KB

键盘敲击练习软件

需求规格说明书

1. GUI 界面

  • 技术栈: Java Swing。
  • 主题: FlatLaf (现代化深色主题)。
  • 面板:
    • 登录: 输入昵称,自动显示 ID。
    • 大厅: 创建主机、加入游戏、单人练习、查看历史。
    • 游戏: 单词掉落区域、分数显示、对手状态、防守墙。
    • 历史: 显示过往对战记录。

2. 数据库

  • 类型: SQLite (keystorm.db)。
  • 表结构:
    • users: id (主键), ip, high_score
    • scores: id (主键), user_id, score, date, opponent_id, result

3. 网络通信

  • 协议: TCP Socket。
  • 模式: 1v1 对战 (Host vs Client)。
  • 数据: 使用序列化对象 Packet 传输状态。
  • 同步: 互相发送存活状态、分数和单词列表(用于幽灵显示或作弊检测,目前主要用于状态同步)。

4. 游戏核心

  • 单词: 从文本文件加载。
  • 机制:
    • 单词以不同速度掉落。
    • 匹配输入字母消除单词。
    • 单词触底扣除墙壁生命值(宽度或高度)。
    • 墙壁消失则游戏结束。
  • 速度控制: 支持调整掉落速度。

5. 多线程

  • UI 线程: EDT (Event Dispatch Thread)。
  • 游戏循环: 独立线程更新物理逻辑。
  • 生成线程: 独立线程生成单词。
  • 网络线程: 独立线程监听和发送数据。 6 比赛页面,两种设计方案: 1)比赛页面只显示自己的游戏界面,对手只显示积分的更新及用户状态。 2)比赛页面同时并排显示自己和对手的游戏界面,同时显示对手积分。 游戏策略:当一个游戏玩家积分每增加100分,则对手的页面上需要立刻产生一个新的单词,记为进攻。此单词出现,不影响原单词生成的时间安排。 7 游戏结束页面,显示该次练习用户得分,如果为比赛状态,则显示用户得分和对手得分,祝贺胜利方。 8 成绩查询页面,可以查询自己练习记录,以及自己进行的比赛记录。

联网协议: 1网络建立连接时,需要传输的数据是用户ID,传输用户状态(缺省为0,表示在线)。 2点击比赛开始,用户更新用户状态为1,表示比赛准备,同时向对手发送信息,数据为用户ID和用户状态字,循环发送该信息,直至接收到对手发出比赛准备。当用户接收到对手发来的用户状态字为1(比赛准备时),更改用户状态字为2,表示比赛进行,同时用户方开始游戏。当用户防守墙全部失守时,用户更改用户状态字为3,表示比赛结束,同时显示比赛结束页面。 3比赛开始后,每隔1秒进行一次数据传输。 4比赛进行时的数据传输,每一次传输,先传输用户ID,再传输用户状态字,再传输当前用户页面上的单词列表(每个单词的内容,位置),再传输进攻标志(0代表无进攻,1代表现在正在进攻),最后传输用户积分。 5 当传输的数据中对方用户状态字为3时,结束比赛。

得分规则(满分100分): 1 及格(60分):完成单词生成(10分),单词下落(10分),键盘敲击监视(10分),单词核销(10分),积分记录(10分),游戏结束判定(10分)。 2 数据库功能(10分):用户注册和登陆(5分),成绩查询(5分) 3 网络通信功能(30分):网络建立连接(5分),比赛积分及用户状态更新(10分),对手界面显示(15分)