Skip to content

Latest commit

 

History

History
143 lines (106 loc) · 6.49 KB

File metadata and controls

143 lines (106 loc) · 6.49 KB

项目文档 - Sabin Rains 游戏设计

项目介绍

Sabin Rains 是在一个5x5六边形棋盘上进行的棋类游戏。本项目旨在使用 Java 程序设计语言实现一个带有用户界面的 Sabin Rains 游戏。玩家可以通过鼠标点击进行落子操作,系统会根据当前棋盘状态显示可落子和翻转提示,并最终根据棋盘状态判定游戏结果。

image-20240528205635153

游戏界面及模型

1. 棋盘设计

  • 实现工具: 使用 JLayeredPane 实现多层面板,以便图片、格子、棋子和棋盘提示相互独立地显示。
  • 绘制方法: 从棋盘中心点开始,等间隔绘制六边形来构建棋盘格子。

2. 棋子

  • 记录位置: 在绘制格子过程中记录每个格子的中心位置。
  • 点击响应: 使用鼠标点击事件检测鼠标位置,从而在相应区域绘制棋子。
  • 状态管理: 使用一个哈希表记录所有格子的状态(如:红色、蓝色、空的;可落子、不可落子、锁定等)。
  • 落子逻辑: 只有在当前位置为空且可落子时才允许落子,否则不响应。可落子和锁定状态对应棋盘提示中的标识。

3. 棋盘提示

  • ActivePanel 类: 将棋盘提示功能集中在 ActivePanel 类中,减少频繁刷新。
  • 提示种类:
    • 可落子标识(绿色小点)
    • 待落子标识(红色格子)
    • 翻转标识(高亮格子)
    • 锁定标识(灰色格子区域)
  • 逻辑实现:
    • 待落子标识:根据鼠标当前位置和棋盘点的状态判断。
    • 待翻转标识:根据鼠标当前位置对应的格子,搜索六个六边形环,记录符合翻转条件的位置并标识。鼠标点击后翻转相应点的颜色。

4. 游戏状态显示

  • 在棋盘上方显示红色棋子和蓝色棋子的数量,以及当前轮到哪一方下子。

5. 游戏结束判定

  • 根据棋盘状态(是否无处落子)判定游戏是否结束,并显示弹窗结果,判定哪一方胜出。

image-20240528205655807

游戏模型

初始化

  • 创建一个5x5的六边形棋盘,每个格子初始化为空状态,准备开始游戏。

落子

鼠标移动和点击
  • 检测鼠标移动事件,实时更新当前鼠标位置的待落子标识。
  • 当玩家点击时,检查点击位置是否为空且可落子,如果合法,则在该位置落子。
合法性检查
  • 根据哈希表记录的棋盘状态,检查当前位置是否为空且可落子。
  • 如果不合法,提示玩家或忽略点击事件。

棋盘提示

可落子和锁定标识更新
  • 每次棋盘状态变化时,更新相应位置的可落子标识和锁定标识。
待落子标识
  • 实时检测鼠标位置,更新待落子标识。
  • 落子后,清除相应位置的待落子标识。
待翻转标识
  • 实时检测鼠标位置,更新待翻转标识。
  • 落子后,清除相应位置的翻转标识。

棋子翻转

  • 根据当前棋盘状态和游戏规则,确定需要翻转的棋子。
  • 落子后,更新这些棋子的颜色。

交替落子

  • 使用一个变量记录当前轮到哪一方落子。
  • 每次成功落子后,切换到另一方。

胜负判定

游戏结束判定
  • 每次落子后,检查棋盘是否有可落子的位置。
  • 如果没有可落子的位置,游戏结束。
胜负结果显示
  • 计算红色和蓝色棋子的数量。
  • 根据数量多的一方判定胜负,并弹窗显示结果。

计时

绘制计时器
  • 在界面上方或一侧显示倒计时器,初始化为30秒。
轮流计时
  • 使用一个计时器线程或定时器,每次一方落子后,重置并开始另一方的30秒倒计时。
超时处理
  • 如果当前玩家在30秒内未落子,自动在一个随机的可落子位置落子。

通过以上精细的游戏模型设计,确保了 Sabin Rains 游戏能够准确实现所有功能,提供流畅的用户体验。

性能需求

  • 界面响应迅速,用户操作流畅。
  • 棋盘状态更新及时,提示准确无误。
  • 系统资源消耗合理,避免内存泄漏和性能瓶颈。

实现的类

  1. ActivePanel: 负责显示棋盘提示(如可落子标识、待落子标识等)。
  2. HexagenPanel: 绘制棋盘格子,记录每个格子的中心位置。
  3. ImagePanel: 显示棋盘背景图片。
  4. PointPanel: 管理每个棋子的位置和状态。
  5. StringPair: 辅助类,用于记录字符串对。
  6. MainClass: 程序入口,负责初始化游戏界面和逻辑。

类图

                                +-----------------+
                                |    MainClass    |
                                +-----------------+
                                          |
                                          v
                                +-----------------+        +-------------------+
                                |  ImagePanel     |        |    HexagenPanel   |
                                +-----------------+        +-------------------+
                                          |                          |
                                          v                          v
                                +-----------------+        +-------------------+
                                |  PointPanel     |<------>|    ActivePanel    |
                                +-----------------+        +-------------------+
                                          |
                                          v
                                +-----------------+
                                |  StringPair     |
                                +-----------------+

项目架构与设计

  1. 模块化设计: 项目采用模块化设计,每个类负责独立的功能模块(如绘制、提示、状态管理等),保证代码的可读性和可维护性。
  2. 多层面板: 通过 JLayeredPane 实现多层面板,确保各元素独立显示,避免相互干扰。
  3. 事件驱动: 使用鼠标点击事件驱动游戏逻辑,通过检测鼠标位置和棋盘状态实现落子和提示功能。
  4. 状态管理: 使用哈希表记录棋盘状态,确保状态查询和更新的高效性。

通过上述架构和设计,本项目实现了一个功能完备且用户体验良好的 Sabin Rains 游戏。