TheYellowDuck/go-board-game
GitHub: TheYellowDuck/go-board-game
基于 Java 和 Processing 构建的全功能 19×19 围棋桌面游戏,支持中国规则计分、打劫检测和 3D 风格棋子渲染。
Stars: 0 | Forks: 0
# 围棋
一款完全可玩的 19×19 围棋游戏,使用 **Java** 和 [Processing](https://processing.org) 库构建。它强制执行中国规则,处理所有复杂的游戏逻辑(打劫、自杀、通过 BFS 气数检查进行棋串提子),并渲染具有实时悬停反馈的平滑 3D 风格棋子。

https://github.com/user-attachments/assets/b50b9cbb-6e3c-4c03-96b8-1c9e5ed455c8
## 概述
本项目将古老的围棋策略游戏实现为一个独立的桌面应用程序。它强制执行中国规则计分,处理所有边缘情况的逻辑(打劫、自杀、棋串提子),并渲染具有实时悬停反馈的平滑 3D 风格棋子——基于 Processing 的 Java2D 渲染 pipeline 构建。
## 功能
- **中国规则** — 面积计分(棋子 + 实空),白方贴目 7.5
- **提子检测** — 针对单个棋子和相连棋串进行 BFS flood-fill 气数检查
- **打劫规则** — 拒绝会重复上一棋盘状态的下法
- **自杀防止** — 非法的自杀下法在落子前会被阻止
- **Pass & Reset** — 随时可以 Pass 跳过回合或重置游戏
- **游戏结束** — 连续两次 Pass 将触发自动计分并宣布获胜者
- **实空可视化** — 游戏结束时,空交叉点会被标记,以显示每位玩家的计分区域
- **3D 棋子渲染** — 每颗棋子均带有阴影、径向渐变和高光层进行绘制
- **悬停预览** — 半透明的幽灵棋子跟随光标,实现精准落子
- **应用图标** — 在窗口、任务栏和 macOS Dock 上显示自定义 logo
## 工作原理
棋盘状态和规则存在于 `Go` 逻辑类中,与处理所有 Processing 渲染和输入的 `Sketch` 类保持独立。提子通过 **BFS flood-fill** 算法解决:当落下一颗棋子时,每个相邻的敌方棋串都会被扩散以计算其气数,任何气数为零的棋串都会被提掉。同样的气数检查应用于刚落下的棋子,以强制执行**自杀防止**。**打劫规则**通过截取上一棋盘状态的快照,并拒绝任何会重现该状态的下法来实现。
在游戏结束时(连续两次 Pass),引擎会执行**中国规则面积计分**——计算每位玩家的棋子数加上他们完全包围的空白实空,为白方加上 7.5 的贴目,并宣布获胜者。棋子被渲染为分层的 2D 图元(投射阴影、径向渐变主体、高光)以呈现 3D 效果,同时半透明的幽灵棋子会追踪光标以实现精准落子。
## 展示的技能
- 面向对象设计 — 游戏逻辑 (`Go`) 与渲染/输入 (`Sketch`) 分离
- 游戏规则引擎 — 具有中国规则面积计分和贴目的完整围棋规则集
- BFS flood-fill — 单个棋子和相连棋串的气数/提子检测
- 图连通性 — 扩散相邻棋串以评估提子
- 打劫规则检测 — 拒绝重复上一棋盘状态的下法
- 自杀落子防止 — 非法的自杀下法在落子前被阻止
- 实空计分 — 用于终局面积计分的封闭区域检测
- 自定义 2D 渲染 — 分层的 3D 风格棋子(阴影、径向渐变、高光)
- 交互式 UI — 实时悬停的幽灵棋子预览
- 游戏状态管理 — 回合顺序、Pass、重置和自动结束检测
- Processing 框架 — 带有 Java2D 渲染器的 `PApplet`
- 应用程序打包 — 窗口/任务栏/Dock 图标和可运行的 JAR
## 技术栈
- Java 17
- Processing (`PApplet`,Java2D 渲染器;`core.jar`)
- JOGL / GlueGen(Processing 附带的捆绑原生库,用于提供跨平台支持)
- 打包为可运行的 JAR (`Go.jar`)
## 演示与链接
- ⬇️ [下载最新构建版本](https://github.com/TheYellowDuck/go-board-game/releases)
## 快速开始
需要 Java 17 或更高版本。
从 [Releases](https://github.com/TheYellowDuck/go-board-game/releases) 下载 `Go.jar` 并运行:
```
java -jar Go.jar
```
### 从源码构建
```
javac --release 17 -cp "lib/core.jar:lib/gluegen-rt.jar:lib/jogl-all.jar" -d bin src/Go/Go.java src/Go/Sketch.java
```
标签:3D渲染, Processing, 围棋, 域名枚举, 桌面游戏, 游戏逻辑