内容提要
“氛围编程”指用自然语言描述需求、由AI代理生成并迭代代码的新开发方式,2025年由Karpathy提出。本文以经典街机游戏《打砖块》为例,演示从画布骨架、挡板、球体物理、砖块网格、碰撞检测、计分生命到胜负状态的逐步构建,每步给出提示词与代码解释。作者强调:AI虽能写代码,开发者仍须读懂、质疑并验证结果,这才是项目真正可用的关键。
延伸解读
分步构建:降低AI代码调试难度
文章将《打砖块》拆解为画布骨架、挡板、球体物理、砖块网格、碰撞检测、计分生命和胜负状态七个步骤,每步只添加一个核心功能。这种做法的好处是,当AI生成的代码出现问题时,开发者能快速定位错误发生在哪一小块逻辑中,而不是面对一整份难以排查的完整游戏代码。对于使用AI助手的开发者来说,控制每次提示的范围比一次性生成全部代码更可控。
碰撞检测:最易出错的关键环节
文章特别强调碰撞检测是“氛围编程”中最容易产生“看起来对但玩起来错”的环节。其中,挡板反弹角度根据球击中位置计算,让玩家能通过击球点控制方向;而砖块碰撞函数开头的“若已销毁则返回false”是防止已消失砖块继续触发碰撞的关键守卫。此外,每帧只处理一个砖块碰撞的break语句,避免了同时击中两块砖导致方向翻转相互抵消的异常。这些细节说明,AI生成的物理逻辑仍需人工审视边界条件。
AI写代码,人负责验证
文章结尾指出,氛围编程并没有消除理解代码的工作,而是把工作转移到了阅读、质疑和验证上。开发者虽然不用逐字敲出碰撞数学,但仍需知道已销毁砖块需要守卫条件、挡板需要边界限制,以及“点几下能玩”不等于胜负状态都经过验证。这提示读者,使用AI助手构建项目时,真正的门槛不在于写提示词,而在于能否判断生成结果是否真正可用。
Q&A
什么是氛围编程(Vibe Coding)?
氛围编程是由Andrej Karpathy在2025年初提出的一种软件开发方式,指用自然语言描述需求,由AI代理负责代码生成、执行和迭代,而不是手动编写每一行代码。该词已被《柯林斯英语词典》评为2025年度词汇。
用AI构建《打砖块》游戏需要安装哪些工具?
只需要现代浏览器(Chrome、Firefox或Safari)、文本编辑器和一个AI编程助手。教程使用Claude Code(通过npm install -g @anthropic-ai/claude-code安装),但Cursor、Replit Agent等工具也同样适用。整个游戏是一个HTML文件,无需构建工具、框架或依赖。
为什么构建《打砖块》时要分步骤提示AI,而不是一次性生成整个游戏?
分步骤构建(画布骨架、挡板、球体物理、砖块网格、碰撞检测、计分生命、胜负状态)便于在添加新功能前确认每一部分正确渲染,出错时更容易定位问题。一次性生成整个游戏往往更难调试。
在《打砖块》中,挡板的碰撞角度是如何实现的?
通过paddleBounceAngle函数计算球击中挡板的位置:将球心与挡板中心的偏移量归一化到-1到1之间,再乘以π/3(最大60度),使中心击中时球几乎垂直弹起,边缘击中时以锐角弹出,从而让挡板具有可操控性。
砖块碰撞检测中最重要的防护措施是什么?
在brickCollision函数开头检查if (brick.destroyed) return false,确保已销毁的砖块不再参与碰撞。缺少这一行会导致球在砖块消失后仍被 invisible 墙壁反弹,是常见的bug。
游戏胜利和失败状态是如何处理的?
胜利条件通过bricks.every((b) => b.destroyed)检查所有砖块是否被销毁,然后设置gameWon为true并显示胜利消息。失败时lives减至0则设置gameOver为true。游戏循环在gameOver或gameWon为true时停止调用更新函数,但继续渲染,使最终画面冻结。
完成后的《打砖块》游戏如何部署上线?
可以将HTML文件推送到GitHub仓库并启用GitHub Pages,获得公开URL;或使用Netlify的拖拽部署;对于游戏项目,itch.io也是不错的选择,因为它面向独立游戏受众。
氛围编程是否意味着开发者不需要理解代码?
不是。作者强调,氛围编程将理解代码的工作转移到了另一个环节:开发者仍需读懂、质疑并验证AI生成的代码,例如知道销毁的砖块需要防护条件、挡板需要边界限制,以及胜负状态必须经过验证。这才是项目真正可用的关键。