⚠ 部署前请编辑本文件底部 CFG 三行:GitHub ID / 邮箱 / 域名。

Agent 开发者 × AIGC 创作者
做游戏、写求解器、搭产线。

这个页面上的每个项目都能玩、能查、能挖到底:数字由脚本跑出来,代码在 GitHub,欢迎面试官当场复验。

1056 关 · Godot 解谜
50 款 · 街机合集
7/7 关 · 求解器可证可通
1,000+ 次 · skill 社区下载
59 件 · skill 站点在线

01作品

三个方向:算法验证、内容管线、工程化量产。每个都有脚本、有数字、可复验。

河豚吉祥物

河豚 H5 · 物理益智 + 可解性证明

H5 / JavaScript / Beam Search

单文件 49KB 的深海解谜。把游戏同源的固定步长物理内核抽成无 DOM 模块,用 beam search 为每关搜出标准解并写回关卡数据——「能通关」不是感觉,是跑出来的。

海狮精灵

海狮洗澡时间 · 引水解谜

Godot 4.7 / 1056 关 / 审计 9/9

纯自产美术与音频的引水解谜。角色迭代不靠肉眼验收:9 条精灵可读性断言,每条配负控与正控,在「游戏内 60px 真实绘制尺寸」的采样结果上量。

街机合集预览

要你命3000 · 50 款怀旧街机合集

Godot 4.7 / 50 款 / 130 轮打包迭代

弹射拆塔、泡泡连锁、横版枪战、迷宫追逐、方块消除等 50 种玩法装进一个 APK(约 40–71MB),统一 GameHost 框架 + 触屏层,兼容渲染管线跑低端设备。

02在线试玩

河豚 H5,手机和桌面都能直接玩,与本地源码同一文件。

单文件 49KB · 7/7 关由同源求解器证明可通 · 桌面/手机自适应

03技术文

不写教程搬运,只写我踩过的:每个结论背后都有一次被证伪的旧方案。

ALGORITHM

让求解器替我玩自己的游戏

决策段 12 帧、beam 320、启发式排序、0.5 量化去重——以及为什么「有一关没解出来就拒绝写文件」。

QUALITY

1056 关的角色迭代,9 条断言说了算

海狮还是海豹?外耳叶像素数回答。第一版眼睛判据被模糊负控证伪(真图 176 / 负控 91),阈值形同虚设——后来怎么改的。

AIGC

别再重掷提示词了:角色一致性产线

free 模型每轮细节必漂,提示词永远锁不住脸。正确分工:模型只供一张母版,一致性交给本地确定性合成。

让求解器替我玩自己的游戏:物理谜题的自动可解性验证

H5 · Beam Search · 2026-11

关卡设计有个尴尬问题:「我觉得这关能过」不算证明,人工试玩又覆盖不了全部走法。我的做法是让程序替我玩——而且玩的必须是同一套物理。

前提:物理内核与渲染分离

游戏是单文件 HTML,但核心模拟层包在 __CORE_BEGIN__/__CORE_END__ 标记里,不碰 DOM。测试加载器用 Node 的 vm 沙箱把这段源码原样抽出来跑——浏览器和游戏逻辑之间没有第二套实现,也就没有「仿真过了真机翻车」的缝隙。

搜索设计

const EPOCH = 12;   // 每个决策段 = 12 帧(0.2s)
const BEAM  = 320;  // 每段保留的候选数

// 排序:离终点越近越好;顶开的水母/吃到的珍珠有加成;帧数微小惩罚
next.sort((a, b) => (a.s.best - b.s.best) * 1
  - (b.s.popped + b.s.pearlsGot - a.s.popped - a.s.pearlsGot) * 12
  + (a.s.f - b.s.f) * 0.02);

写回关卡数据:全有或全无

搜到的解会压缩成关键帧序列,写回每关的 solve 字段——它同时是玩家可回放的「标准答案」。写入是 fail-closed 的:找不到关卡锚点就 throw 拒绝改写,有一关没搜出解就整批不写,先改关卡设计或加大搜索预算。

if (!done) throw new Error('一个解都没搜到,不写文件');
// 主流程:有关卡没搜到解 —— 不写入,先改设计或加大搜索预算

结果

7 关全部可解(7/7),每关输出用时、关键帧数、顶开数、气泡收集率、爆发次数。求解脚本和关卡数据同仓库,任何人 node tests/search_solve.js 复跑一遍就能核对这页面上的数字。

1056 关的角色迭代:9 条精灵断言,每条配负控

Godot 4.7 · 内容管线 · 2026-11

这款引水解谜从早期原型迭代到海狮形象,1056 关、美术音频全自产。角色迭代最大的风险不是画错,而是「512 源图看着挺好,游戏里 60px 一坨糊」——肉眼验收在这个量级上不可靠,得让脚本说了算。

在真实绘制尺寸上量

游戏里精灵只被 GPU 缩小一次(512→约 60px,无 mipmap 的 GL_LINEAR)。审计脚本先用 PIL 逐像素复现这条采样链,然后在「60px 结果图」上做可读性断言,而不是在源图上自欺。

9 条断言

断言在测什么阈值
whisker_outside_body胡须必须探出身体轮廓(第一识别特征)>400 px
ear_flaps_present外耳叶——「海狮」而非「海豹」的唯一硬证据>150 px
nose_darkest_block鼻镜是脸上最暗成块区(额头区做对照)比值 ≥4.0
flipper_span前鳍张开到画幅两侧,体型读起来是鳍脚类跨度 ≥0.86
coverage_vs_croc替换后体量不变(鳄鱼基线 80.1%)78–88%
portal_no_croc_green传送门贴图里不得残留旧角色=0
portal_no_baked_seal也不得预烘焙新角色(运行时只画一次)<50 且正控>1000
disp_eye_structure60px 下眼里必须同时有暗块和亮块≥12 且负控不过
disp_pupil_dark60px 下瞳孔占得住(不是白饼)≥0.20 且负控不过

判据自己也要被审计

每条判据配「模糊负控」:把小于 50px 的结构全抹掉后必须不及格——如果糊图也能过阈值,说明判据在空转。第一版眼睛判据用「眼内明暗极差」,实测真图 176、糊负控 91,阈值形同虚设,被负控当场证伪;换成「暗块/亮块成块计数取 min」后真图 22、负控 0,才敢上线。残留检测同理配「正控」:合成一块角色脚印大的色块,同一判据必须看得见,否则「0 像素」只是假绿。

结果

9/9 PASS 才算角色验收通过。关卡本体是数据驱动(levels.gd + 23,745 行的 levels_extra.gd 数据),内容与代码分离,加关卡不动逻辑。审计脚本在仓库里:python tools/sprite_audit.py。

别再重掷提示词了:一条角色一致性 AIGC 产线

ComfyUI · 图像处理 · 2026-11

用 AI 出游戏素材最先撞的墙:同一个角色,每轮细节必漂——腮红位置、鼻形、描边粗细全在变。反复重掷提示词永远锁不住脸,这是概率采样的本质,不是你 prompt 写得不够好。

把「生成」和「一致性」拆开

一致性从「祈祷采样」变成「文件复制」,100% 可复现。云端(ComfyUI / 图像编辑 API)负责产能,本地负责确定性,各干各擅长的。

踩坑清单

结果

这条产线支撑了合集里多个游戏的图标与角色贴图:一个角色,全场景同一张脸。它也是我对「AIGC 落地」的理解——产线不是会写 prompt,是把不确定的模型框进确定的流程里。

04关于我

// 背景

浙江理工大学科技与艺术学院 酒店管理(本科)· 嘉兴职业技术学院 跨境电商(大专)。两段都不是计算机科班——所以我把每个项目都做成可验证的,让代码代替学历说话。

持大学英语四级、计算机二级、跨境电商B2C数据运营中级证书。自建 skill 分享站(Cloudflare Pages,国内直连,59 件在线),累计下载 1,000+ 次。

// 技术栈

  • 游戏/前端:Godot 4.x、JavaScript、H5 单文件架构、像素美术管线
  • AIGC:ComfyUI 工作流、角色一致性产线、图像批处理(sharp/PIL)
  • 算法/工具:beam search、固定步长物理仿真、自动化审计脚本(Python)
  • Agent:AI Agent 开发经验,工具链与技能体系搭建