Files
2026-08-27 22:54:14 +08:00

33 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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,需联网加载。