用 Claude AI 从零开发了一个完整的 Coldplay 主题游戏 - 全程技术分享 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
suifeng666
V2EX    分享发现

用 Claude AI 从零开发了一个完整的 Coldplay 主题游戏 - 全程技术分享

  •  
  •   suifeng666 83 天前 1077 次点击
    这是一个创建于 83 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是根据 Coldplay Canoodlers 做的一款升级版 Coldplay Canoodlers Plus ,增加了一些关卡。

    前言

    大家好,我是一名开发者萌新,最近和 Claude AI 协作完成了一个完整的网页游戏开发项目。整个过程非常有趣,想和 V2EX 的朋友们分享一下这次 AI 协作开发的经历和技术细节。

    游戏简介:
    - 名称:Coldplay Canoodlers Plus
    - 类型:观察类游戏,在演唱会人群中找出情侣
    - 技术栈:TypeScript + Phaser 3 + Vite
    - 特色:单 HTML 文件打包,支持 iframe 嵌入,双语言支持
    - 体验网址: https://coldplaycanoodlersgame.com/coldplay-canoodlers-plus
    - 多语言:右上角提供了中英双语。

    技术架构

    核心技术选型

    前端框架:Phaser 3.70 (游戏引擎)
    开发语言:TypeScript 5.3.3
    构建工具:Vite 7.0.5 + vite-plugin-singlefile
    打包方式:单 HTML 文件 (13.4MB)
    资源处理:Base64 内联 + Blob URL 转换

    项目结构

    src/
    ├── scenes/ # 游戏场景
    ├── gameObjects/ # 游戏对象
    ├── config/ # 配置文件
    ├── utils/ # 工具函数
    └── assets/ # 资源文件

    AI 协作开发过程

    第一阶段:需求分析与技术选型

    我的需求: 开发一个 Coldplay 主题的找情侣游戏

    Claude 的建议:
    1. 选择 Phaser 3 作为游戏引擎(轻量级,适合网页游戏)
    2. 使用 TypeScript 提高代码质量
    3. 采用模块化场景管理
    4. 考虑单文件打包便于分享

    这个阶段 Claude 帮我制定了完整的技术方案,包括目录结构、开发规范等。

    第二阶段:资源生成与处理

    这是最有趣的部分,Claude 帮我生成了所有游戏资源:

    1. 像素风格图像生成
    // Claude 生成的像素艺术代码示例
    function generateCrowd(width: number, height: number): string {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d')!;
    canvas.width = width;
    canvas.height = height;

    // 生成观众席背景
    for (let row = 0; row < rows; row++) {
    for (let seat = 0; seat < seatsPerRow; seat++) {
    const persOnColor= colors[Math.floor(Math.random() *
    colors.length)];
    // 绘制人物像素图...
    }
    }

    return canvas.toDataURL();
    }

    2. 音频资源生成
    Claude 还帮我生成了游戏音效,虽然是合成的简单音调,但完全满足游戏需求。

    第三阶段:核心游戏逻辑实现

    创新的鼠标悬停机制:
    // 核心交互逻辑
    private setupInteractions(interactiveArea: Rectangle): void {
    interactiveArea.on('pointerover', () => {
    if (!this.isRevealed) {
    this.showRevealBox(); // 显示 60x60 透明区域
    }
    });

    interactiveArea.on('pointermove', (pointer: Pointer) => {
    if (pointer.isDown && !this.isRevealed) {
    this.showRevealBox(); // 支持触屏拖动
    }
    });
    }

    难度递增算法:
    // 每关目标数量 = 3 + (关卡-1) × 5
    init(data: GameData): void {
    this.totalCouples = 3 + (this.currentLevel - 1) * 5;
    this.timeRemaining = 60; // 固定 60 秒
    }

    第四阶段:技术难题解决

    开发过程中遇到了几个技术挑战,Claude 都帮我一一解决:

    1. CORS 问题
    // Base64 转 Blob URL 解决方案
    function base64ToBlob(base64: string, mimeType: string): string {
    const base64Data = base64.split(',')[1];
    const byteCharacters = atob(base64Data);
    const byteArray = new Uint8Array(byteCharacters.length);

    for (let i = 0; i < byteCharacters.length; i++) {
    byteArray[i] = byteCharacters.charCodeAt(i);
    }

    const blob = new Blob([byteArray], { type: mimeType });
    return URL.createObjectURL(blob);
    }

    2. TypeScript 类型错误
    // 解决继承体系不一致问题
    private playErrorAnimation(distractor: Couple | RealCouple): void {
    // 统一处理不同基类的游戏对象
    }

    3. 移动端适配
    /* 响应式设计 */
    @media (max-width: 768px) {
    body {
    touch-action: pan-x pan-y;
    }
    }

    /* iframe 兼容性 */
    body.iframe-mode {
    height: 800px;
    width: 1200px;
    }

    第五阶段:国际化与优化

    多语言支持:
    export class LanguageManager {
    private static currentLanguage: Language = 'en'; // 默认英文

    static getText(key: keyof LanguageTexts): string {
    return LANGUAGE_TEXTS[this.currentLanguage][key];
    }
    }

    性能优化:
    - 资源预加载和内存管理
    - 事件监听器正确绑定/解绑
    - Phaser 对象生命周期管理

    AI 协作的优势与感悟

    优势

    1. 快速原型开发:从想法到可玩原型只用了几个小时
    2. 全栈能力:Claude 既能写代码又能生成资源
    3. 问题解决能力:遇到 bug 能快速定位和修复
    4. 文档生成:自动生成了完整的攻略指南

    挑战

    1. 上下文限制:长期开发需要多次对话
    2. 创意局限:AI 更适合执行明确的技术任务
    3. 调试过程:复杂 bug 需要人工介入

    最佳实践

    1. 明确需求:给 AI 详细的技术规格
    2. 模块化开发:分阶段完成,便于管理
    3. 版本控制:及时保存重要节点的代码
    4. 测试验证:每个功能都要实际测试

    最终成果

    - 代码行数:约 2000 行 TypeScript
    - 文件大小:13.4MB (压缩后 9.3MB)
    - 开发时间:约 3 天(断断续续)
    - 功能完整度:95%以上

    技术特性:
    - 单 HTML 文件,无外部依赖
    - 支持 iframe 嵌入
    - 移动端适配
    - 双语言支持
    - 本地存储功能
    - 响应式设计

    体验地址: https://coldplaycanoodlersgame.com/coldplay-canoodlers-plus

    游戏支持直接在浏览器中运行,也可以通过 iframe 嵌入到其他网站。

    总结

    这次 AI 协作开发的经历让我深刻体会到:

    1. AI 是优秀的编程助手:在明确需求的前提下,能够快速实现功能
    2. 人机协作是趋势:发挥各自优势,效率远超单独开发
    3. 技术门槛降低:即使不是游戏开发专家,也能做出不错的作品

    对于 V2EX 的朋友们,如果你们也想尝试 AI 协作开发,建议:
    - 选择熟悉的技术栈
    - 准备详细的需求文档
    - 分模块逐步实现
    - 保持代码质量标准

    讨论

    想听听大家对 AI 协作开发的看法:
    1. 你们有类似的 AI 协作经验吗?
    2. 对于游戏开发,还有哪些可以优化的点?
    3. 单 HTML 文件打包这种方式实用吗?
    4. 如果有体验不好的或者有 bug ,欢迎提出!

    期待和大家交流!

    ---
    PS:
    这个项目让我对 AI 的能力有了全新认识,Claude 在技术问题解决上的表现真的超出
    预期。如果大家对具体的技术实现细节感兴趣,我可以开源部分代码供学习参考。
    suifeng666
        1
    suifeng666  
    OP
       83 天前
    第一个版本的开发文档,由 chatgpt 的 O3 模型进行生成。
    # ColdplayCanoodlersPlus MVP开发文档(基础版本)

    [一] 项目目标
    在网页端实现最小可玩版本,让玩家点击观众席找出情侣并播放短视频。
    总包体≤10MB ,移动端可流畅运行。
    代码、资源与流程尽可能借助 AI 自动化/加速。

    [二] 功能范围( MVP )

    1. 单一关卡( Coldplay原始片段观众席)。
    2. 点击命中检测:命中情侣 → 播放视频;误点无反馈。
    3. 计时成绩:完成时间ms 。
    4. 本地排行榜:使用localStorage保存前10成绩。
    5. 基础 UI:开始页、游戏页、结果页。
    6. 音视频兼容:首触发播放、移动端静音策略。

    [三] 技术栈选择
    前端框架:Vite+Phaser3+TypeScript 。
    构建部署:Vercel(零配置、自动CI )。
    AI辅助:
    OpenAIAPI/GPT4o:生成代码片段、注释、提示文本。
    SDXL+PixelartDiffusion:批量生成像素观众(可选)。
    分析:Plausible自建实例(简单事件埋点)。

    [四] AI在开发中的角色

    1. 代码生成:使用ChatGPT编写场景、命中逻辑、UI组件草稿。
    2. 资产生成:提示"pixel art crowd cheering in stadium topdown"生成占位图;用DALLE或SDXL 。
    3. 问题排查:将错误栈复制给GPT获取修复步骤。

    [五] 项目目录结构

    ```
    / 项目根
    ├─public/ favicon 、manifest
    ├─assets/
    │ ├─crowd/ 观众像素图
    │ ├─video/ coldplay_clip.mp4
    │ └─data/ levels.json
    ├─src/
    │ ├─main.ts 入口,创建游戏
    │ ├─game.ts Phaser配置
    │ ├─scenes/ Boot,Menu,Play,Result
    │ └─utils/ hitTest.ts,timer.ts
    └─vite.config.ts
    ```

    [六] 数据文件示例( levels.json )

    ```
    [
    {
    "id": "coldplay01",
    "image": "/assets/crowd/coldplay_a.png",
    "video": "/assets/video/coldplay_clip.mp4",
    "targets": [{ "x": 432, "y": 188, "r": 30 }]
    }
    ]
    ```

    [七] 任务拆解 & 时间预估(单位:人日)

    | 阶段 | 目标 | 任务 | 预计 | AI介入 |
    | ------ | ---------------- | -------------------------- | ---------- | --------- |
    | 0 环境 | 跑通HelloPhaser | Node/Vite/TS配置 | 0.5 | GPT配置脚本 |
    | 1 画面 | 加载观众图,点击打印坐标 | BootScene,PlayScene骨架 | 1 | GPT生成代码 |
    | 2 命中 | 判断命中并圈选 | hitTest 、绘制圆环 | 1 | GPT调试算法 |
    | 3 视频 | 命中后播放mp4 | DOMoverlay或PhaserVideo | 0.5 | GPT解决兼容 |
    | 4 计时 | 计时 & 结果页 | Timerutil,ResultScene | 0.5 | GPTUI文案 |
    | 5 排行 | localStorage排行榜 | 排序、存取、展示 | 0.5 | GPT代码改写 |
    | 6 部署 | Vercel自动构建 | github→vercel | 0.5 | GPTCI脚本 |
    | **合计** | 基础可玩上线 | | **45人日** | 全程辅助 |

    [八] 交付物

    1. Git仓库( MITLicense )。
    2. 线上演示URL 。
    3. README含快速启动、Prompt示例。
    4. 未来迭代清单。

    [九] 风险&对策

    * 版权:使用像素化+改名处理;视频走YouTubeembed规避包体。
    * 移动自动播放:首触发后加载音视频。
    * 包体超限:图像WebP压缩、视频<3MB 。

    [十] 下一步升级方向(仅列题目)
    多关卡、道具系统、Supabase在线排行、社交分享、激励广告、自动 AI生成新关卡。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1303 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:53 PVG 07:53 LAX 16:53 JFK 19:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86