# 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,需联网加载。