GitHub周趋势2026W25 | Headroom 压缩 95% Token、NVIDIA 开源 AI Agent 安全扫描器、…
2026-07-28
2026-08-03 0
分类: ai-development
标签: CodeArts, AI编程, 打砖块, 网页小游戏, 触屏
难度: 初级
读者: 前端开发者、游戏爱好者、技术写作者
我在码道 TUI 里输入了一段需求:「做一个打砖块网页小游戏,单个 HTML 文件即可运行……」约 3 分 3 秒后,一个 603 行、约 20 KB 的完整打砖块就自动生成了:三档难度控制球速/砖块层数/命数、砖块按层 6 色渐变、破碎时粒子爆炸加屏幕震动、挡板平滑跟随鼠标与触屏、发球角度由击中位置决定、关卡递增加最高分持久化,双击 HTML 就能开局。
复制下面的命令到终端,3 步完成安装:
# 1. 一键安装sh -c $(curl -L https://cnnorth4-cloudide-marketplace.obs.cn-north-4.myhuaweicloud.com/codearts/cli_tui/install_script/install.sh)# 2. 配置环境变量export PATH=~/.codeartsdoer/installers:$PATHexport CODEARTS_CLI_AK=你的AKexport CODEARTS_CLI_SK=你的SK# 3. 启动 TUIcodearts
AK/SK 获取:https://codearts.huaweicloud.com/portal/settings/cli-auth
安装完成后,在命令行或 PowerShell 中输入 codearts 回车,即可打开码道 TUI。把开发需求贴进输入框,码道会自动分析并生成完整代码。
这次开发中,码道展示了以下能力:
我想要一个打砖块网页小游戏,具体要求:
开发命令:
# 打开码道 TUI,在输入框中输入需求codearts
在项目目录启动 codearts,将需求粘贴到输入框(模型为 Build · GLM-5.2)。提交后码道先分析需求要点,随即开始构建:

码道进入构建流程,开始编写 Canvas 渲染、物理碰撞与粒子系统:

约 3 分 3 秒后,码道完成开发,生成 breakout.html(603 行,约 20 KB),并自动在浏览器中打开验证,逐条汇报功能清单:

从 TUI 的输出可以看到,除了需求里的功能,码道还自己补了粒子爆炸、屏幕震动、关卡递增、困难模式双血砖块、暂停键等细节。
生成的 breakout.html 核心逻辑可以分为四块:难度与关卡配置、挡板反弹物理、砖块碰撞判定、粒子与渲染。
const DIFF = {easy: { name:'简单', speed: 4.5, rows: 4, life: 5 },normal: { name:'普通', speed: 6.0, rows: 5, life: 3 },hard: { name:'困难', speed: 7.8, rows: 6, life: 2 }};// 砖块每层颜色(HSL)const ROW_COLORS = ['#ff5e7e', '#ff8c42', '#ffd166', '#06d6a0', '#4cc9f0', '#b388ff'];function initLevel() {const d = DIFF[state.diff];const rows = d.rows + Math.min(state.level - 1, 3); // 关卡递增层数(封顶)...// 困难:底部两行需要 2 击hpMax: (state.diff === 'hard' && r >= rows - 2) ? 2 : 1}
三档难度用配置表定义球速、砖块层数和命数,切换难度只是换一行配置。过关后 rows 会随 level 递增(封顶 +3 层),让难度曲线平滑上升。困难模式的底部两行砖块 hpMax 为 2,必须击中两次才能打碎,这是需求之外码道自己加的策略性设计。
// 子步长防止穿透const steps = Math.ceil(Math.hypot(state.ball.vx, state.ball.vy) / 4) || 1;for (let s = 0; s < steps; s++) {...if (state.ball.y + state.ball.r >= p.y && ... && state.ball.vy > 0) {state.ball.y = p.y - state.ball.r;// 根据击中位置改变角度const hit = (state.ball.x - (p.x + p.w / 2)) / (p.w / 2); // -1..1const speed = Math.hypot(state.ball.vx, state.ball.vy);const angle = -Math.PI / 2 + hit * (Math.PI / 3);state.ball.vx = Math.cos(angle) * speed;state.ball.vy = Math.sin(angle) * speed;}}
高速小球一帧可能穿越砖块或挡板,码道用「子步长」把一帧拆成多步更新,杜绝穿透。挡板反弹不是固定角度,而是按球击中挡板的位置偏移量 hit(-1…1)计算反弹角度:打中挡板边缘球会斜着飞出去,打中中心则垂直向上——这就是打砖块控制手感的核心。
const overlapL = (state.ball.x + state.ball.r) - b.x;const overlapR = (b.x + b.w) - (state.ball.x - state.ball.r);const overlapT = (state.ball.y + state.ball.r) - b.y;const overlapB = (b.y + b.h) - (state.ball.y - state.ball.r);const minO = Math.min(overlapL, overlapR, overlapT, overlapB);if (minO === overlapL || minO === overlapR) state.ball.vx *= -1;else state.ball.vy *= -1;b.hp--;if (b.hp <= 0) {b.alive = false;const gain = 10 + state.level * 2;state.score += gain;spawnParticles(b.x + b.w / 2, b.y + b.h / 2, b.color, 16);state.shake = 4;}
球与砖块碰撞后要判断从哪边撞进来的:计算球与砖块四个边的重叠量,取最小值对应的一边反转 vx 或 vy,避免球从侧面撞到砖块却错误地上下反弹。击碎砖块时按关卡加分、生成 16 个粒子和 4 帧屏幕震动,未击碎(双血砖块)则生成 6 个粒子加轻微震动,反馈层级分明。
function spawnParticles(x, y, color, n=14) {for (let i = 0; i < n; i++) {const a = Math.random() * Math.PI * 2;const s = 1 + Math.random() * 4;state.particles.push({ x, y, vx: Math.cos(a) * s, vy: Math.sin(a) * s, life: 1, color });}}
砖块破碎瞬间在砖块中心按随机方向撒出 14~16 个彩色粒子,粒子带速度与生命周期,逐帧衰减直到消失。渲染时砖块用 createLinearGradient 做纵向渐变并加高光,屏幕震动通过把整个画布按 shake 偏移绘制实现——这些小细节让打碎砖块的手感变得非常有质感。
用浏览器打开 breakout.html,进入游戏主菜单:

可以看到:
| 能力 | 说明 |
|---|---|
| 自然语言理解 | 「打砖块网页小游戏」→ Canvas/挡板/砖块/计分/难度/过关完整方案 |
| 算法细节 | 子步长防高速穿透、四边重叠量判定碰撞方向、发球角度随击中位置变化 |
| 输出质量 | 砖块按层 6 色渐变 + 高光,粒子爆炸 + 屏幕震动反馈 |
| 产品细节 | 三档难度参数化、关卡递增层数、困难双血砖块、暂停键、localStorage 最高分 |
这次实践最大的感受是:码道把打砖块这种「经典游戏」写出了产品感——子步长防穿透、四边碰撞判定、角度可控的发球、粒子爆炸、屏幕震动、困难模式双血砖块这些细节一个都没落下。603 行单文件、零依赖、双击即玩,还支持鼠标和手机触屏操作。如果你也想试试,可以免费开通体验版:https://developer.huaweicloud.com/codeartsco.html?source=dmzntgwsf&sourcead=dmzntgwwbwz