通过纸牌游戏来解密如何用码道快速开发一款零Bug软件

举报
deli007 发表于 2026/05/18 18:07:08 2026/05/18
【摘要】      我们用AI Coding工具可以快速开发一款软件,但以下情形是我们开发完后经常遇到的情况:1)运行起来总有些功能与需求不符合;2)总有些功能多跑几遍会出一些意外错误;3)出现异常时,想分析原因,又没有问题现场和日志,难以给AI Coding工具描述清楚问题;     此时,我们会很懊恼,难怪有人说AI编程5分钟写完代码,但需要5天来调试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了,我们不会感到沮丧了,只会越打越兴奋 :)


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。