通过纸牌游戏来解密如何用码道快速开发一款零Bug软件
我们用AI Coding工具可以快速开发一款软件,但以下情形是我们开发完后经常遇到的情况:
1)运行起来总有些功能与需求不符合;
2)总有些功能多跑几遍会出一些意外错误;
3)出现异常时,想分析原因,又没有问题现场和日志,难以给AI Coding工具描述清楚问题;
此时,我们会很懊恼,难怪有人说AI编程5分钟写完代码,但需要5天来调试bug。我们该如何来解决这个问题呢?我最近有个实践经验分享一下。
在我们老家有一款纸牌游戏非常流行(名称叫据板,也叫王三八二一,规则与斗地主接近但又不同),每次只能过年回家时可以玩,华为云码道可以5分钟开发一款纸牌游戏后,我试着用码道做了一遍,效果果然很好,只需要把出牌规则写清楚后,它就能开发出来。但玩了几局后有点沮丧,有时候NPC出牌不按规则来,有时候积分不按规则来,有时候NPC出牌死守规则不够智能,导致我很想把代码全部删除重来。
在重来的时候,我采用了Harness工程思想,给AI加上约束系统:日志系统,记录牌局所有操作信息;测试系统,自动测试游戏引擎API和前端页面;出牌规则系统,明确出牌规则;智能出牌系统,指导NPC能够智能出牌。有了这些系统后,码道再开发游戏时,就规整多了。

juban-game-v2/
├── src/
│ ├── rules/ ← 出牌规则系统(纯函数,零依赖)
│ │ ├── types.ts 类型/枚举/常量 (Suit/Rank/Card/Pattern/Phase/BaoType)
│ │ ├── deck.ts 牌组创建/洗牌/发牌
│ │ ├── pattern.ts 牌型识别/管牌判断/合法出牌搜索
│ │ ├── validator.ts 出牌验证/叫门验证/包牌验证
│ │ └── index.ts 统一导出
│ │
│ ├── ai/ ← 智能出牌系统(仅依赖rules)
│ │ ├── decompose.ts 手牌分解/难度评估
│ │ ├── strategy.ts 自由出牌/跟牌/叫门/角色判定
│ │ └── index.ts
│ │
│ ├── logger/ ← 日志系统(零业务依赖)
│ │ ├── types.ts LogLevel/LogEntry/LogTransport
│ │ ├── logger.ts Logger类/级别控制/correlationId/子logger
│ │ ├── transports.ts Console/File(轮转)/Memory(查询)
│ │ └── index.ts
│ │
│ ├── evaluator/ ← 测试评估系统(零业务依赖)
│ │ ├── types.ts TestSuite/TestCase/RunResult
│ │ ├── assertions.ts assertEqual/assertTrue/assertZeroSum等12个断言
│ │ ├── runner.ts describe/it/beforeEach/afterEach + async run()
│ │ ├── reporter.ts printReport/jsonReport/printEvaluation
│ │ └── index.ts
│ │
│ └── game/ ← 游戏引擎(编排rules+ai+logger)
│ ├── engine.ts GameEngine全流程(开局→表态→叫门→出牌→结算)
│ └── index.ts
│
├── tests/ ← 测试用例(使用evaluator系统)
│ ├── rules/ 36项: 牌组/牌力/自然序列/牌型识别/管牌/验证
│ ├── ai/ 12项: 分解/自由出牌/跟牌/角色/紧迫度
│ ├── game/ 12项: 开局/表态/包牌/自动对局/零和/结算
│ ├── logger/ 12项: 级别控制/模块/cid/查询/结构化
│ ├── evaluator/ 7项: 断言库自身验证
│ ├── integration/ 3项: 50局批量/30局零和/100局平均步数
│ └── run-all.ts 统一入口
代码目录好看是其次,最核心的威力是,我们可以让码道自己反复运行和测试这个纸牌游戏,直到它修复所有bug,我们再去玩几局,坑先让AI替我们趟光。

如果我们觉得测试3局不可靠,没关系,我们可以让AI测试10局,甚至100局,反正AI在哪自己打牌,我们不用管,等他打的一点问题都没有了,我们再上。


我们还可以让码道开发一个出牌策略评分系统,用于对NPC出牌策略进行打分(防止NPC太笨)。我们可以要求码道每次打分后发现低于90分,需分析日志,优化NPC出牌策略,直到高于90分,这样的NPC才有资格跟人类同台竞技。

等AI打累了,找不到bug了,且评分都在90以上时我们再上,这下子游戏没有bug了,我们不会感到沮丧了,只会越打越兴奋 :)

- 点赞
- 收藏
- 关注作者
评论(0)