# 魔芋の松果
> Pinecone —— 一个纯静态、零构建、离线可用的小游戏合集。
一堆小游戏,收在一颗松果里。捡一颗,玩一局。

## 它解决什么
| 问题 | 这个框架的做法 |
|---|---|
| 加游戏要改导航页 | 导航页只读 `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(仅用于工具脚本)。游戏本身不需要任何运行时。