33 lines
2.1 KiB
Markdown
33 lines
2.1 KiB
Markdown
# ARCH — 合成交大(Integrate SJTU)
|
||||
|
|
|
|||
|
|
## 技术选型
|
|||
|
|
- 单 HTML 文件 + Canvas 2D 渲染。
|
|||
|
|
- Matter.js 0.19.0(CDN:https://cdnjs.cloudflare.com/ajax/libs/matter-js/0.19.0/matter.min.js)。
|
|||
|
|
- 原生 JavaScript,无构建步骤;PowerShell 以 UTF-8 写出。
|
|||
|
|
|
|||
|
|
## 模块划分
|
|||
|
|
- SVG_STRINGS / BADGE_CACHE:9 个校徽 SVG 内联字符串、data URI 加载与离屏 Canvas 缓存。
|
|||
|
|
- LEVELS / WEIGHTS:9 级半径/颜色/校名数据与解锁权重表。
|
|||
|
|
- 物理层:createWorld(引擎+三面墙)、createBall、isMergeable、doMerge、wakeNearbyBalls。
|
|||
|
|
- 玩法层:pickLevel(权重随机)、dropBall(冷却)、combo/计分、游戏结束判定。
|
|||
|
|
- 渲染层:HUD、虚线红线、预告球与预测落点、球体、粒子/光环/浮动文字/撒花。
|
|||
|
|
- 输入层:pointerdown/move/up 控制瞄准与投掷,坐标按画布缩放映射。
|
|||
|
|
|
|||
|
|
## 数据流
|
|||
|
|
- 页面加载 → preloadBadges 异步加载 9 张校徽入缓存 → 用户 pointer 移动预告球 → 松手投掷入物理世界 → Matter 60Hz 固定步长推进 → collisionStart 收集同等级接触对 → pendingMerges(60ms 延迟)→ doMerge(冻结旧球、移除、加权中心创建新球)→ 计分/解锁/特效/唤醒附近球 → 渲染循环。
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
- D:\integrate_sjtu\index.html(游戏本体)
|
|||
|
|
- D:\integrate_sjtu\PRD.md / ARCH.md / STATUS.md(三文件文档)
|
|||
|
|
- D:\integrate_sjtu\assets\1_西交.svg … 9_上交.svg(校徽资源,只读引用)
|
|||
|
|
|
|||
|
|
## 接口设计
|
|||
|
|
- drawBadge(ctx, level, x, y, r):缓存优先绘制校徽,兜底为特征色圆+白色缩写。
|
|||
|
|
- wakeNearbyBalls(cx, cy, radius):对距离 < radius 的球先置 sleepThreshold=0 再恢复 60(并强制唤醒)。
|
|||
|
|
- pickLevel():按当前 maxUnlocked 对应权重表随机取 1..N 级。
|
|||
|
|
- isMergeable(a, b):同等级、均为游戏球、未移除、非静态、距离 ≤ 半径和+10px。
|
|||
|
|
- doMerge(a, b):校验后冻结并移除旧球,在加权中心创建新等级球。
|
|||
|
|
- createWorld():重建引擎与左右墙/底部(摩擦 0.08/0.08/0.3,restitution 0)。
|
|||
|
|
|
|||
|
|
## 部署方案
|
|||
|
|
- 静态文件直接部署或本地打开;Matter.js 依赖 CDN,需联网加载。
|