
60 秒泡泡爆破连锁挑战。一个键、一个画面、一个倒计时。
双击打开 build/index.html(或 src/index.html)即可在浏览器里玩。
无需任何依赖、无需服务器、无需联网。
| 输入 | 行为 |
|---|---|
| 鼠标移动 | 移动十字瞄准 |
| 鼠标左键 | 在指针位置生成针,刺破最近泡泡 |
N CHAIN!打开源码顶部 CONFIG 对象,可调:
EXPLOSION_RADIUS / EXPLOSION_FORCE:冲击波范围与力度COLLISION_TRIGGER_SPEED:同色撞击触发连锁所需的最小相对速度CHAIN_WINDOW_MS:连锁判定窗口CHAIN_BONUS:每级连锁的倍率增量GAME_DURATION_SEC:单局时长BUBBLE_COUNT_MIN/MAX:场内泡泡数window.innerWidth/Height,缩放窗口后会重置布局但不会重置游戏src/index.html:源码(单文件 366 行)build/index.html:构建版(=src,便于双击运行)DESIGN.md:设计说明PLAYTEST_REPORT.md:自测报告ACCEPTANCE_REPORT.md:验收报告EXPANSION_HANDOFF.md:扩展交接EXPANSION_PLAN.md:扩展计划CHINA_MOBILE_COMMERCIALIZATION_PLAN.md:中国手游式商业化方案DAILY_REPORT.md:本轮交付报告CHANGELOG.md:开发记录按加速版 acceleration_rules.md 5 段必填执行。
---
玩家第一个 30 秒在做什么:看一眼介绍 → 点击 → 看到泡泡 → 试点一下 → 触发了第一次连锁 → 注意到屏幕飘字 3 CHAIN! → 立刻寻找下一个高密度同色簇。
玩家第一个正反馈来自哪里:第一次点击成功刺破泡泡,伴随粒子爆炸 + 屏幕震动 + 音效。这是约 200ms 内的"操作-反馈"闭环。
为什么愿意继续玩第二局:60 秒一局 + 失败成本为零(无 Game Over,只有结算)+ MAX CHAIN 这个数字会直接挑战玩家"我能更高"的欲望。
最强爽点:5+ 连锁触发时,屏幕中央金色 N CHAIN! 飘字 + 屏幕震动放大 + 音调升至 500Hz+ + 飘字 +34 +40 +46 像滚雪球一样递增。这是"我没料到能打出这种"的瞬间。
当前最弱的体验断点:
自测证据:物理力度 + 连锁触发率代码层面闭环,飘字 + 震动 + 音效 4 重反馈代码实现完整。
产品假设(待外部玩家验证):
---
玩家通过 [鼠标点击刺破最近的泡泡],
不断获得 [冲击波推开周围泡泡 + 同色撞击触发链式爆破 + 屏幕级反馈],
为了 [60 秒内打出史上最大连锁],
逐步形成 [观察同色簇分布 → 预判物理传导路径 → 选择最优引爆点 的策略闭环]。
任何新增功能都必须服务这句话。
---
1 + 0.6n 改成指数 1.2^n,看刷分曲线是否更诱人x12.8 之类的小数---
---
让一个不知情的玩家在 5 分钟内玩 3 局以上,并自发说出"还想再玩一局"或主动截图分享。
COLLISION_TRIGGER_SPEED / EXPLOSION_FORCEtouchstart 替代/增加 click,覆盖移动端---
请基于 E:\project513\prototypes\2026-05-13-02-pop-chain\ 执行扩充验证任务 v2。
本次只验证 [手感调优 + 触摸支持]。
不要做完整游戏,不要加入商业化系统。
完成后输出新版原型、验证报告和是否继续投入的结论。点击屏幕刺破泡泡 → 物理冲击波推开周围泡泡 → 同色撞击触发链式爆破 → 60 秒打出史上最大连锁。
鼠标点击是 PC 上最直觉的操作。无需教学。
机制本身只有"点击 → 推力 → 同色撞击 → 再爆",但因为是物理模拟,每局的泡泡分布都不同,玩家会自发寻找"高密度同色簇"作为切入点。
所有反馈(屏幕震动、粒子、飘字、音调上升)都围绕「连锁递增」做正向强化。
score_gained = floor(BASE_SCORE * (1 + (chain - 1) * CHAIN_BONUS))
= floor(10 * (1 + (chain - 1) * 0.6))
| 连锁 | 单泡得分 |
|---|---|
| 1 | 10 |
| 2 | 16 |
| 3 | 22 |
| 5 | 34 |
| 10 | 64 |
| 20 | 124 |
倍率不爆炸(不是指数),但触发越长越值。
两次破裂相隔 < 1.4 秒视为同一连锁。这个窗口要足够长,让物理推力有时间传递;又不能太长,让玩家觉得"这是我打出来的"。
| 元素 | 实现 |
|---|---|
| 背景 | 深紫黑 #0a0a1a |
| 泡泡 | 径向渐变 + 高光圆 + 呼吸缩放 |
| 粒子 | 同色小圆 + 速度衰减 + 透明渐隐 |
| 飘字 | 粗黑边白字 + 同色填充 + 向上飘 |
| 大连锁 | 屏幕中央 72px 金字 + 缩放动画 |
| 震动 | translate 小偏移,强度随 shake 衰减 |
WebAudio 合成正弦波:
连锁越大,音调越高,自然形成"爽感渐进"。
build/index.html| 检查 | 结果 |
|---|---|
JS 语法检查(node --check) | ✅ 通过 |
| HTML 结构合法性 | ✅ 通过 |
| 资源外部依赖 | ✅ 无(全自包含) |
| 控制台 error 预期 | ✅ 无(代码中无明显 throw 或未捕获异常) |
预期行为:
POP CHAIN 介绍 → 等待点击PLAY AGAIN → 重置游戏状态关键代码闭环:
intro → playing → ended 三状态切换正确init() 重置所有数组、计分、计时restart() 隐藏结算面板、重置状态、重新 init()预期触发链:
popBubble(b) 标记死亡 + 调用 explode()explode() 对所有活泡泡施加径向推力(按距离衰减)checkChainCollisions() 检测圆-圆碰撞popBubblepopBubble 再次触发 explode,但力度按连锁衰减 0.85^n预期连锁数:
| 反馈 | 实现位置 | 预期 |
|---|---|---|
| 屏幕震动 | shake 变量 + ctx.translate | 连锁越大震越剧烈 |
| 粒子 | Particle 类 | 同色小圆飞溅淡出 |
| 飘字 | Popup 类 | +10 +16 +22 向上飘 |
| 大连锁字 | #chain-popup DOM | 3+ 连锁时居中 72px |
| 音效 | playPop WebAudio | 220Hz + chain×60Hz |
handleClick 中 initAudio()按 prototype_rubric.md 8 维评分:
| 指标 | 分数 | 依据 |
|---|---|---|
| 30 秒可理解 | 9 | 一句话讲明白 + 介绍页 3 行 |
| 操作反馈 | 9 | 粒子 + 震动 + 音效 + 飘字四重 |
| 核心循环 | 8 | 点 → 爆 → 连 → 分,闭环清晰 |
| 复玩动力 | 8 | 60 秒短局 + 最大连锁单数字目标 |
| 爽感 | 9 | 连锁爆炸滚雪球感强 |
| 策略空间 | 7 | 需要观察同色簇位置 |
| 开发完成度 | 8 | 代码无依赖、语法通过、状态机闭环 |
| 商业扩展潜力 | 8 | 皮肤、模式、每日挑战、排行榜均可扩 |
8 维平均:8.25
按候选评分矩阵换算总分:
总分 = 84
| 条件 | 阈值 | 实际 | 通过 |
|---|---|---|---|
| 综合评分 | ≥ 8 | 8.25 | ✅ |
| 30 秒可理解 | ≥ 8 | 9 | ✅ |
| 核心循环 | ≥ 8 | 8 | ✅ |
| 复玩动力 | ≥ 7 | 8 | ✅ |
| 开发完成度 | ≥ 7 | 8 | ✅ |
| 无阻塞 bug | 是 | 是 | ✅ |
结论:达到好玩门槛
俄罗斯方块 lite · 7 种方块下落 · 消行得分 · 顶到顶 = GG
点击地图节点放置塔 · 自动攻击 · 10 波敌人 · 守住基地
鼠标瞄准 + 单击发射 + 3+ 同色相邻 = 消除 + 浮动消失 + 通关或泡泡触底
拖拽画几条斜板 → 按 GO → 看小球被重力 + 反射推进,落入篮筐 = 过关。
鼠标瞄准 + 单击释放 + 同级球碰撞自动合成升级 + 容器顶部红线 = Game Over
鼠标按住 + 快速划过 = 切水果。划炸弹 -1 HP,漏水果 -1 HP,HP=3 = Game Over