# 魔芋の松果 > Pinecone —— 一个纯静态、零构建、离线可用的小游戏合集。 一堆小游戏,收在一颗松果里。捡一颗,玩一局。 ![导航页](docs/nav.png) ## 它解决什么 | 问题 | 这个框架的做法 | |---|---| | 加游戏要改导航页 | 导航页只读 `games.js`,由扫描器从每个游戏的 `game.json` 生成 | | 元数据写错没人发现 | `scan-games.mjs` 校验字段、路径、体积、命名,写错直接报错 | | 打开要起服务器 | 纯静态 + 经典 ` ``` 身份是一个随机设备 ID(存在 localStorage)+ 可选昵称,没有注册和密码。 成绩存在服务器上,换设备用 ID 登录就能看到;导航页的卡片上会显示你的 rating 和评分。 **想跨设备看榜单**:起一个后端,把地址填进 `sdk/config.js`。**不部署也照常玩。** 后端只有一个:[`server/`](./server/README.md)——一个 Node 进程,零依赖,数据存 SQLite。 详见 [docs/rating-guide.md](./docs/rating-guide.md)。 ## 设计 风格是 **温馨像素(Cozy Pixel)**:暖土色系 + 直角 + 2px 描边 + 无模糊硬阴影 + 点阵图标。 **导航页和所有游戏共用同一套设计变量**——游戏只要引入 `../design/tokens.css` 和 `../design/components.css`,配色、字号、按钮、卡片就自动和站点一致。 - 规范:[DESIGN.md](./DESIGN.md) - 可视化参考:[design/styleguide.html](./design/styleguide.html)(`node tools/serve.mjs` 后访问 `/design/styleguide.html`) ## 命令 | 命令 | 作用 | |---|---| | `node tools/serve.mjs [port]` | 本地服务器,默认 5173,自动重扫 | | `node tools/scan-games.mjs` | 扫描并生成 `games.js` | | `node tools/scan-games.mjs --check` | 校验元数据 + 检查清单是否最新(CI 用) | | `node tools/new-game.mjs ` | 从模板脚手架新游戏 | | `node tools/new-game.mjs --help` | 查看脚手架参数 | > 装了 npm 的话也可以用 `npm run serve` / `npm run scan` / `npm run check`。 > > ⚠️ 如果 PowerShell 报「禁止运行脚本」(`npm.ps1` 被 ExecutionPolicy 拦截), > 直接用上面的 `node tools/...` 命令即可,不依赖 npm。 ## 规则 **入口是 [AGENTS.md](./AGENTS.md)**(定位 + 七条铁律 + 任务索引), 详细规则按任务拆在 `docs/rules/` 里,用到哪个读哪个。 ## 版本管理 Git 已初始化,首个提交是框架骨架。 - 提交前跑 `node tools/scan-games.mjs --check`,确保 `games.js` 与各 `game.json` 同步。 - **`games.js` 需要提交**(`file://` 直接打开时靠它加载清单),不要加进 `.gitignore`。 - 提交信息格式见 [docs/rules/ship.md](./docs/rules/ship.md)。 ## 环境 只需要 Node ≥ 18(仅用于工具脚本)。游戏本身不需要任何运行时。