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 风格棋子。 ![logo](https://static.pigsec.cn/wp-content/uploads/repos/cas/ed/ed61e4c3fa38b745e342754a11f4f6674240b042bc377fcd5b0acabde1194f35.png) 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, 围棋, 域名枚举, 桌面游戏, 游戏逻辑