原文给出了结合 Claude Code 与 Godot 命令行测试的具体工作流,读者可据此掌握让 AI 辅助开发游戏的实操方法。
如何用 Claude 构建你的第一款电子游戏
Godot 4.7.2 于 2026 年 8 月 18 日发布。它是免费的,采用 MIT 许可证,无需安装程序,直接从下载的归档文件中运行即可。
根据 Anthropic 自己的文档,Claude Code 会读取你的代码库,编辑文件,运行命令,并在你的终端、IDE、桌面应用和浏览器中工作。
将这两者结合起来,初学者可以在一个周末内完成一款小型、可玩的 2D 游戏。
不是演示。不是角色撞墙的视频片段。而是一款包含开始界面、分数、失败机制的游戏,以及你可以发送给朋友的文件。
关键在于方法。大多数用 AI 构建的第一款游戏都会在同样的三个地方停滞不前:想法太大,代码针对错误的引擎版本,而且没有人检查游戏是否真的能运行。
本指南解决了这三个问题。它选择一个技术栈、一款微型游戏和一个反馈循环,并逐步引导构建过程。
下面所有引擎命令均于 2026 年 11 月 6 日在 Godot 4.7.2 上运行。官方文档链接位于底部。
为什么 Claude 是好的第一个合作伙伴
第一款游戏主要是粘合剂。输入处理、碰撞回调、计时器、分数标签、重启按钮。单独来看,这些都不难。但合在一起,足以让初学者停滞数周。
这种粘合剂正是编码代理擅长处理的领域。你用简单的英语描述行为。Claude 编写脚本,连接信号,并解释为什么选择该节点类型。
仅聊天只能得到代码片段。Claude Code 能得到一个工作的循环。它可以打开项目文件夹,创建文件,从命令行运行引擎,读取错误,并在交回控制权之前修复它。
Anthropic 的最佳实践页面直截了当地说明了这一点的重要性。当 Claude 报告任务完成但实际上没有完成时,通常的原因是没有让它测试结果。给它一个返回通过或失败的检查,它就可以在没有你的情况下闭环。
游戏引擎恰好有极好的检查机制。你将在几分钟内构建这个工具,它对成功的贡献比任何提示技巧都大。
技术栈:Godot 4 与 GDScript
选择一个技术栈并坚持使用。在第一个项目中途切换引擎是永远无法完成项目的可靠方式。
我用 Claude 制作第一款游戏的默认选择是 Godot 4 和 GDScript。以下是它胜过另外两个流行的初学者路线的原因。
它是一个完整的引擎。场景、2D 物理、碰撞形状、音频、UI 和导出都是内置的。你不需要在绘制精灵之前组装一个框架。
它是免费且开源的。Godot 的常见问题解答将其描述为在 MIT 许可证下的免费开源软件。没有席位费用,没有收入分成,没有账户。
GDScript 易于阅读。Godot 的常见问题解答称它是为 Godot 构建的,任何写过 Python 的人都会觉得熟悉。你可以在没有计算机科学学位的情况下理解 Claude 编写的代码。
项目文件是文本。脚本是 .gd 文件,场景是 .tscn 文件,设置保存在 project.godot 中。代理可以读取所有这些内容,你也可以在 git 中比较所有这些内容。
它可以无头运行。这是关键的一点。Godot 的命令行教程记录了一个 --headless 标志,一个解析脚本中的错误并退出的 --check-only 标志,以及一个运行指定次数迭代后退出的 --quit-after 标志。这是一个 Claude 可以在每次更改时调用的测试工具。
其他选择也不错,只是不同。Phaser 是一个用于 JavaScript 或 TypeScript 的免费开源 HTML5 框架,如果你想要一个浏览器游戏并且已经熟悉 Web 工具链,这是一个不错的选择。Pygame 让你完全控制程序循环,其自身文档警告这很容易在早期出错。使用 Pygame 时,你需要构建许多 Godot 免费提供的部分。
对于想要完成游戏而不是学习框架的初学者来说,Godot 是最短路径。
可选步骤零:在工件中原型化体验
在安装任何东西之前,你可以测试你的想法是否有趣。
Claude 的帮助中心将工件描述为 Claude 制作的、在与对话旁边打开的内容,包括单页网站和小型交互工具。只要设置中开启了代码执行和文件创建,工件在所有计划(包括免费版)上都可用。
在普通聊天中要求 Claude 为你的游戏创建一个单页 HTML canvas 版本:一个用方向键移动的正方形,要收集的圆圈,要避免的红色正方形,一个 60 秒的计时器。在侧面板中玩十分钟。
如果作为方块它很无聊,那么加上艺术效果也会很无聊。现在就改变规则,此时改变的成本只是一条消息。
然后扔掉那个原型。它只是一个草图。真正的构建发生在 Godot 中。
范围:先写一页规格说明书
在编写代码之前,你能做的最有用的事情就是让游戏比你认为应该的要小。
这是我推荐的第一款游戏的规格说明书。称之为 Coin Rush(金币冲刺)。
- 俯视视角,一个屏幕,无滚动。
- 玩家使用方向键或 WASD 向八个方向移动。
- 金币随机出现。触碰一个增加 10 分。
- 一个危险物横跨屏幕漂移。触碰它结束运行。
- 每次运行持续 60 秒。幸存下来,你的分数就有效。
- 一个开始界面,一个分数标签,一个计时器标签,以及一个带有重启按钮的游戏结束界面。
- 一个音乐循环和两个音效。
就是这样。没有关卡,没有商店,没有存档系统,没有 AI 敌人,没有故事。
这接近 Godot 官方第一个 2D 教程构建的游戏,称为 Dodge the Creeps(躲避蠕虫)。这是故意的。当你卡住时,官方教程是几乎所有部分的参考实现:玩家场景、输入动作、Area2D 碰撞、计时器、HUD 和声音。
将规格说明书保存为项目根目录下的 SPEC.md。Claude Code 的最佳实践页面建议对任何你没有完全想清楚的事情采用 exactly 这个模式:让 Claude 采访你直到它能写出规格说明书,保存到文件,然后启动一个新会话从中构建。
规格说明书是你完成的定义。不在其中的东西等到版本二再说。
大约三十分钟的安装
你需要四样东西。
Godot。从 http://godotengine.org 下载适合你操作系统的标准版本。下载页面说提取并运行;它是自包含的。选择标准版本,而不是 .NET 版本,因为 GDScript 是你唯一需要的,而 C# 项目目前在 Godot 4 中无法导出到 Web。
Claude Code。官方安装在 macOS、Linux 或 WSL 的终端中只需一行命令,文档中列出了 PowerShell、CMD、Homebrew 和 WinGet 选项。然后在你的项目文件夹中运行 claude。大多数界面需要 Claude 订阅或 Anthropic Console 账户。
Git。在每个可用的切片后提交。当编辑出错时,它是你的撤销按钮。
一个项目。打开 Godot,创建一个新项目,选择一个文件夹。Godot 的教程指出你只需要一个有效的项目路径;默认值即可。
使 godot 命令可以从你的终端访问,要么将二进制文件放在 PATH 上,要么在 CLAUDE.md 中告诉 Claude 完整路径。
现在编写 CLAUDE.md。Claude Code 在每个会话开始时加载此文件。Anthropic 建议保持简短,少于 200 行,只填充 Claude 无法通过读取仓库推断出的内容。你可以运行 /init 生成初始版本,然后精简它。
对于 Godot 项目,我的看起来大致如下:
引擎:Godot 4.7.2。仅限 GDScript 2.0。永远不要使用 Godot 3 语法或 Python 语法。
使用 @export, @onready, await, CharacterBody2D, instantiate(), signal.connect(callable)。
文件夹:scripts/ 存放代码,scenes/ 存放 .tscn 文件,assets/ 存放图像和音频,tests/ 存放检查脚本。
根据需要更改 .gd 文件。仅在请求时触摸 .tscn 文件,并且永远不要更改它们的 ext_resource id 或 uid 值。
提交 .uid 文件。永远不要编辑或提交 .godot/。
每次更改后运行下面的检查并读取输出。
在更改 project.godot、输入映射或自动加载之前询问。
其中两行存在是因为 Godot 的工作方式,它们节省了真正的痛苦。
.godot 文件夹是一个缓存。Godot 的版本控制页面将其列为保持在 git 之外的项目缓存数据。
.uid 文件很重要。Godot 关于 4.4 UID 更改的文章本身指出这些文件应该被提交,并且应该随其脚本移动。急于求成的代理会试图清理它们,除非被告知不要这样做。
工具:让引擎评判 Claude 的工作
本节是让游戏正常运行与充满自信声明的聊天记录之间的区别。
四个命令,全部记录在 Godot 的命令行参考中:
godot --headless --path . --import
godot --headless --path . --check-only --script res://scripts/player.gd
godot --headless --path . --script res://tests/test_scoring.gd
godot --headless --path . --quit-after 120
第一个在不打开窗口的情况下导入资源。在新鲜检出或添加资产后运行一次。
第二个解析一个脚本并退出。如果脚本损坏,你会得到一个命名行的解析错误,进程返回 1。
第三个运行测试脚本。任何扩展 SceneTree 的脚本都可以这样运行,调用你的游戏逻辑,打印 PASS 或 FAIL,并以 0 或 1 退出。
第四个启动主场景,让它滴答 120 次,然后关闭。运行时错误和你的 print() 行会显示在输出中。
一个陷阱。在 4.7.2 上的测试中,如调用空值方法的运行时错误打印了 SCRIPT ERROR,但进程仍以代码 0 退出。因此 CLAUDE.md 中的规则必须是:任何包含 SCRIPT ERROR 或 ERROR 的行都算作失败,无论退出代码如何。
让 Claude 将所有这四个包装在一个脚本中,例如 http://check.sh,以便单个命令运行所有内容并在任何错误行上失败。然后将该命令放入 CLAUDE.md。Anthropic 的最佳实践页面称运行你检查的命令是该文件中最有用的行。
如果你想强制执行检查而不是请求,Claude Code 支持 Stop hook。你的脚本在 Claude 尝试完成时触发,退出代码 2 阻止完成并将脚本的错误文本返回给 Claude。一个简单的包装器运行解析检查并 grep SCRIPT ERROR 就足够了。
对于以后的真正单元测试,GUT(Godot 单元测试框架)从命令行运行。其文档称 9.x 版针对 Godot 4,当所有测试通过时运行器返回 0,任何失败时返回 1。对于 Coin Rush,手写 SceneTree 测试就足够了。
Godot 3 陷阱
这值得拥有自己的部分,因为它几乎咬到了每个人。
Godot 4 从 Godot 3 更改了许多名称和关键字,多年来 Godot 3 的教程和论坛答案仍然在线。向任何语言模型询问 Godot 代码而不固定版本,你有时会得到旧的方言。
常见示例:KinematicBody2D 而不是 CharacterBody2D,yield 而不是 await,export var 而不是 @export var,instance() 而不是 instantiate(),以及将方法名作为字符串传递的连接调用。Godot 的官方升级指南列出了这些重命名。
你不需要记住列表。你需要引擎大声拒绝旧代码。将 Godot 3 风格的脚本喂给 4.7.2 上的解析检查,它会立即失败。对于旧的 export var 行,错误指出 export 关键字在 Godot 4 中被移除,并指向 @export 注解,附带文件和行号。
这就是为什么版本行位于 CLAUDE.md 顶部,以及为什么解析检查在每次编辑后运行。双重保险。
垂直切片构建
不要要求游戏。要求一个运行的切片,检查它,提交它,然后要求下一个。
垂直切片是游戏的一个薄片,端到端工作。你可以按下播放并看到它做某事。以下每一个都是一次会话或更少。
切片 1:一个移动的玩家
在 claude 中在项目文件夹中启动 Claude Code,并将 Godot 编辑器保持在其旁边。Claude 编辑文件;Godot 拾取更改。你按下播放。
提示:
读取 SPEC.md 和 CLAUDE.md。创建 scenes/player.tscn 作为带有 Sprite2D 和 CollisionShape2D 的 Area2D,以及 scripts/player.gd。为方向键和 WASD 添加输入动作 move_left, move_right, move_up, move_down。将玩家限制在屏幕内。运行导入和解析检查,然后运行游戏 120 帧,并向我展示输出。
Claude 应该落脚的脚本核心很短:
extends Area2D
@export var speed: float = 300.0
func _process(delta: float) -> void:
var dir := Input.get_vector("move_left", "move_right", "move_up", "move_down")
position += dir * speed * delta
position = position.clamp(http://Vector2.ZERO, get_viewport_rect().size)
这在 4.7.2 上解析干净。暂时使用纯色矩形作为精灵。
自己在编辑器中按下播放。如果移动感觉慢或滑,在检查器中更改导出的速度值,而不是在代码中。提交。
切片 2:金币和碰撞
提示:
添加 scenes/coin.tscn,一个带有小圆形形状和 collected 信号的 Area2D。当玩家重叠它时,发出 collected 并释放金币。在主场景中,在屏幕内的随机位置生成一个金币,屏幕上保持正好一个金币,每次拾取加 10 分。将计分数学放在 scripts/scoring.gd 中的静态 add_coin(score) 函数中,类名为 Scoring,并编写 tests/test_scoring.gd 来检查它。运行所有检查。
Godot 的 Area2D 文档涵盖重叠检测。官方教程也将其玩家构建为 Area2D,并使用重叠信号来检测命中。
测试可以这么小:
extends SceneTree
func _init() -> void:
var ok := Scoring.add_coin(0) == 10 and Scoring.add_coin(10) == 20
print("PASS" if ok else "FAIL")
quit(0 if ok else 1)
将计分规则拉入一个普通函数是使微小单元测试成为可能的技巧。碰撞很难在无头模式下测试。一个加分的函数测试起来很简单。将你关心的逻辑放在这样的函数中,并保持节点轻薄。
提交。
切片 3:危险物和失败方式
提示:
添加一个危险物,每 2 秒从一边生成并沿随机角度横跨屏幕漂移,离开屏幕时自行释放。触碰它在玩家上发出 hit 信号,停止生成,并显示游戏结束。使用 Timer 节点进行生成。不要添加物理体;Area2D 重叠就足够了。
最后一行很重要。第一款游戏很少需要真实的物理模拟。Area2D 重叠更容易推理且更难出错。
玩一下。如果两秒钟感觉太容易或太苛刻,在添加任何其他内容之前调整计时器。
提交。
切片 4:分数、计时器、开始、重启
提示:
添加一个带有分数标签、剩余秒数标签、消息标签和开始按钮的 HUD CanvasLayer。开始显示标题。按下开始或 Enter 开始 60 秒的运行。当时间用完或玩家被击中时,显示最终分数和再次出现的开始按钮。重启时重置分数、计时器、金币和危险物。
官方的 Dodge the Creeps 教程构建了几乎完全相同的 HUD,包括将 start_game 动作映射到 Enter 键。如果它过度构建,将 Claude 指向该页面。
现在你有了一个游戏。丑陋,但完整。提交并标记为 v0.1。
切片 5:艺术和音频
这是初学者浪费数周的地方。不要画任何东西。
使用免费资产。Kenney 的支持页面说 Kenney 资产页面上的每个资产都在 CC0 下属于公共领域,可用于商业项目,不需要署名。Godot 的教程还附带一个小资产 zip,包含玩家精灵、敌人精灵、音乐循环和游戏结束声音。
选择一个包,只将你使用的文件复制到 assets/,运行导入命令,并要求 Claude 用精灵替换彩色矩形,并为音乐、拾取和游戏结束连接 AudioStreamPlayer 节点。
来自官方教程的一个 Godot 细节:音频导入时循环禁用。在导入设置中为音乐轨道打开 Loop,否则它将在一遍后停止。
提交。
切片 6:导出一个别人可以玩的构建
Godot 需要先安装导出模板才能打包你的游戏。导出文档指向编辑器,然后管理导出模板,在那里安装你需要的平台。
为你的桌面平台创建一个导出预设,如果需要浏览器构建,再创建一个 Web 预设。Godot 4 的 Web 导出使用兼容性渲染器针对 WebGL 2.0。文档称自 Godot 4.3 以来支持的单线程 Web 导出现在是默认和首选选项。多线程构建需要特殊的服务器标头和完整的跨源隔离。单线程构建跳过这些,并且与 itch.io 等游戏主机更兼容。
一旦预设存在,导出也可以从终端工作:
godot --headless --export-release "Linux" builds/coinrush.x86_64
这里“Linux”只是你命名的预设的名称。文档说名称必须与 export_presets.cfg 中的一个匹配,如果包含空格则需要引号,并且输出文件夹必须已经存在。
教程的分享建议很简单:压缩导出的可执行文件和其 PCK 文件,而不是原始项目,然后上传。
如何提示 Claude 进行游戏工作
我学到的大部分内容可以归纳为八条规则。
1. 规格优先于代码。Claude 不能读心。一个简短的 SPEC.md 回答了它原本会猜测的大多数问题。Anthropic 的文档建议在不确定时让 Claude 采访你,然后在新会话中构建。
2. 每个提示一个切片。命名文件、节点类型和完成的样子。“添加一个硬币”是模糊的。“添加 scenes/coin.tscn 作为在重叠时发出 collected 的 Area2D,然后运行检查”是一个任务。
3. 要求证据,而不是摘要。最佳实践页面说要求 Claude 运行的命令及其输出。“所有测试通过”告诉你很少。粘贴的输出告诉你一切。
4. 在任何有风险的事情上先计划。Claude Code 的计划模式,通过 Shift+Tab 或 claude --permission-mode plan 到达,让 Claude 读取文件并提出计划,直到你批准才编辑。在重构场景之前使用它。
5. 更改,不要重写。当某些东西不对时,描述症状和文件:“玩家在 http://player.gd 中可以离开屏幕底部;仅修复钳位。”要求它重写整个脚本会丢弃正在工作的代码。
6. 两次失误后重置。文档建议在纠正同一件事两次后,运行 /clear 并编写一个更好的提示,其中包括你学到的内容。按 Esc 停止漂移的运行,并使用 /rewind 回滚编辑。
7. 说你想要更多。Anthropic 指出 Claude 倾向于构建满足请求的最小事物。如果你想要带有处理边缘情况的精致版本,说“大胆一点”并列出这意味着什么。
8. 努力与工作匹配。文档称 Claude Code 在大多数计划上默认为中等努力。当你调整数字并无论如何审查每个结果时,降低到 /effort low。对于你无法解释的 bug,如碰撞触发两次,提高到 /effort high。努力是主要控制;诸如“思考得更深入”之类的短语只会在此之内微调。
截图也有帮助。文档列出直接将图像粘贴到提示中作为向 Claude 提供它看不到的内容的方法。精灵漂浮在其碰撞框上方的截图比一段描述更有价值。
试玩循环
工具告诉你游戏正在运行。只有你能判断它是否有趣。
在每个切片之后,在要求任何新内容之前玩三次完整的运行。用一行记下感觉不对的地方。太慢,硬币太小,左侧的危险物不公平。
然后将列表交给 Claude,要求它仅更改导出的值和计时器,然后再次玩。
使用编辑器的检查器进行调整。像速度和生成间隔这样的导出变量会出现在那里,所以你可以在一分钟内尝试十个值而不接触代码。
让另一个人玩到切片 4。观看,不要解释。他们困惑的地方就是你真正的错误列表。
Claude Code 还提供 /verify 命令,它要求 Claude 自己启动应用程序并检查发生的情况。它捕捉测试遗漏的问题,但它不能替代你的手在键盘上。
常见陷阱
范围蔓延。每个想法在晚上 11 点都觉得很小。将新想法写在 IDEAS.md 中,并将它们留在那里直到标记 v0.1。
资产地狱。寻找完美的精灵包是有良好照明的拖延症。先用盒子发货,然后交换一个 CC0 包。
先物理后乐趣。RigidBody2D、反弹材料和重力调整感觉像进步。对于第一款游戏,重叠检查和简单移动就足够了。只有在设计需要时才添加物理。
一次性要求整个引擎。“为我构建一个具有程序化关卡、库存和存档文件的 Roguelike”会产生一堆没人能调试的代码,尤其是你。切片使每次故障都很小。
手动编辑场景文件。.tscn 文件是文本,但节点通过 ids 和 uids 引用资源。除非你已经提交并明确要求 Claude 进行文本编辑,否则在编辑器中进行结构场景更改。
信任退出代码 0。上面已涵盖,值得重复。读取输出以查找 SCRIPT ERROR。
混合引擎和版本。留在 Godot 4 上。在 CLAUDE.md 中固定确切版本。永远不要将 Godot 3 教程答案粘贴到项目中而不运行解析检查。
长且不专注的会话。每个请求都会重新发送对话。在不相关的切片之间运行 /clear,以便下一个任务不会拖上上一个的历史。
关于 Claude Projects 的说明
Claude 的帮助中心描述了 Projects 的新版本,处于测试阶段,首先在 Claude Code 中向选定的 Pro、Max 和 Ultra 用户推出。在该版本中,项目是一个单一的对话。Claude 将工作分解为并行运行并在你关闭笔记本电脑后继续的云线程。
这对于以后很有趣,当时艺术、音频和代码可以并行移动。对于第一款游戏,一个文件夹中的一个本地 Claude Code 会话更简单且更容易跟踪。先学习循环。
发布后
当 Coin Rush v0.1 被压缩并交到朋友手中时,你已经完成了艰难的部分。之后的一切都是迭代。
好的下一步,一次一个:
1. 润色。击中时的屏幕震动,拾取时的粒子爆发,分数标签上的短暂缓动。小而便宜,它们比任何新功能更能改变游戏的感受。
2. 具有不同移动模式的第二种危险物类型。
3. 在运行之间保存的最高分数。Godot 的存档游戏页面展示了模式,写入 user:// 路径。
4. 三个具有上升生成率的关卡,作为数据构建,而不是作为主场景的三个副本。
5. 控制器支持。官方教程展示了如何将游戏手柄按钮添加到现有输入动作。
6. 免费游戏托管页面上的 Web 构建,以便任何人都可以点击播放。
对每个保持相同的循环:在两行中指定更改,一个切片,运行检查,读取输出,玩三次,提交。
这个循环才是真正的技能。Claude 快速编写代码。引擎如实告诉你它是否运行。你的工作是范围、品味和决定接下来构建什么。
所以保持第一款游戏小巧,让引擎评判每次更改,并在这个周末将一个可玩的构建交到别人手中。第二款游戏会更简单,因为循环将成为习惯。
来源
https://godotengine.org/download/linux/
https://docs.godotengine.org/en/stable/about/faq.html
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/index.html
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/01.project_setup.html
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/03.coding_the_player.html
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/05.the_main_game_scene.html
https://docs.godotengine.org/en/stable/getting_started/first_2d_game/07.finishing-up.html
https://docs.godotengine.org/en/stable/tutorials/editor/command_line_tutorial.html
https://docs.godotengine.org/en/stable/tutorials/physics/using_area_2d.html
https://docs.godotengine.org/en/stable/tutorials/migrating/upgrading_to_godot_4.html
https://docs.godotengine.org/en/stable/tutorials/best_practices/version_control_systems.html
https://godotengine.org/article/uid-changes-coming-to-godot-4-4/
https://docs.godotengine.org/en/stable/tutorials/export/exporting_projects.html
https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_web.html
https://docs.godotengine.org/en/stable/tutorials/io/saving_games.html
https://gut.readthedocs.io/en/latest/Command-Line.html
https://github.com/bitwes/Gut
https://code.claude.com/docs/en/overview
https://code.claude.com/docs/en/quickstart
https://code.claude.com/docs/en/best-practices
https://code.claude.com/docs/en/memory
https://code.claude.com/docs/en/common-workflows
https://code.claude.com/docs/en/hooks-guide
https://support.claude.com/en/articles/9487310-what-are-artifacts-and-how-do-i-use-them
https://support.claude.com/en/articles/9517075-what-are-projects
https://kenney.nl/support
https://docs.phaser.io/phaser/getting-started/what-is-phaser
https://www.pygame.org/docs/
https://starterloot.com/guides/how-to-use-claude-code-with-godot/
来源:Amit Shrivastava · x.com