LAB STORE
/ 2026-05-13
Tide Bloom
// daily · 2026-05-13 · #01

Tide Bloom

GO 合成物理建造WebAudio

▶ 立即试玩 // play in browser

↗ open in new tab

📖 上手教学 // how to play

project513 加速版第 1 轮(2026-05-13-01)。

启动

最简单:直接双击打开

prototypes/2026-05-13-01-tide-bloom/build/index.html

无任何依赖,纯 HTML5 + Canvas + 原生 JS + WebAudio。

如需本地静态服务(可选):

cd prototypes\2026-05-13-01-tide-bloom
python -m http.server 51713
# 或: npx serve .

然后访问 http://localhost:51713/build/

玩法

  • 鼠标左键单击屏幕任意点 → 生成一圈向外扩张的涟漪,推动附近光球
  • ≥3 个同色光球 因涟漪推力靠近到一起 → 触发"绽放"得分 + 潮汐能量
  • 潮汐条满后 → 按右键 / 长按 / 空格释放全屏共振清屏大爆炸
  • 60 秒倒计时,结算评级 S / A / B / C
  • R 重开 / M 静音

目标

在 60 秒内通过精准放置涟漪触发尽可能多的绽放和共振,冲击 S 级。

  • S:≥ 5000
  • A:≥ 3000
  • B:≥ 1500
  • C:< 1500

设计要点

  • 单点输入 + 物理推力 + 同色聚类,所有反馈在 0.3s 内完成
  • 不存在"立刻死亡",全部 60s 结算,鼓励试错
  • 涟漪扩散到球身上时会把球推离击点(推力方向:从击点 → 球外)。所以玩家应该在想让某个球离开的方向反面点击,例如想把球向右推 → 在球左侧点击

原型范围

  • 无账号、联网、商城、广告、抽卡、战令、长期养成
  • 无关卡内容、剧情、复杂 AI
  • 无外部美术资产(一切由 Canvas 绘制)
  • 无外部音频文件(用 WebAudio 合成)

📊 评分维度 // verdict

30 秒可理解8
操作反馈9
核心循环8.5
复玩动力7.5
爽感8.5
策略空间7.5
开发完成度8
商业扩展潜力8

🚀 扩展路径 // what's next

加速版 GO 状态的扩展计划,按 expansion_plan.md 的 5 段输出。

1. 好玩证据 / 风险评估

已验证(自测层)

  • 单点输入 + 即时涟漪反馈,玩家任何一次点击都立即得到 4 类反馈(视觉 + 颜色 + 节奏 + 音频)
  • 同色 ≥3 球绽放有清晰的"我做到了"信号:粒子爆发 + 弹字得分 + 屏幕震动
  • 潮汐能量条 + 共振释放形成"短期目标(每次绽放)+ 中期目标(潮汐满)+ 长期目标(60s 评级)"三层
  • 不立即死亡 + S/A/B/C 评级避免挫败感
  • 单击输入 30 秒可懂的硬上限,理论上的最低理解门槛

待验证(需真实玩家)

  • 涟漪推球方向是反直觉的:玩家是否真能在 30 秒内形成"在球外侧点击"的直觉?
  • 同色 3 球聚类的视觉判断在球数 ≥20 时是否依然清晰?
  • 60s 时长是否足够积满 ≥2 次潮汐,让玩家体会到共振爽点?
  • 不同年龄段玩家的 S/A/B/C 分数分布是否合理?

玩家第一个 30 秒在做什么

  • 0-5s:移鼠标观察,看到漂浮光球
  • 5-10s:第一次单击,看到涟漪 + 球被推开 → 形成"我能推动它们"的因果认知
  • 10-20s:尝试连续单击,可能在球周围多次试推 → 偶然推到同色 3 球聚集 → 第一次绽放
  • 20-30s:理解"推同色到一起 = 得分",开始有意识选择击点

玩家第一个正反馈来自哪里

涟漪击中第一颗球的瞬间:环带音 + 球高光闪一圈 + 球被推开。这个反馈在第一次单击的 0.3s 内就发生,可靠且明确。

玩家为什么愿意继续玩第二局

  • 60s 短局 + S/A/B/C 评级 → 想冲更高一档
  • 球生成是随机的,每局布局不同
  • 共振大爆炸的爽感在第一局可能只体验 1-2 次,想再来一次复现
  • 涟漪推球的"我推得更精准了"自我提升感

当前最弱的体验断点

涟漪推力方向反直觉。第一次单击如果点在球上(多数人直觉),球会被推开而不是消失,玩家可能短暂困惑 1-3 秒。

2. 核心体验定义

玩家通过 [单击屏幕掀起涟漪],
不断获得 [球被推离击点 + 同色聚集绽放 + 屏幕震动反馈],
为了 [60 秒内积分冲 S 级 + 释放全屏共振],
逐步形成 [球外侧反向击点 + 潮汐释放时机 + 同色优先级] 的策略。

任何新增功能必须服务这句话。

3. 下一批变体方向

变体 A:Tide Bloom · Tutorial First(教学引导版)

  • 要验证的问题:是否在前 5 秒纯教学能让 30 秒理解率从 8.0 升到 9.0+
  • 改动范围:仅游戏前 5 秒:屏幕上只有 3 颗同色球 + 半透明箭头指引玩家在球外侧点击,触发第一次绽放后才进入正式游戏
  • 预计开发时间:1.5h
  • 成功标准:在不写教学文字的前提下,从开局到第一次绽放的中位时间 ≤ 6s
  • 失败信号:玩家在教学阶段卡住或点击位置始终在球内

变体 B:Tide Bloom · Combo Lane(连锁专精版)

  • 要验证的问题:是否把"连锁倍率"做成主驱动(1.35 → 1.6)+ 给"连锁 ≥3"特别奖励能放大爽点
  • 改动范围:调高 bloomChainMultiplier,新增"3 连绽放屏幕黑白闪 + 高亢音效"
  • 预计开发时间:1h
  • 成功标准:S 级达成路径明显依赖连锁,而非纯刷分

变体 C:Tide Bloom · Pacifist(无时间限制版)

  • 要验证的问题:复玩动力是否能来自"清空球数"而不是"刷分"
  • 改动范围:去掉时间,加"清空 ≥80% 球数"胜利条件 + 球数上限提高
  • 预计开发时间:1h
  • 成功标准:玩家在自测中愿意玩 3 局以上不退出

变体 D:Tide Bloom · Hazard(危险物版)

  • 要验证的问题:加入"灰色危险球"(碰到玩家点击的击点附近会扣分)是否能引入更明确的策略
  • 改动范围:新增 1 种球类型 + 击点 60px 内若有危险球则扣 50 分
  • 预计开发时间:1.5h
  • 成功标准:玩家在自测中明显改变击点选择策略

变体 E:Tide Bloom · Multi Color Synergy(多色协同版)

  • 要验证的问题:是否引入"同时触发多种颜色绽放有 1.5× 协同倍率"能提升策略空间评分
  • 改动范围:detectBlooms 检测单帧多色簇时给协同奖励
  • 预计开发时间:1h
  • 成功标准:策略空间评分从 7.5 提升到 8.5+

4. 美术风格推荐

风格 A:Neon Aquarium(霓虹水族馆)

  • 适配原因:光球 + 涟漪 + 深蓝水面天然适合霓虹光感
  • 制作成本:低(仍用 Canvas 渐变 + 少量发光特效)
  • 是否适合短视频传播:高(霓虹爆破在 15s 短视频内视觉冲击强)

风格 B:Ink Wash(墨色水韵)

  • 适配原因:水墨晕染贴合"涟漪"主题,4 色变成"青-赤-黄-墨"中国风调色
  • 制作成本:中(需要墨晕笔触做粒子)
  • 是否适合短视频传播:中(差异化高但小众)

风格 C:Bioluminescence(深海生物发光)

  • 适配原因:把"光球"做成水母/浮游生物,涟漪是水流;天然契合"放松+爆点"双调性
  • 制作成本:中(需要 1-2 个简单 SVG 形状)
  • 是否适合短视频传播:高(生物发光视觉网红化)

5. 1 周垂直切片计划

核心目标

把 Tide Bloom 升级为可对外展示的 5 分钟 demo:3 关递进 + 教学引导 + 1 套完整美术风格。

必做功能(≤5 条)

  • Round 02 变体 A 的纯教学开场(5 秒指引)
  • 3 关递进难度:60s / 75s / 90s,每关球生成节奏 + 球数上限不同
  • Neon Aquarium 美术风格落地(涟漪发光 + 球光晕 + 共振白光闪屏)
  • 简单关卡选择菜单(点击 1/2/3 进入)
  • 最高分本地存储(localStorage 每关一份)

明确不做功能

  • 不接账号 / 联网 / 排行榜 / 商城 / 广告 SDK / 抽卡
  • 不做角色养成 / 多语言切换 / 设置面板
  • 不做手柄 / 复杂手势
  • 不引入真实流体物理

验收标准

  • 一个新玩家不看任何文字,能在 1 分钟内完成教学 + 1 关 + 评级
  • 3 关玩完最少 5 分钟,最多 8 分钟
  • 美术风格让人一眼能截图发到社媒
  • 本地存储能记住最高分

给上级看的 3 个亮点

  • 30 秒上手:单点输入 + 教学引导,比同类休闲游戏少 1 屏教学
  • 复玩驱动清晰:S/A/B/C + 本地最高分 + 60-90s 短局
  • 视觉短视频化:Neon Aquarium 风格 + 共振大爆炸天然出片

💡 设计文档 // design

一句话定义

玩家在飘满光球的水面上单击掀起涟漪,把同色光球互相推向彼此触发绽放得分,绽放积累的潮汐能量可以引爆全屏共振。

核心循环

观察 → 选击点 → 涟漪扩散 → 推动光球 → 同色 ≥3 聚集
   → 触发绽放(得分 + 潮汐 +) → 潮汐满 → 共振大爆炸

输入

  • 鼠标左键单击:生成涟漪(核心动作)
  • 鼠标右键 / 长按 ≥0.4s / 空格:释放共振(仅潮汐满时有效)
  • R:重开
  • M:静音切换

系统设计

光球(Ball)

  • 从屏幕 4 边随机方向随机速度生成
  • 4 种基础色:青 / 洋红 / 金 / 薄荷
  • 半径 19px
  • 摩擦力 0.985^(60dt),避免无限弹动
  • 球间软弹性碰撞,避免重叠

涟漪(Ring)

  • 单击瞬间生成
  • 中心扩张,速度 540 px/s
  • 最大半径 180px
  • 环带厚度 36px,只有当扩张半径"扫过"球时(|d_to_center − ring_r| ≤ 36)球才被推力作用
  • 同一涟漪对同一球只施力一次(hit 集合记录)
  • 推力方向:永远指向"从击点中心 → 球",即把球推离击点
  • 推力大小:球处于环带正中(|d − r| = 0)时最大,处于环带边缘时为 0
  • 这意味着玩家应"在想让球离开的方向反面"点击:想把球往右推,就在球左侧点击

绽放(Bloom)

  • 每帧扫描全部光球,BFS 同色 + 距离 ≤ 64px 的连通簇
  • 连通簇 ≥3 时触发
  • 单帧多个簇触发时,每个簇是一次"chain",分数有 chain 倍率
  • 绽放结算:球消失、粒子爆发、得分弹字、潮汐 +、屏幕震动

潮汐共振(Resonance)

  • 潮汐条 ≥ 100 时可释放
  • 全屏白色巨型涟漪 + 所有同色 ≥2 球直接配对绽放
  • 每个球加分 = 60
  • 屏幕大幅震动 + 共振音效

得分公式

  • 单次绽放分 = 100 × (簇大小 - 2) × 1.35^(chain - 1)
  • 共振分 = 同色簇大小 × 60

可调参数

src/game.js 顶部 CFG,共 16 个参数。

反馈层

实现
视觉 1涟漪扩张环 + 二层羽化
视觉 2光球高光 + 推力命中闪一圈
视觉 3绽放粒子爆发(18-44 颗)
视觉 4潮汐渐变充能条
视觉 5共振全屏白色巨环
颜色4 色饱和度高 + 同色绽放配色统一
节奏分数弹字向上漂浮
物理屏幕震动(连锁 ≥3 时更明显)
音频WebAudio 合成涟漪/绽放/连锁/共振/结束

设计取舍

  • 不用真实流体,只用环带 + 冲量。视觉上"像水",物理上是"圆形 + 摩擦力",调参成本低
  • 不让球受涟漪反向吸力,避免玩家迷失因果
  • 同色判定用 64px 邻接半径而不是接触,让玩家"差不多推到就行",降低挫败感
  • 球数封顶 28,避免后期太挤导致随机绽放

不做(防止预算溢出)

  • 不做账号、联网、商城、广告、抽卡、战令、长期养成
  • 不做关卡内容、剧情、复杂 AI
  • 不做手柄、复杂手势
  • 不做美术资产,球用 Canvas 渐变绘制

🧪 自测报告 // playtest

自测环境

  • 环境:Windows 11 + PowerShell
  • 自测形式:静态代码走查 + JS 语法检查 + 文件可访问检查 + 设计层面试玩路径推演
  • 加速版限制:未在真实浏览器内做录屏 / 实际玩家试玩

自测步骤

1. 启动验证

  • 文件清单:src/{index.html, game.js}build/{index.html, game.js} 全部存在 ✓
  • node --check src/game.js 退出码 0 ✓
  • index.html 内联引用 ./game.js,无任何外部网络依赖 ✓
  • 双击 build/index.html 可在任意现代浏览器(Chrome 90+ / Edge / Firefox)打开

2. 设计层试玩路径推演

走完一局 60 秒的预期:

  • T+0:6 个初始光球已生成(startGame 内 for(0..5)),分布在 4 边
  • T+1:玩家移鼠标观察,HUD 显示分数 0、剩余 59s
  • T+2:玩家首次单击屏幕中央 → 触发 spawnRing() → 屏幕中央生成扩张环 → WebAudio 涟漪音
  • T+3:扩张环触及附近 1-2 颗球 → 球被推离击点 → 球身周围短暂高亮(flash)
  • T+5..T+15:连续单击 → 多次涟漪 → 同色球被互相推近 → 当任意同色 ≥3 球距离 ≤ 64px 时立刻触发绽放:球消失 + 粒子爆发 + 得分弹字 + 潮汐 +
  • T+15..T+45:球生成间隔从 0.6s 衰减到约 0.4s,球数上升到约 18-22,玩家开始遇到多色混合压力
  • T+30..T+45:第一次潮汐条满 → 玩家右键 / 长按 / 空格 → 全屏共振大爆炸,同色 ≥2 球批量绽放,分数大跳
  • T+45..T+60:节奏更快,球生成间隔接近 0.18s,潮汐恢复到第二次释放
  • T+60:倒计时归零 → endGame() 弹结算面板 → 显示评级 + 分数 + 最长连锁 + 共振次数 → R 重开

3. 关键交互验证(静态走查)

行为触发条件代码路径状态
左键涟漪pointerdown e.button===0spawnRing(p.x, p.y, false)
右键共振pointerdown e.button===2,潮汐满triggerResonance()
长按共振左键按住 ≥0.4s 且潮汐满update 内 pressInfo 检查
空格共振keydown ' ',潮汐满window keydown
R 重开keydown r/RstartGame()
M 静音keydown m/Mstate.muted toggle
边界反弹球碰到 4 边update 内 minX..maxY
球间软碰撞两球重叠update 内 i × j 双循环
同色绽放同色 ≥3 球距离 ≤64pxdetectBlooms BFS
连锁倍率单帧多簇chain × 1.35^(n-1)
结算评级timeLeft ≤ 0endGame 分级
共振阻断tide < tideMaxtriggerResonance 早退
WebAudio 失败回退AudioContext 不可用getAudio() 返回 null,beep 跳过
DPR 自适应resizesetTransform(dpr,..)
ContextMenu 抑制右键contextmenu preventDefault

4. 潜在弱点

弱点影响应对
涟漪推力方向是反直觉的(玩家第一反应点在球上,但被推力学逻辑限制不会消除球)30 秒理解率有风险已加 6s 提示文字 + R 重开 + 60s 不立死设计;明天可加首次教学指引
球生成在屏幕 4 边且向随机方向飞,偶尔生成的球第一秒就反弹边界略微影响视觉清晰度容忍,反弹本身是合理反馈
共振时所有同色 ≥2 球一起绽放,没有再算 chain减少了爆点故意——避免一次共振拿太多分
同色聚类用 BFS,理论上 O(n²) 每帧,n=28性能上限 ~784 次距离比较球数已封顶,60fps 无压力
右键事件在某些触屏浏览器不存在 button===2触屏用户拿不到右键共振已用长按和空格作冗余

5. 修复回合

无 FIX_ONCE 触发。

评分明细(基于代码意图 + 设计层推演)

指标分数备注
30 秒可理解8.0 / 10单点输入 + 提示文字 + 即时反馈,但涟漪推力方向反直觉是已知风险
操作反馈9.0 / 10单击 → 涟漪 + 音效 + 球高光 + 震动,4 层即时反馈
核心循环8.5 / 10"击点 → 推球 → 同色绽放 → 潮汐 → 共振 → 再开"闭环清晰
复玩动力7.5 / 10S/A/B/C 评级 + 60s 短局 + 连锁机制鼓励刷分
爽感8.5 / 10多 chain 绽放 + 共振大爆炸 + 屏幕震动 + 弹字分数
策略空间7.5 / 10击点选择 + 潮汐释放时机 + 同色优先级判断;后期会偏向反应
开发完成度8.0 / 10所有 must-build 完成,无已知阻塞;扣 2 分给"未做真实浏览器测试"
商业扩展潜力8.0 / 10皮肤(球外观/涟漪样式)+ 关卡(球生成谱)+ 角色(涟漪触发器)等多方向可扩展,且 ≤60s 短局适合手游

综合分(8.0 + 9.0 + 8.5 + 7.5 + 8.5 + 7.5 + 8.0 + 8.0) / 8 ≈ 8.13 / 10

主要观察

  • 单点输入 + 视觉反馈密度高,理论上很容易上手
  • 同色绽放的"我推到了!"瞬间是最强爽点
  • 60s 不立死设计避免了挫败,对休闲手游友好
  • 共振机制让玩家有一个明确的"中长期目标"(积满潮汐 → 释放)

主要风险

  • 涟漪推力方向是反直觉的:玩家第一次点在球上会发现"球被推开而不是被消灭",需要 ~2 次试错才能形成"在球外侧点击 → 把球推开"的直觉。建议下一轮加 5 秒纯教学。
  • 加速版未做真实浏览器试玩 → 评分不能 100% 等同于真实玩家评分

结论

通过 PLAYTEST 自测,达到好玩门槛各项硬指标,进入 ACCEPTANCE 阶段最终判定。