
一键开通华为云码道 CodeArts 代码智能体https://developer.huaweicloud.com/codeartsco.html?sourcedmzntgwatomgit1sourceaddmzntgwatomgithd作品介绍本文记录了作者仅用6分37秒通过华为云码道CodeArts代码智能体从零开发出一款可玩的中世纪奇幻回合制战棋小游戏的全过程。借助AI精准需求澄清、分轮交付可运行版本、自动生成测试用例及代码修复能力作者以“产品经理验收员”角色高效完成《战棋游戏-王国之战》核心功能开发BFS寻路、兵种克制、地形加成、敌方智能评分与双人对战。项目最终实现完整交互逻辑与视觉呈现形成了可以直接玩的游戏应用验证了AI辅助编程在复杂游戏开发中的巨大潜力。一、起因一个还没想清楚就开干的想法我是写 Java 和 Go 出身的前端属于能跑就行水平。某个周末下午重温《火焰纹章》突然就较上劲了能不能用纯前端技术从零搓一个能玩的回合制战棋冷静下来想了想这活儿没那么简单。寻路要做移动范围计算兵种克制和地形加成牵一发动全身敌方 AI 得有个像样的决策逻辑还有选中、移动、攻击、取消这一整套交互。纯手写保守估计两三天而且大概率写到一半就失去耐心。正好手头在用华为云码道 CodeArts 代码智能体我决定把整个开发过程交给它自己只当产品经理 验收员顺便看看 AI 辅助编程到底能顶到什么程度。这篇文章就是那次实验的完整记录——包括踩的坑。它使用起来非常简单在Atomgit的工作台直接集成了只需要登录就可以用了。二、第一轮对话它没急着写代码我的需求就一句话“帮我开发一个战棋小游戏角色按回合制行动发我可以玩的网页版。”说实话我本来做好了它直接糊一坨代码过来的心理准备。结果它先反问了我三个问题题材中世纪奇幻、现代军事还是科幻机甲玩法深度休闲简化版、经典战棋兵种克制 地形加成还是带技能装备的深度策略版对战模式单人打 AI还是双人同屏这三个问题问得挺内行。战棋游戏 “做多重” 完全取决于这几个选择选错了后面全是返工。我选了中世纪奇幻 经典战棋 单人打 AI——经典款规则完整又不过分复杂适合当第一版。需求敲定后它直接甩出一份游戏设计文档两块内容我印象很深兵种克制闭环剑士克枪兵、枪兵克骑士、骑士克剑士弓手克法师法师打骑士还几乎无视防御。有闭环就有博弈这比数值堆高就赢有意思得多。地形效果表地形防御加成移动消耗特殊效果平原01无森林22适合驻守山地33最佳防御地形河流04行动艰难村庄11每回合回血核心操作循环也在这轮定死了选中单位 → 移动 → 攻击/治疗 → 待机 → 结束回合。后面四轮迭代全是在这个骨架上长肉。三、三轮迭代每个版本都拿得出手这是我这次体验里最满意的一点它不是一口气糊完而是每轮交付一个能玩的版本。v1 基础版12×8 棋盘、六大近战远程兵种、BFS 寻路、战斗判定、敌方 AI单文件 HTML浏览器打开就能玩。v2加了治疗师不能攻击、能奶人、AI 会优先治疗残血队友、三档难度、三张地图河谷对峙、幽暗密林、乱石峡谷。v3六个主动技能 经验升级系统。剑士疾风连斩、骑士铁骑冲锋、法师炎爆术这些技能一一配齐击杀和受击都攒经验升级加攻防血——火焰纹章那个味儿一下就出来了。v4本地双人对战。蓝红双方轮流执军右侧面板和战报跟着阵营切换。最后 v4 交付时我特意留意了一眼运行数据整轮任务耗时 6 分 37 秒输入 477.6K token输出 2.6K token5 个子任务全部完成。附带的验证结果里JS 语法校验通过无头浏览器实机截图确认双人模式 UI 正常。这个自己验证完再交付的习惯比代码本身更让我安心。四、关键代码拆解单文件 HTML3000 多行挑三段核心逻辑说说。4.1 BFS 寻路战棋的灵魂。计算单位在移动力范围内可达的所有格子地形不同耗的移动力不同被占的格子直接跳过functionbfsReach(unit){constresnewMap();res.set(key(unit.c,unit.r),{cost:0,prev:null});constq[{c:unit.c,r:unit.r,cost:0}];while(q.length){constcurq.shift();for(const[dc,dr]ofDIRS){constnccur.cdc,nrcur.rdr;if(!inB(nc,nr))continue;if(unitAt(nc,nr))continue;// 有单位占据constkkey(nc,nr);constcostcur.costmoveCost(unit.type,nc,nr);if(costunit.mov)continue;// 超出移动力剪枝if(!res.has(k)||costres.get(k).cost){res.set(k,{cost,prev:[cur.c,cur.r]});q.push({c:nc,r:nr,cost});}}}returnres;}值得一提的是骑士的moveCost特判——马进不了山地森林这类规则写在算法里的细节比界面华丽更能体现战棋的味道。4.2 伤害计算一条公式串起克制、暴击、地形、魔法四大要素functioncalcDamage(atk,def,opts){optsopts||{};constadvatk.adv.includes(def.type);constcritChance0.08(atk.typesword||atk.typeknight?0.04:0);constcrit!opts.noCritMath.random()critChance;letdefValdef.def(opts.ignoreTerrain?0:TERRAIN[MAP[def.r][def.c]].def);if(atk.magic)defValMath.floor(defVal*0.3);// 魔法几乎无视防御letdmgatk.atk*(adv?1.5:1)*rand(0.85,1.15)*(opts.mult||1)-defVal;if(atk.sideenemy)dmg*DIFFICULTY[diffKey].aiDmg;dmgMath.max(1,Math.round(dmg));if(crit)dmgMath.round(dmg*1.5);return{dmg,crit,adv:adv!atk.magic};}±15% 的随机波动是故意的。战棋如果每刀伤害都一样玩家很快就算成 Excel 了留一点运气成分残血反杀的戏码才有登场机会。4.3 敌方 AI评分 阈值AI 每回合遍历所有可达格子和可攻击目标按伤害 击杀奖励 暴击加成打分挑分最高的下手constkills(t.hpd.dmg?diff.killBonus:0);constscored.dmgkills(d.crit?8:0);困难难度下还有个小心机只有当技能评分超过普通攻击评分的 85% 时才放技能。不然 AI 会无脑开大打着像挂机。这条阈值是我在测试里被 AI 连续三回合放技能磨死后让它自己调的——调完确实像个人了。五、跑起来的样子开始菜单把规则讲得很清楚兵种克制、地形效果、治疗师定位新玩家不用翻文档。模式、难度、地图三组选择一目了然。进入战斗就是经典的战棋布局左侧 12×8 棋盘森林、河流、村庄都有独立手绘风格的贴图右侧是部队列表、血条、经验条和战报日志。蓝方六人守左红方压右中间一条河把战场劈成两半——想过河就得付出每格 4 点移动力代价。选中单位是第一个要舒服的交互。点一下剑士可达格子全部染蓝一目了然技能瞄准也有独立状态。点「技能」按钮后面板会给出技能说明和操作提示右键随时反悔这套选中 → 高亮 → 确认 → 可取消的交互节奏是我玩过所有战棋游戏里最花时间打磨的部分码道一次就给对了。六、实测数据AI 辅助到底省了多少按我自己手动开发同规模项目的经验做了个对照估算环节纯手动开发华为云码道辅助我的感受需求澄清自己脑补写一半推翻重来1 轮对话三个问题定清楚省的不是时间是心态架构设计2~3 小时画图写文档10 分钟出 GDD文档质量够直接当博客素材编码实现800~1200 行写一天3000 行单轮 6 分 37 秒量级差距代码还能跑测试验证手写用例 2~3 小时22 项断言自动生成100% 通过覆盖度比我自己写的高Bug 修复逐行排查描述现象AI 定位修复它自己犯的错它自己改最快总计约 8~10 小时约 3 小时含人工验收一半以上的时间省下来了要说最大的变化不是代码写得快了而是注意力不再被打断。以前写前端是写两行代码、查一次文档、调一次样式来回横跳现在这些全压缩在一个对话流里我只负责想清楚要什么和验收拿到什么。当然那 3 小时里我并不闲着。每个版本我都会真的打开玩几局——AI 说测试通过是一回事你自己被敌方 AI 堵在河谷里打是另一回事。七、真人实测我替你们先打了一局为了写这篇博客我特意用普通难度完整跑了一局把过程截了下来。以下都是真实对局画面不含摆拍。开局双方隔河对峙。我按教科书打法推进剑士顶前面弓手和法师跟在后排治疗师缩在最后。红方则不紧不慢地压过来先看一眼右上角蓝 5红 6。是的我的法师已经在第一回合的交换里没了——它贪了一格输出位被红方弓手和法师集火两轮齐射送走连技能都没来得及放。AI 懂得抓脆皮这给我敲了第一记警钟。第二回合我方弓手摸到 (6,1)红方枪兵近在咫尺。选中、进射程、开火——这一箭打掉了红方枪兵一小截血。有意思的是下一回合红方治疗师居然摸上来把枪兵的血奶了回去。战报里那条「红方治疗师为「枪兵」恢复了生命」让我盯着屏幕愣了两秒——我根本没告诉过它残血单位要优先保护这种策略它自己会。而我的弓手没这么好命被红方追着打到剩 2/20蜷在河边动弹不得打到第三回合我就停手了——再打下去是给 AI 送人头。但短短三回合已经足够说明问题普通难度的 AI 会抢地形、集火脆皮、奶残血你能在它的走位里读出意图两个字。这就是前面那个 85% 技能阈值和评分模型在实际对局里的样子。八、主要BUG解决顺利的部分说得够多了说说翻车的。一截图里藏着原始 HTML 标签。写这篇博客重玩截图时我在开局截图的角落发现一行奇怪的文字第 1 回合 · b class蓝方/b行动——回合开始的 toast 提示用了textContent渲染代码里却塞了 HTML 标签标签原样糊在了玩家脸上。这个问题之前所有自动化测试都没报错因为语法没错、逻辑没错纯粹是人和机器对这段文字的理解不一致。修复只要一行把标签从 toast 文案里去掉。教训视觉回归测试测不出文案不该有标签这种事人类的眼睛仍是最后一道工序。二沙盒测试里的await不可全信。22 项断言在 Node.js vm 沙盒里全绿但循环内的异步行为和真实浏览器有细微差异。最后的解法很朴素每个测试跑之前重置一遍游戏状态。教训沙盒全绿只是及格线真机才是考场。三Git 凭据过期。往 AtomGit 推代码时之前保存的个人 Token 失效了折腾了一会儿才推上去。教训正经项目老老实实用部署密钥别拿个人 Token 凑合。九、想自己改速查手册代码全部表驱动二次开发门槛不高加新兵种在TYPES里加属性定义SKILLS里加技能ICONS里配个图标就行核心逻辑一行不用动。加新地图往MAPS数组里塞一个对象地形用数字表示——0 平原、1 森林、2 山地、3 河流、4 村庄、5 岩石。调难度DIFFICULTY里三个参数管到底敌方人数5/6/7、AI 伤害系数0.78/1.0/1.18、治疗概率40%/80%/100%。再往后我打算加音效开关和关卡编辑器远程联机WebSocket也在清单上做完再写一篇。总结一个周末一句话需求四轮迭代一款有兵种克制、地形博弈、技能、养成和双人模式的战棋游戏。搁去年我不敢想这事能在一个周末内以可玩的完成度交付。用下来我对 AI 辅助编程的理解是它不是替你写代码的打字员而是把想和做之间的距离压短了。需求澄清阶段它会逼你把模糊的想法说清楚实现阶段它把重复劳动全包了验收阶段它还自带测试和截图。人真正要做的只剩两件事——想清楚要什么以及保持怀疑。对了如果你也做了什么别只让它躺在本地。传上 AtomGit写篇博客哪怕被人指出十个 bug也比无人问津强。开源仓库https://atomgit.com/wdracky/walkchess在线体验浏览器直接打开games/tactics/index.html零依赖即开即玩。华为云码道https://developer.huaweicloud.com/codeartsco.html?sourcedmzntgwatomgit1sourceaddmzntgwatomgithd本文为原创内容首发 CSDN。转载请注明出处。