键盘敲击练习软件
- 技术栈: Java Swing。
- 主题: FlatLaf (现代化深色主题)。
- 面板:
- 登录: 输入昵称,自动显示 ID。
- 大厅: 创建主机、加入游戏、单人练习、查看历史。
- 游戏: 单词掉落区域、分数显示、对手状态、防守墙。
- 历史: 显示过往对战记录。
- 类型: SQLite (
keystorm.db)。 - 表结构:
users: id (主键), ip, high_scorescores: id (主键), user_id, score, date, opponent_id, result
- 协议: TCP Socket。
- 模式: 1v1 对战 (Host vs Client)。
- 数据: 使用序列化对象
Packet传输状态。 - 同步: 互相发送存活状态、分数和单词列表(用于幽灵显示或作弊检测,目前主要用于状态同步)。
- 单词: 从文本文件加载。
- 机制:
- 单词以不同速度掉落。
- 匹配输入字母消除单词。
- 单词触底扣除墙壁生命值(宽度或高度)。
- 墙壁消失则游戏结束。
- 速度控制: 支持调整掉落速度。
- 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分)