# 技术架构设计 ## 一、技术栈 | 层 | 技术 | 说明 | |---|---|---| | 框架 | Next.js 16 (App Router) | 既有栈,SSR + API 一体 | | 语言 | TypeScript 5 | 全量类型 | | 样式 | Tailwind CSS 4 + shadcn/ui | 既有 UI 组件库 | | 渲染 | HTML5 Canvas 2D | 星空/粒子/晶体/解码阵列 | | 客户端状态 | Zustand + persist | 游戏状态 + localStorage 持久化 | | 服务端状态 | TanStack Query(按需) | 存档同步、统计 | | 后端 | Next.js API Routes | 存档同步、全局统计 | | 数据库 | Prisma + SQLite | 存档、统计(v0.4+) | | 实时 | socket.io mini-service | 全局「星潮」事件(v0.3+) | ## 二、目录结构 ``` src/ app/ page.tsx # 游戏主入口(唯一用户可见路由) layout.tsx api/ save/route.ts # 存档同步(v0.4+) stats/route.ts # 全局统计 components/ game/ # 游戏专属组件 StarfieldCanvas.tsx # 星空背景 CrystalCluster.tsx # 晶体集群 DecodeArray.tsx # 解码共振阵列 ⭐ ResourceBar.tsx # 顶栏资源 MiningPanel.tsx TechTree.tsx Codex.tsx # 记忆图谱 PrestigeDialog.tsx ui/ # shadcn/ui 既有 lib/ game/ # 游戏逻辑(纯函数,可测) config.ts # 数值配置 types.ts # 类型 engine.ts # 核心 tick 引擎 decode.ts # 解码谜题逻辑 tech.ts # 技术树 codex.ts # 叙事数据 prestige.ts # 飞升 db.ts # Prisma store/ gameStore.ts # Zustand 游戏状态 hooks/ useGameLoop.ts # 主循环 use-toast.ts # 既有 ``` ## 三、状态模型(Zustand) ```ts interface GameState { // 资源 crystals: number; // 记忆晶体(主货币) insights: number; // 技术洞见 fragments: Record; // 已获碎片 contact: number; // 接触进度 0-100 // 产能 crystalsPerSec: number; // 由技术树计算 pulsePower: number; // 主动脉冲产出 // 技术 tech: Record; // 各技术等级 // 飞升 ascensions: number; blueprints: string[]; // 保留的蓝图 // 解码 currentCrystal: Crystal | null; // 元 lastTick: number; prestige: PrestigeBonus; } ``` ## 四、核心循环引擎 - 客户端 `setInterval` 每 100ms tick 一次。 - 每次 tick:`crystals += crystalsPerSec * dt`。 - 离线收益:加载时计算 `now - lastTick`,按 50% 效率补发(上限 8h)。 - 状态自动持久化到 localStorage(Zustand persist,节流 1s)。 ## 五、解码谜题实现 - 阵列 = 节点图(邻接表),每节点有 `resonance` 值。 - 共振规则:玩家依序点击节点,相邻点击须满足 `resonance` 差值 ≤ 阈值,且最终形成闭合回路。 - 步数限制:规模 3×3=9 节点 / 4×4=16 / 5×5=25,步数上限分别为 6/10/15。 - 成功 → 结算奖励 + 动画;失败 → 晶体不损耗,可重试。 ## 六、Canvas 渲染策略 - 单一全屏 Canvas 作为背景层(星空 + 星尘 + 远景星云)。 - 晶体集群与解码阵列用**独立 Canvas 或 SVG**叠加,便于交互。 - requestAnimationFrame 驱动,设备像素比适配,低性能设备降帧。 ## 七、可扩展性 - 数值配置集中在 `config.ts`,便于平衡调整与工单需求响应。 - 叙事数据集中在 `codex.ts`,新增碎片只需追加数据。 - 技术树/解码规则/探险地图均数据驱动,支持后续模块化扩展。