實(shí)踐)
先給結(jié)論。這次我們看一個(gè)比較有節(jié)目效果的 AI 編程實(shí)踐:5 分鐘,用 CodeUI 這類 AI 編程工具,直接生成一個(gè)在瀏覽器里就能玩的割草游戲,整體花費(fèi)按公開口徑只要 0.2 元左右。如果你還在猶豫 AI 編程到底能不能干正事,這個(gè)案例就是很好的切入點(diǎn):需求足夠具體、玩法邊界清晰、生成結(jié)果能立刻運(yùn)行驗(yàn)證,而且成本低到可以忽略。文章會(huì)按這條線展開先分析為什么割草游戲適合 AI 寫;再給你一套可以直接復(fù)制的提示詞模板;接著完整跑一遍需求描述 → 生成代碼 → 本地運(yùn)行 → 反饋修復(fù)的 5 分鐘流程;然后把游戲核心代碼拆開看;最后算一算 0.2 元成本花在哪,以及怎么用接口做批量迭代。看完你不僅能復(fù)刻這個(gè)項(xiàng)目,還能把同一套思路搬到其他小游戲、小工具的開發(fā)上。1. 核心能力速覽項(xiàng)目說(shuō)明產(chǎn)品定位CodeUI 屬于 AI 編程工具通過(guò)自然語(yǔ)言對(duì)話生成、修改、調(diào)試代碼本案例目標(biāo)5 分鐘內(nèi)做出一個(gè)可玩的 2D 割草風(fēng)格游戲 demo綜合成本0.2 元左右按公開案例口徑與模型計(jì)費(fèi)和 token 消耗有關(guān)技術(shù)方案HTML5 Canvas JavaScript單 HTML 文件運(yùn)行運(yùn)行環(huán)境瀏覽器即可無(wú)需 GPU普通電腦可跑核心能力需求理解、代碼生成、Bug 修復(fù)、功能迭代啟動(dòng)方式打開 HTML 文件或用本地靜態(tài)服務(wù)訪問(wèn)是否需要 API不必須對(duì)話式生成即可也可通過(guò) API 做批量迭代批量任務(wù)支持可通過(guò)腳本循環(huán)調(diào)用 API按不同配置生成多個(gè)版本適合讀者想低成本體驗(yàn) AI 編程的開發(fā)者、獨(dú)立游戲愛(ài)好者、技術(shù)博主2. 為什么是割草游戲玩法邊界足夠清晰割草游戲是當(dāng)前獨(dú)立游戲圈非常流行的類型玩家控制一個(gè)角色在有限地圖中移動(dòng)怪物從四面八方刷出來(lái)玩家通過(guò)自動(dòng)或手動(dòng)攻擊持續(xù)清怪。代表作有《吸血鬼幸存者》《土豆兄弟》這類 Rougelike 生存玩法。它的核心機(jī)制其實(shí)非常統(tǒng)一移動(dòng)、攻擊、敵人生成、碰撞扣血、擊殺收集經(jīng)驗(yàn)、升級(jí)強(qiáng)化。這類游戲恰恰是 AI 編程最容易一次做出來(lái)的類型。原因有三點(diǎn)。第一核心規(guī)則少。玩家行為只有移動(dòng)和攻擊怪物的行為只有靠近和碰撞規(guī)則閉環(huán)非常短AI 不需要理解復(fù)雜的系統(tǒng)交互。第二渲染要求低。2D 小游戲只需要 Canvas 畫圓、畫方塊、畫簡(jiǎn)單粒子效果不需要加載外部美術(shù)資源AI 生成代碼時(shí)不需要依賴素材文件。第三可驗(yàn)證性高。只要打開瀏覽器就能立刻知道游戲能不能跑、手感如何反饋周期短AI 修 bug 的效率也高。所以這個(gè)項(xiàng)目的本質(zhì)不是做出一個(gè)能上架 Steam 的游戲而是驗(yàn)證一個(gè)非常實(shí)際的問(wèn)題在明確需求、合理拆分的情況下AI 編程工具能不能用幾分鐘生成一款能玩的游戲。答案從公開案例看是肯定的。3. 環(huán)境準(zhǔn)備與 AI 編程工具選擇3.1 對(duì)電腦的硬件要求先說(shuō)最關(guān)心的這個(gè)項(xiàng)目不需要 GPU不需要本地大模型不需要裝 ComfyUI 這類重型環(huán)境。它就是一次 AI 對(duì)話式編程生成的是純前端頁(yè)面所以一臺(tái)能開瀏覽器的電腦就夠用。Windows、macOS、Linux 都可以。唯一的區(qū)別是本地服務(wù)啟動(dòng)方式。Windows 可以用 Bat 腳本或 PowerShellmacOS/Linux 直接終端執(zhí)行命令。這里涉及的開銷主要是聊天記號(hào)和網(wǎng)絡(luò)請(qǐng)求不吃本地顯存也不吃 CPU 計(jì)算。3.2 工具與賬號(hào)準(zhǔn)備你需要的核心工具就是一款 AI 編程工具。CodeUI 是這類工具的其中一種市面上還有 Cursor、Windsurf、Trae、Codex 等。無(wú)論用哪一款需要確認(rèn)三件事是否支持網(wǎng)頁(yè)版或客戶端模式對(duì)話是否支持代碼文件生成模型用量計(jì)費(fèi)是否在可接受范圍。如果只是做一個(gè)單 HTML 的割草游戲建議優(yōu)先用新用戶贈(zèng)送的免費(fèi)額度或便宜模型成本會(huì)更低。這里說(shuō)的 0.2 元前提就是選用了按 token 計(jì)價(jià)的模型并且整個(gè)開發(fā)過(guò)程控制在幾次生成和修復(fù)以內(nèi)。3.3 工作目錄準(zhǔn)備建議單獨(dú)建一個(gè)項(xiàng)目文件夾避免生成的代碼和其他文件混在一起。比如mkdir ai-mower-game cd ai-mower-game后面 AI 生成的內(nèi)容直接保存為index.html。這個(gè)文件是純靜態(tài)頁(yè)面瀏覽器直接雙擊也能打開。更穩(wěn)的方式是用本地靜態(tài)服務(wù)后面會(huì)講到。4. 提示詞設(shè)計(jì)讓 AI 一次生成可運(yùn)行版本AI 編程能不能跑通一半取決于提示詞。這里不是聊怎么說(shuō)人話而是聊怎么把游戲需求拆成 AI 能理解的功能點(diǎn)。下面這份提示詞模板你直接復(fù)制到 CodeUI 或同類工具里就能用。請(qǐng)用 HTML5 JavaScript Canvas 寫一個(gè) 2D 割草風(fēng)格小游戲。 要求 1. 玩家用 WASD 移動(dòng)角色朝向鼠標(biāo)指針。 2. 玩家自動(dòng)向最近的敵人發(fā)射彈幕彈幕初始間隔 0.5 秒。 3. 敵人從屏幕四邊不斷生成并朝玩家移動(dòng)敵人數(shù)量隨時(shí)間增加。 4. 玩家碰到敵人扣血血量歸零游戲結(jié)束并顯示得分。 5. 敵人被擊殺后有概率掉落經(jīng)驗(yàn)道具拾取經(jīng)驗(yàn)可升級(jí)。 6. 升級(jí)時(shí)彈出 3 個(gè)隨機(jī)強(qiáng)化選項(xiàng)玩家點(diǎn)擊選擇 1 個(gè)。 7. 左上角顯示分?jǐn)?shù)、等級(jí)、血量開始畫面顯示游戲標(biāo)題和操作說(shuō)明。 8. 整個(gè)游戲?qū)懺谝粋€(gè) index.html 文件中包含必要的 CSS界面要簡(jiǎn)潔好看。 9. 代碼中關(guān)鍵部分寫中文注釋。這份提示詞的關(guān)鍵不是長(zhǎng)而是把功能邊界說(shuō)清楚。AI 不需要理解割草游戲這個(gè)抽象詞它需要知道玩家怎么動(dòng)、攻擊怎么發(fā)、敵人怎么刷、死亡條件是什么、升級(jí)怎么做。如果你希望 AI 更穩(wěn)定地輸出可以在提示詞后面再加一句請(qǐng)先輸出完整代碼不要輸出解釋避免大段文字混進(jìn)代碼塊。5. 5 分鐘開發(fā)流程實(shí)操以下是一套可以照做的流程時(shí)間分配按 5 分鐘設(shè)計(jì)。你不需要每一步都卡得很死但如果第一次做建議先按這個(gè)順序走。5.1 第 1 分鐘提需求把上一節(jié)的提示詞粘貼進(jìn) CodeUI 對(duì)話窗口。這個(gè)階段不用補(bǔ)充太多背景直接發(fā)需求。工具會(huì)基于當(dāng)前模型能力生成一段完整的 HTML 頁(yè)面代碼。如果你用的工具支持文件寫入可以直接讓它生成index.html并保存到項(xiàng)目文件夾。5.2 第 2 分鐘生成首個(gè)版本AI 返回代碼后先確認(rèn)三件事代碼塊是否完整、有沒(méi)有明顯的占位符、是否包含 Canvas 初始化邏輯。大多數(shù)情況下AI 第一次生成的版本就可以運(yùn)行能移動(dòng)角色、敵人會(huì)刷、子彈能打出去。不要指望第一版就是最終版這個(gè)階段的目標(biāo)是能打開、能操作。5.3 第 3 分鐘本地運(yùn)行驗(yàn)證在項(xiàng)目目錄下啟動(dòng)一個(gè)靜態(tài)服務(wù)然后在瀏覽器里打開頁(yè)面。# 在 ai-mower-game 目錄下執(zhí)行 python -m http.server 8080瀏覽器訪問(wèn)http://localhost:8080如果看到游戲標(biāo)題、按 WASD 能移動(dòng)角色、敵人開始出現(xiàn)說(shuō)明首個(gè)版本已經(jīng)通了。這個(gè)步驟是整個(gè)流程里最重要的驗(yàn)證點(diǎn)。如果頁(yè)面白屏優(yōu)先打開瀏覽器控制臺(tái)看報(bào)錯(cuò)然后把報(bào)錯(cuò)信息直接粘貼給 AI讓它修復(fù)。5.4 第 4 分鐘反饋修復(fù)第一版的問(wèn)題通常集中在幾個(gè)點(diǎn)角色移動(dòng)手感差、敵人刷得太快、子彈沒(méi)有視覺(jué)效果、升級(jí)選項(xiàng)沒(méi)有彈窗。不要自己動(dòng)手改代碼把這些具體問(wèn)題用問(wèn)題 期望效果的格式發(fā)給 AI。例如當(dāng)前問(wèn)題 1. 敵人生成太快30 秒后數(shù)量太多畫面很卡。 2. 子彈沒(méi)有打擊反饋擊殺敵人時(shí)應(yīng)該出現(xiàn)粒子特效。 3. 升級(jí)彈窗只在界面右上角出現(xiàn)容易被忽略。 期望效果 1. 敵人刷新間隔從 1 秒開始每 10 秒減少 0.05 秒最低間隔 0.3 秒。 2. 擊殺敵人時(shí)在死亡位置產(chǎn)生 6 個(gè)白色粒子0.3 秒后消失。 3. 升級(jí)彈窗顯示在屏幕中央并暫停游戲等待選擇。AI 會(huì)基于你的反饋修改代碼。每一輪修復(fù)都會(huì)消耗 token所以建議把同類問(wèn)題一次性合并不要想到一個(gè)說(shuō)一個(gè)。這也是 0.2 元成本能守住的關(guān)鍵。先讓 AI 生成完整版再一次性提問(wèn)題、批量改成本會(huì)低很多。5.5 第 5 分鐘保存與發(fā)布準(zhǔn)備修復(fù)完成后最終把index.html保存下來(lái)。如果你只打算本地運(yùn)行這一步已經(jīng)結(jié)束了。如果你想分享給別人可以把整個(gè)項(xiàng)目目錄壓縮或者部署到支持靜態(tài)頁(yè)面的托管平臺(tái)。由于游戲沒(méi)有任何后端接口部署很簡(jiǎn)單本質(zhì)上就是把一個(gè) HTML 文件放到靜態(tài)服務(wù)器上。6. 游戲核心代碼三大關(guān)鍵模塊拆解這一節(jié)我們把 AI 生成的游戲核心邏輯拆開看。以 HTML5 Canvas 方案為例主要包含三個(gè)模塊。理解這些代碼后你自己也能手動(dòng)調(diào)參不依賴 AI 也能定位問(wèn)題。6.1 玩家移動(dòng)與自動(dòng)攻擊玩家的核心行為是 WASD 移動(dòng)以及自動(dòng)向最近敵人發(fā)射彈幕。代碼可以這樣組織const player { x: 400, y: 300, hp: 100, speed: 4, atkCooldown: 0, atkInterval: 30 }; const keys {}; document.addEventListener(keydown, e keys[e.code] true); document.addEventListener(keyup, e keys[e.code] false); function updatePlayer() { if (keys[KeyW] || keys[ArrowUp]) player.y - player.speed; if (keys[KeyS] || keys[ArrowDown]) player.y player.speed; if (keys[KeyA] || keys[ArrowLeft]) player.x - player.speed; if (keys[KeyD] || keys[ArrowRight]) player.x player.speed; player.x Math.max(20, Math.min(canvas.width - 20, player.x)); player.y Math.max(20, Math.min(canvas.height - 20, player.y)); if (player.atkCooldown 0) { player.atkCooldown--; } }自動(dòng)攻擊的難點(diǎn)是找最近的敵人。每幀遍歷敵人數(shù)組計(jì)算距離然后記錄最近目標(biāo)。如果目標(biāo)存在且冷卻結(jié)束就生成一發(fā)朝向目標(biāo)的子彈。function findNearestEnemy() { let nearest null; let minDist Infinity; for (const enemy of enemies) { const dx enemy.x - player.x; const dy enemy.y - player.y; const dist Math.sqrt(dx * dx dy * dy); if (dist minDist) { minDist dist; nearest enemy; } } return nearest; } function tryAttack() { if (player.atkCooldown 0) return; const target findNearestEnemy(); if (!target) return; const angle Math.atan2(target.y - player.y, target.x - player.x); bullets.push({ x: player.x, y: player.y, vx: Math.cos(angle) * 6, vy: Math.sin(angle) * 6, damage: 1 }); player.atkCooldown player.atkInterval; }這段邏輯的重點(diǎn)是把攻擊頻率控制和子彈方向計(jì)算分開后面做強(qiáng)化升級(jí)時(shí)可以直接修改atkInterval讓玩家點(diǎn)一個(gè)升級(jí)項(xiàng)就減少冷卻。6.2 敵人波次生成割草游戲的敵人刷法核心是間隔遞減。不能一次性生成太多也不能生成太慢否則體驗(yàn)都不好。建議用一個(gè)計(jì)時(shí)器控制刷怪間隔同時(shí)用變量保存當(dāng)前間隔和最小間隔。let spawnTimer 0; let spawnInterval 60; // 幀數(shù)約 1 秒 const minSpawnInterval 20; // 約 0.33 秒 function spawnEnemy() { const side Math.floor(Math.random() * 4); const enemy { x: 0, y: 0, hp: 3, speed: 1.2, radius: 12 }; if (side 0) { // 上 enemy.x Math.random() * canvas.width; enemy.y -20; } else if (side 1) { // 下 enemy.x Math.random() * canvas.width; enemy.y canvas.height 20; } else if (side 2) { // 左 enemy.x -20; enemy.y Math.random() * canvas.height; } else { // 右 enemy.x canvas.width 20; enemy.y Math.random() * canvas.height; } enemies.push(enemy); } function updateSpawn() { if (spawnTimer 0) { spawnTimer--; return; } spawnEnemy(); spawnTimer spawnInterval; if (spawnInterval minSpawnInterval) { spawnInterval - 0.5; } }這里把刷怪邏輯獨(dú)立成函數(shù)后續(xù)做精英怪Boss 怪時(shí)可以直接在spawnEnemy里按概率分支。比如 10% 概率生成一個(gè)體型更大、血量 10 倍的精英怪。6.3 碰撞檢測(cè)與擊殺反饋碰撞檢測(cè)用最基礎(chǔ)的距離判斷子彈和敵人是圓形玩家和敵人也可以看成圓形。核心公式是勾股定理求距離然后判斷是否小于碰撞半徑之和。function checkCollision(a, b, radiusSum) { const dx a.x - b.x; const dy a.y - b.y; return dx * dx dy * dy radiusSum * radiusSum; } function updateHitAndKill() { for (let i bullets.length - 1; i 0; i--) { const bullet bullets[i]; let hit false; for (let j enemies.length - 1; j 0; j--) { const enemy enemies[j]; if (checkCollision(bullet, enemy, bullet.radius enemy.radius)) { enemy.hp - bullet.damage; hit true; if (enemy.hp 0) { spawnParticle(enemy.x, enemy.y, 6); score 10; enemies.splice(j, 1); } break; } } if (hit) bullets.splice(i, 1); } // 玩家與敵人碰撞扣血 for (let j enemies.length - 1; j 0; j--) { const enemy enemies[j]; if (checkCollision(player, enemy, player.radius enemy.radius)) { player.hp - 15; enemies.splice(j, 1); if (player.hp 0) { gameOver(); } } } }這個(gè)模塊的優(yōu)化空間很大。比如大量子彈和大量敵人做雙重遍歷時(shí)如果數(shù)量上到幾百性能就會(huì)下降??梢约右粋€(gè)空間網(wǎng)格或減少碰撞檢測(cè)頻率但在 demo 階段先把邏輯跑通更重要。性能優(yōu)化可以作為后續(xù)單獨(dú)的話題。7. 成本核算0.2 元是怎么花出來(lái)的先說(shuō)清楚0.2 元不是所有場(chǎng)景的固定價(jià)格而是這個(gè)案例在公開材料里的一個(gè)口徑。真實(shí)費(fèi)用取決于你選的模型價(jià)格、生成次數(shù)和上下文長(zhǎng)度。但 0.2 元能做完一個(gè)游戲 demo在現(xiàn)在的模型計(jì)價(jià)下是合理的。7.1 成本構(gòu)成對(duì)話式 AI 編程的計(jì)費(fèi)核心是 token。一次生成代碼的請(qǐng)求輸入提示詞可能只有 300 到 500 個(gè) token輸出代碼可能 1000 到 2000 個(gè) token一次請(qǐng)求總計(jì) 2000 個(gè) token 左右。如果模型單價(jià)是每百萬(wàn) token 幾塊錢那一次生成成本只有幾分錢。整個(gè)流程如果控制在 3 到 5 次對(duì)話內(nèi)總成本確實(shí)可以壓到 0.2 元左右。7.2 哪些操作最消耗 token最容易超支的是反復(fù)修改而不合并問(wèn)題。你讓 AI 改一次敵人數(shù)量改一次子彈速度再改一次顏色每次都要把整個(gè)文件重新輸出成本自然上去。正確做法是操作是否消耗大量 token建議第一次生成完整代碼是提示詞盡量一次講清全部需求只改某個(gè)參數(shù)是因?yàn)橐爻龃a盡量一次性列出所有問(wèn)題追加新功能是先規(guī)劃再動(dòng)手減少追加次數(shù)復(fù)制代碼到本地否直接把返回結(jié)果保存為文件讓 AI 解釋代碼一般對(duì) demo 項(xiàng)目不需要跳過(guò)7.3 省錢要點(diǎn)第一優(yōu)先選擇便宜模型或免費(fèi)額度不用一上來(lái)就用旗艦?zāi)P汀5诙a保存后不要重復(fù)粘貼整個(gè)代碼讓 AI 改可以只描述改動(dòng)點(diǎn)。第三生成的初始版本只要可運(yùn)行就先跑不要糾結(jié)美術(shù)細(xì)節(jié)。第四批量迭代時(shí)把不同參數(shù)組合寫進(jìn)腳本一次請(qǐng)求生成一個(gè)版本而不是在同一個(gè)對(duì)話里來(lái)回改。8. 接口與批量迭代用 API 做多版本測(cè)試如果你只想做一次游戲 demo不需要接口。但如果你想測(cè)試不同刷怪速度、不同彈幕密度、不同升級(jí)方案的效果手動(dòng)在對(duì)話里來(lái)回改會(huì)非常低效。這時(shí)可以用接口方式批量生成多個(gè)版本。這里給一個(gè)通用調(diào)用示例實(shí)際使用時(shí)需要替換為你所用 AI 服務(wù)的 base_url、model 和 api_key。各平臺(tái)接口規(guī)則不同請(qǐng)以官方文檔為準(zhǔn)。import openai client openai.OpenAI( api_keyyour_api_key, base_urlyour_provider_base_url # 按實(shí)際服務(wù)商替換 ) prompt 請(qǐng)用 HTML5 Canvas 寫一個(gè)割草游戲。 玩家 WASD 移動(dòng)自動(dòng)向最近敵人射擊。 敵人從四邊生成擊殺后得分。 寫在一個(gè) index.html 文件中。 resp client.chat.completions.create( modelyour_model_name, messages[ {role: system, content: 你是資深游戲開發(fā)工程師只輸出 HTML 代碼。}, {role: user, content: prompt} ], temperature0.7 ) code resp.choices[0].message.content with open(index.html, w, encodingutf-8) as f: f.write(code)如果你要做批量版本可以把參數(shù)變化放進(jìn)一個(gè)配置列表循環(huán)請(qǐng)求configs [ {name: fast_spawn, spawn_interval: 30, enemy_speed: 1.5}, {name: tank_enemy, spawn_interval: 80, enemy_hp: 8}, {name: rapid_fire, atk_interval: 12, bullet_speed: 8}, ] for cfg in configs: prompt_with_cfg prompt \n f玩家攻速間隔為 {cfg[atk_interval]} 幀敵人刷新間隔為 {cfg[spawn_interval]} 幀敵人血量為 {cfg[enemy_hp]}。 # 調(diào)用接口生成并保存為 f{cfg[name]}.html批量任務(wù)需要關(guān)注兩個(gè)問(wèn)題。一個(gè)是限流不要一次性并發(fā)太多請(qǐng)求建議加一個(gè)短暫 sleep 或使用線程池控制并發(fā)。另一個(gè)是失敗重試接口返回異常時(shí)記錄錯(cuò)誤日志并重試不要直接中斷整個(gè)批次。import time for cfg in configs: for attempt in range(3): try: resp client.chat.completions.create(...) # 保存文件 break except Exception as e: print(f{cfg[name]} 第 {attempt1} 次失敗: {e}) time.sleep(2)9. 效果驗(yàn)證與功能擴(kuò)展方向9.1 驗(yàn)證清單游戲生成后不要只看能打開就認(rèn)為完工。建議按下面清單驗(yàn)證一遍驗(yàn)證項(xiàng)判斷標(biāo)準(zhǔn)頁(yè)面打開無(wú)白屏無(wú)控制臺(tái)報(bào)錯(cuò)玩家移動(dòng)WASD 四個(gè)方向都能移動(dòng)且不超出邊界攻擊系統(tǒng)角色自動(dòng)朝最近敵人發(fā)射子彈冷卻生效敵人生成敵人從四個(gè)方向持續(xù)刷新數(shù)量隨時(shí)間增加碰撞扣血玩家碰到敵人血量下降血量歸零觸發(fā)結(jié)算擊殺得分?jǐn)橙怂劳鲇蟹謹(jǐn)?shù)變化有粒子反饋升級(jí)系統(tǒng)拾取經(jīng)驗(yàn)后彈出強(qiáng)化選擇選擇后生效長(zhǎng)時(shí)間運(yùn)行連續(xù)運(yùn)行 5 分鐘幀率無(wú)明顯下降如果前幾項(xiàng)失敗把對(duì)應(yīng)現(xiàn)象和期望發(fā)給 AI 修復(fù)。如果長(zhǎng)時(shí)間運(yùn)行卡頓先看敵人數(shù)量是否無(wú)限增加這是最常見的問(wèn)題。9.2 擴(kuò)展方向割草游戲的擴(kuò)展空間非常大。做完基礎(chǔ)版之后可以繼續(xù)讓 AI 加入這些功能武器進(jìn)化、元素技能、Boss 戰(zhàn)、無(wú)盡波次、音效、移動(dòng)端觸屏操作、存檔與排行榜。每加一個(gè)功能建議單獨(dú)生成一輪修改并把改動(dòng)點(diǎn)描述清楚。這也能幫你繼續(xù)驗(yàn)證 AI 編程在長(zhǎng)任務(wù)里的穩(wěn)定性。10. 常見問(wèn)題與排查方法問(wèn)題現(xiàn)象可能原因排查方式解決方案頁(yè)面白屏代碼語(yǔ)法錯(cuò)誤或 Canvas 初始化失敗按 F12 打開控制臺(tái)看報(bào)錯(cuò)把完整報(bào)錯(cuò)信息發(fā)給 AI 修復(fù)角色不能移動(dòng)鍵盤事件監(jiān)聽未綁定檢查代碼是否有 addEventListener讓 AI 補(bǔ)上 keydown/keyup 監(jiān)聽敵人不刷新刷怪邏輯未調(diào)用或計(jì)時(shí)器未啟動(dòng)檢查 update 循環(huán)里是否調(diào)用 updateSpawn把 update 函數(shù)貼給 AI 查看子彈沒(méi)有效果碰撞檢測(cè)半徑過(guò)小檢查碰撞判定條件調(diào)大 radiusSum 或補(bǔ)打日志卡頓嚴(yán)重?cái)橙嘶蜃訌棓?shù)量無(wú)限增長(zhǎng)查看 enemies.length 和 bullets.length給敵人數(shù)量設(shè)置上限或加清理邏輯代碼保存后打不開文件編碼或后綴錯(cuò)誤確認(rèn)文件是 UTF-8 編碼且后綴為 html重新從工具導(dǎo)出完整代碼本地服務(wù)端口被占用8080 已被其他項(xiàng)目使用換一個(gè)端口啟動(dòng)時(shí)指定 8090 或其他空閑端口11. 合規(guī)使用提醒這個(gè)玩法本身沒(méi)有問(wèn)題但有幾點(diǎn)需要提醒。第一AI 生成的代碼版權(quán)歸屬以你使用的工具協(xié)議為準(zhǔn)如果要商業(yè)化分發(fā)建議先確認(rèn)服務(wù)條款。第二游戲的美術(shù)、音效、字體素材不要隨便從網(wǎng)上下載優(yōu)先使用開源或無(wú)版權(quán)素材避免侵權(quán)。第三不要把游戲部署到公網(wǎng)后開著高權(quán)限后臺(tái)純靜態(tài)頁(yè)面直接托管即可不需要服務(wù)器執(zhí)行環(huán)境。第四如果后續(xù)接入多人聯(lián)機(jī)、用戶賬號(hào)或排行榜需要考慮隱私和數(shù)據(jù)安全不能裸奔上線。12. 總結(jié)這個(gè)項(xiàng)目的價(jià)值不在于游戲本身多好玩而在于把 AI 編程的成本和效率看得非常清楚。不用 GPU不用復(fù)雜環(huán)境一個(gè)瀏覽器、一個(gè)對(duì)話窗口、幾分錢就能完成一個(gè)完整可玩的小游戲 demo。最值得先驗(yàn)證的就是5 分鐘跑通第一版這個(gè)鏈路提示詞寫清楚、本地服務(wù)跑起來(lái)、發(fā)現(xiàn)問(wèn)題直接丟給 AI 修。最容易踩的坑是反復(fù)讓 AI 改小參數(shù)token 費(fèi)用悄悄漲上去。后續(xù)如果你有興致可以把它擴(kuò)展成帶武器進(jìn)化、Boss 關(guān)卡的完整版本或者把同一套流程拿去生成答題工具、簡(jiǎn)歷頁(yè)面、數(shù)據(jù)可視化看板。這種低成本快速試錯(cuò)的開發(fā)方式比單純定義一個(gè)工具好用不少至少它真的能出結(jié)果。