ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 Go + Walk 从零实现一个 Windows 桌面「四国军棋」:架构、棋盘图模型与「大模型对手」实战

用 Go + Walk 从零实现一个 Windows 桌面「四国军棋」:架构、棋盘图模型与「大模型对手」实战 假期心血来潮使用go语言和ai搓了一个四国军棋游戏出来。玩了下还不错有腾讯四国军棋的风格哈哈。一个用 Go 语言、参考腾讯四国军棋玩法、借助 AI 辅助开发完成的 Windows 原生桌面军棋原型。单机运行你坐 3 号位其余三家由 AI含大模型行棋。一、项目简介本项目是一个Go 语言实现的 Windows 桌面四国军棋原型主打「可运行 可复盘 可接入大模型」单机对局玩家控制下方3 号位1/2/4 号位由策略 AI 自动行棋四档难度初级 / 中级 / 高级 / 大模型完整规则自动合法布阵、道路/铁路移动、弯道拐弯、工兵全网络通行、战斗判定、行营保护、暗棋、出局与团队胜负工程完备走子记录、自动存档、复盘、单元测试、e2e、架构与需求文档、问题清单。游戏运行截图:二、技术栈类别技术 / 依赖说明语言Go 1.25go.mod声明Windows/amd64GUIgithub.com/lxn/walkWindows 原生控件Win32声明式 UIWin32 绑定github.com/lxn/winwalk 底层调用资源编译github.com/akavel/rsrc生成rsrc.syso图标/manifest/DPI表达式gopkg.in/Knetic/govaluate.v3walk 声明式数据绑定系统调用golang.org/x/sys、kernel32.dll线程锁定、Beep 音效数据格式JSON复盘文件.4gj、ai_config.json大模型OpenAI 兼容 HTTP 接口可配置 API 地址 / Key / 模型产物为单个-H windowsgui无控制台窗口的 exe。三、整体架构进程只有一个原生 Walk 窗口gui负责渲染/输入/计时/AI 调度game负责全部领域逻辑两者通过纯数据接口交互。main.go ──▶ gui/main_window.go ──▶ game/game.go ──▶ board.go / piece.go / setup.go / ai.go / replay.go │ ├─▶ replay.go ──▶ 对局_*.4gj (JSON) └─▶ gui/llm.go ──▶ ai_config.json ──▶ OpenAI 兼容接口模块职责game/board.go不可变 17×17 十字棋盘拓扑 可变棋子占位game/piece.go棋子、席位、队伍、军衔、可行动性定义game/setup.go布阵合法校验 确定性自动布阵game/game.go阶段、移动、战斗、可见性、出局、胜负game/ai.go策略 AI难度参数、走子评分、公平信息推理、Prompt 构造与解析game/replay.go走子记录、JSON 存档、复盘步进器gui/main_window.go窗口、棋盘绘制、坐标映射、人机回合调度gui/llm.go配置加载/保存、AI 设置对话框、OpenAI 兼容客户端。四、核心设计亮点1. 棋盘是「图」而不是矩形网格四国军棋的棋盘是十字形不能当成普通二维数组。项目把棋盘建模为图结构Board.passable共129 个可通行节点Board.adj保存公路边 铁路边行营、大本营、本方区域、占位分别用独立 map/数组维护铁路只在中央四角(6,6)/(6,10)/(10,6)/(10,10)形成「弯道」且每个弯道只连接相邻两方翼IsCurveCurveTurnAllowed普通棋子只能沿物理弧线转向不能从弯道直插中央。这把复杂的几何规则收敛为可测试的图算法TestRailwayTurnOnlyAtCurves、TestBombCannotCutAcrossCenterCorner等用例直接验证。2. 规则引擎可验证、可追溯每个大本营仅 1 个FlagAnchor只放军旗且对局中不可走入吃旗例外铁路不能直达普通公路处在铁路上的棋子只能沿铁路滑行仅可一步进入相邻行营或最外一排大本营唯一出口工兵可用 BFS 走通整个无阻挡铁路网络战斗判定覆盖大吃小、同级相杀、炸弹同归于尽、工兵挖雷存活、炸弹与地雷互毁、其他子触雷阵亡且地雷保留、占旗棋子永久不可移动司令阵亡后公开该方军旗位置四方连续无子可动时按剩余子力裁决Adjudicate。所有规则冲突都在doc/issues.md以C1–C11 决策逐条裁定并配有对应单测。3. 公平信息 AI不偷看底牌AI 与人类遵守同一信息边界Piece.Known只记录「通过交互揭示」的敌方棋子类型未识别棋子按剩余类型分布aiContext.unknownPool估计战斗期望走子评分综合吃子价值、向敌方大本营推进、护旗、配合对家、下一回合威胁、防循环四档难度通过参数组paramsFor控制进攻性、推进权重、安全性、配合度、噪声与随机度。// 高级 AI 参数节选 aiParams{aggression: 1.3, advance: 3.2, safety: 0.9, defense: 1.1, coop: 1.0, anticycle: 20, noise: 3, randomness: 0}4. 大模型对手OpenAI 兼容 失败回退「大模型」难度把当前席位的己方棋子、棋盘占位与合法走法渲染成 Prompt通过 OpenAI 兼容接口请求决策再把模型返回解析为合法走子配置存ai_config.jsonAPI 地址 / Key / 模型也支持环境变量FOURJUN_LLM_URL / FOURJUN_LLM_KEY / FOURJUN_LLM_MODEL网络调用放在后台 goroutine结果通过MainWindow.Synchronize安全回投到 Walk UI 线程未配置或调用失败时自动回退高级 AI保证对局不中断解析失败的走子同样回退永不产生非法操作。5. 复盘系统重放复用同一套规则每步追加MoveRecord席位、起止坐标、公开交互文本GameRecord含初始布阵 全部走法 结果序列化为 JSON 的.4gj复盘时Replay重新施加历史走法重建局面因此复盘与真实对局完全一致复盘阶段所有棋子类型公开支持上一步/下一步/自动播放/点击跳转。6. 原生 GUI双缓冲自绘棋盘用CustomWidget的PaintBuffered双缓冲手绘InvalidatesOnResize保证缩放时整块重绘通过fitImage / nodePoint / pointToNode完成「棋盘图片像素坐标 ↔ 棋盘节点坐标」双向映射鼠标点击精准落子按席位投影可见性对手暗棋画?走子/战斗有圆环与连线动效并用kernel32!Beep播放轻量音效窗口内嵌菜单游戏 / 难度 / 复盘 / 设置。五、工程质量这不是一个「一次性 demo」工程化配套齐全测试game/game_test.go、ai_test.go、replay_test.go、coverage_test.go、gui/helpers_test.go、gui/llm_test.go、e2e/e2e_test.go覆盖拓扑、布阵、战斗、可见性、铁路阻挡、复盘一致性等静态检查go vet ./...文档体系doc/requirements.md需求、doc/process.md生命周期/流程、ARCHITECTURE.md架构、doc/test-and-traceability.md测试与需求追踪、doc/release.md发布、doc/rules.md规则、doc/design.md愿景设计、doc/issues.md问题与决策清单问题闭环每个已修问题都记录「现象—根因—修复—验证」例如最近修复的ISS-030点击「开始游戏」后棋盘底部出现「多渲染一层」的重复区域根因是窗口未指定初始Size、MinSize触发 Windows 强制增高导致 Walk 表单proposedSize陈旧、客户区被算小 27px让出的底部条带无人重绘——通过显式指定窗口Size解决。六、编译与运行# 1. 依赖校验 go mod download go mod verify ​ # 2. 检查 go test ./... go vet ./... ​ # 3. 编译Windows GUI 无控制台 go build -ldflags-H windowsgui -o Four-PlayerArmyChess.exe . ​ # 4. 运行保持 ico/01-棋盘.jpeg 位于 exe 旁的 ico 目录 .\Four-PlayerArmyChess.exe要求Windows 系统 Go 1.25.x。七、后续规划网络对战、手动布阵、回合计时、历史战绩、基于搜索minimax的更强化 AI、LLM 公平信息策略钩子等。八、项目地址GitHubGitHub - zishen/Four-PlayerArmyChess: 四国军棋游戏 · GitHub欢迎 Star、Fork、提 Issue。如果这个项目对你有帮助也欢迎在评论区交流 Go 桌面开发、棋类规则建模与「大模型接入游戏 AI」的实践。
返回列表