在浏览器中免费玩,无需注册。有两个版本:
- 原版,更难 (itch.io,无广告): https://svitsgames.itch.io/edgy-fox
- 更易玩的版本 (Playgama,带广告): https://playgama.ai/play/ihafoukuma
我花了大约两个月使用 Claude Code 构建 Edgy Fox。整个关卡都在屏幕的边缘:狐狸会自行在边缘跑动,你只有两个操作,轻点跳跃,长按停止。中间的野猪和鹿会在中心弹跳,hares(兔子)和鸟会沿着边缘向你袭来,每个季节都以Boss结尾。死亡结束本局,但你的硬币和升级保持。冬季结束后,新的一年开始,稍微难一点,并有自己的变化。游戏可在手机或电脑上使用,支持竖屏或横屏,支持触控、鼠标、键盘或手柄。
这两个版本是我最想谈论的,因为它们直接来源于 AI 工作流。下面会有更多说明。
工作如何拆分
我是一名拥有 15 年以上经验的 Web 开发者,30 多年来玩游戏,从 Tetris 和 NES 到现代 AAA 标题。我热爱视频游戏,它们是我最喜欢的媒体形式。于是我构思了游戏玩法,做出设计决定,编写 Claude 遵循的规则,审查它的改动,并在手机、电脑以及手柄上玩每个构建。当感觉不对时,就会回到 Claude。Claude 大部分负责打字:约 530 条约 600 条提交都由它共同署名。我理解每行代码,遗憾的是这点。
模型使用 Claude Opus 5,随后在主会话中使用 Opus 5.5,子代理使用 Sonnet 5.5。
保持项目按计划进行的关键因素
最重要的是保持决策在文件中而非聊天。有一个简短的 CLAUDE.md 加上 15 条规则文件(设计、布局、资产、授权、门户等),每条规则只在 Claude 打开它覆盖的文件时加载,因此上下文保持小。每条决定都会标记日期和原因。这样,当新会话想要“改进”我们已经决定的内容时,原因就在旁边,我们不会再为同一件事争论。大多数时候。
第二个因素是将游戏规则与引擎分离。所有逻辑都是纯 TypeScript,不使用 Phaser,因此 610 条检查在 Node 中运行真实游戏代码,几秒内完成,无需浏览器。Claude 在每次改动后运行它们,并且必须用文件、行号或命令输出来支持每个主张。“测试通过”只有在输出表明时才算数。
然后是平衡机器人,它们在无头 Chromium 中运行真实游戏。我的第一代机器人反应完美,我根据机器调节游戏,结果太难。现在它们延迟 220 到 380 毫秒,且点击不精准,更像手机上的拇指。不过,机器人不是玩家。
小型组件:两个子代理(一个根据我们已商定的计划编写代码,另一个检查构建是否符合门户的要求;大多数改动在主会话中更快,所以只有在必要时才使用它们)以及两个技能(一个用于发布:大小限制、资产来源、许可证声明、压缩包;另一个在我在设备上玩后进行难度调整)。永远不要在 zip 文件名中使用特殊字符,点号算作一个字符。每次我犯这种愚蠢错误时都会重新发现。
让 Claude 读取玩家数据
游戏首先在 Playgama 的沙箱中发布,Playgama 提供 MCP 服务器,使 Claude 能上传构建、设置排行榜并自行读取玩家遥测数据。这形成了一个循环:Claude 读取数字,我们寻找玩家流失的地方,我决定做出改动,Claude 构建它,下一版再测量。自发布以来的大部分更新都来源于此:
- 大多数新玩家在教程或首次死亡时就退出。教程被缩短,新玩家在第一季(春季)前无法在 Boss 之前失去本局。
- 三分之一的玩家在“长按停止”时卡住,因为长按左键会跳跃。现在改为长按即停止,像手机上长按一样。
- 早早离开的玩家在开始前几秒内未按任何键,因为第一个需要跳跃的障碍大约在 5 秒后出现。现在改为 2 秒。
- 有些玩家在教程说“长按停止”时保持不动。现在教程不再等待:如果在几秒内你没有执行动作,它会为你执行并继续。它也使用更少的文字,第一个 Boss 在完成约 45 秒后出现。
为什么有两个版本
数据的引导也意味着简化游戏:速度提升更慢,动物更少,春季更难失去。这是 Playgama 版的特点。原版更难,老实说我更喜欢它,但休闲浏览器玩家不同意。因此原版上传到 itch.io:速度提升 50% 更快,夏季和冬季动物更多,第一年后每个季节都采用冬季的阵容并额外加入野猪。
代码上,两个版本是同一核心的分支,每条修复先合并进核心,再分别发布到各分支。Claude 处理合并,规则文件规定在冲突时各分支保留的数值。
这部分我一直在思考。当代理读取遥测数据时,每条建议都会推动游戏向第一分钟玩家流失的方向。这很有用,但如果全部遵循,游戏会变成完全不同的东西。保留两个版本是我避免做出选择的方式。
工具与资产
- Phaser 4.1(游戏引擎),TypeScript,Vite
- Playwright:用于 headless Chromium 的机器人,以及 Safari‑like 浏览器的 WebKit 烟测试
- Python 与 Pillow、ffmpeg:资产管道,负责裁切、 recolor、压缩艺术和音频(Claude 编写脚本)
- Playgama Bridge SDK(Playgama 版):保存、广告、排行榜和成就
艺术和音频不是生成的,而是现成素材:Craftpix 像素艺术,Kenney 音效,四条由 Sonican 从 Pixabay 提供的 pizzicato 曲目,以及 Jersey 10 字体。因此,本项目的 AI 部分是代码、工作流以及数据读取。狐狸的 22 种颜色都是同一张精灵表的调色结果。
我喜欢和不喜欢的地方
使用 Claude Code 制作小游戏非常有趣。就像与一位速度极快、能快速阅读文档并检查代码的配对编程伙伴。我需要审查它写的内容(说实话,可能不是每行,但至少每个函数或逻辑部分),它并不完美,但擅长遵循规则并在规则明确后保持代码整洁。
我不喜欢为休闲浏览器玩家削弱游戏。指标快速反馈:大多数玩家在教程中就退出(哈哈)。这对我的一个好教训,也正是原版保留在 itch 上的原因。
给你的问题
- 如果让代理读取你的游戏分析数据,如何防止它把游戏“沙化”到只保留第一分钟玩家的版本?
- 如何防止设计决策在不同会话之间漂移?规则文件配日期对我很有效,我也想听听其他设置方案。
如果你尝试玩一玩,请告诉我你玩了哪个版本、在哪里停止,以及觉得太难还是太易。谢谢!
评论 (0)