AW
AW
← BACK

象棋 Roguelike(施工中)

回合制卡牌构筑 Roguelike:用中国象棋棋子做角色与敌人,棋盘走位 + 射线穿透 + 15 层推进

Godot 4.7GDScriptDeckbuilderRoguelikeIn-Game Editor
ROLE · 独立开发PERIOD · 2026-07 起 · 64 个脚本 / 13,711 行 GDScript

FEATURES

♟️

象棋棋子即角色

马 / 炮 / 车 三套牌组,各自 80 / 70 / 100 生命与独立起始卡组(9 / 8 / 9 张)

🎯

射线与穿透瞄准

瞄准系统支持 stop_on_first 与 pierce 两种行为,AOE 模式自动转为穿透

🃏

卡牌与效果管线

效果执行器 + 条件系统 + 目标选择 + 阵型解析,卡牌全部是 JSON 数据驱动

🗺️

15 层地图推进

每层 2-4 个节点,战斗 / 商店 / 休息 / 铁匠 / 宝箱 / 事件六类节点全部有独立场景

🤖

三阶段敌人 AI

象棋攻击 → 象棋移动 → 意图锁定与执行,移动策略含逼近 / 追击 / 保持距离 / 驻守

🛠️

游戏内数据编辑器

卡牌编辑器(489 行)与敌人编辑器(1053 行,全项目最大脚本),支持增删改查与实时预览

TECH

  • ▸Godot 4.7 + GDScript:64 个脚本 / 13,711 行 / 12 个场景
  • ▸数据驱动:卡牌、敌人、角色、状态、地图配置全部为 JSON,另附编辑器可视化维护
  • ▸单元自测与调试面板:test_runner.gd 覆盖状态/伤害/遗物/游戏状态四组用例,F1-F7 调试快捷键
  • ▸无头启动实测通过:godot --headless --quit 退出码 0,主场景无解析错误

项目概览

用中国象棋棋子当角色和敌人的卡牌构筑 Roguelike:在棋盘上走位、出牌、瞄准,一层层推进 15 层地图。

目前可玩的闭环已经成立:主菜单 → 角色选择 → 地图 → 战斗/商店/休息/铁匠/宝箱/事件 → 回到地图。12 个场景全部存在且脚本完整,离场统一走淡入淡出转场。

玩法机制

棋子即身份。 三个角色各有独立的血量与起始卡组:马(80 HP)、炮(70 HP)、车(100 HP),能量均为 3。

射线与穿透。 aim_system.gd 的瞄准支持两种行为:stop_on_first 打在第一个目标上,pierce 则穿透整条射线;AOE 模式会自动转为穿透。

卡组与状态。 抽牌、弃牌、洗牌回抽牌堆的标准循环,配合力量/易伤/闪避/动量四种状态,以及燃烧这类格子状态。状态支持叠加、刷新、延长三种合并方式与按回合/按触发/永久三种衰减。

敌人 AI 分三阶段。 第一阶段按象棋规则攻击,第二阶段按象棋规则移动,第三阶段锁定并执行意图;移动策略有逼近、追击、保持距离、驻守四种。

游戏内数据编辑器

这是这个项目里工程含量最高的部分:card_editor_scene.gd(489 行)做卡牌增删改查、实时预览、JSON 预览与撤销重做;enemy_editor_scene.gd(1053 行,全项目最大脚本)按基础属性/移动/能力/回合序列四个标签页编辑敌人,配一个可点击的棋盘预览。两者从主菜单的设置入口进入,面向的是开发者而不是玩家。

真实的进度边界

这个项目还在施工中,我把边界写清楚:

  • 内容量还很少:卡牌 12 张、敌人 5 种棋子 + 1 种精英弓箭手、遗物只有 1 个。
  • 奖励池是空的:reward_pools.json 里四个角色池全是空数组,注释写着"大清洗后待重建"——打赢战斗后的选牌流程目前发不出东西。
  • 无色卡未设计:cards/colorless.json 只有一行"待设计(通用卡牌池)"。
  • 炮架机制只有底层钩子:条件层实现了"数中间单位"的判定,但没有任何卡牌接入它。
  • 角色动画只覆盖两个:炮和车有精灵动画,马(默认角色)没有精灵加载函数,会回落成文字字形「馬」。
  • 图鉴与数据不一致:图鉴里硬编码的几张无色卡和调试卡在当前数据里并不存在。
  • 资产说明:精灵素材来自现成素材包与视频抽帧,assets/pixel/ 下只有调色板文件;早期尝试过的 3D 路线(图生 3D 与 Stable Diffusion 出图)已经清理掉,assets/models/ 是空目录。

SCREENSHOTS

战斗演示

回合制棋盘战斗实机演示——角色移动、选择方向、施放卡牌、瞄准射线。