Skip to content

Repository files navigation

像素知识岛 · Pixel Knowledge Island

一套把「学科概念」变成可漫步像素群岛的交互小游戏(多岛合集版): 每座岛 = 一所世界名校、90 栋小屋对应 90 张概念卡;点屋读「一句话定义」, 顺石板路跳同套关联,跨套关联乘 🚢 渡轮去对岸大学;盖章打卡、分区 BGM、小镇游客。 当前合集含 全部 7 岛 630 卡(序=学习航线序,由根本到枝叶):① 哲学(哈佛大学)· ② 历史与文明(普林斯顿大学)· ③ 文化艺术与媒介(纽约大学)· ④ 心理与认知(斯坦福大学)· ⑤ 经济学(芝加哥大学)· ⑥ 法律与治理(耶鲁大学)· ⑦ 科技与社会(MIT)。

一个 HTML 就是全部游戏。卡片 Markdown 是内容唯一真源,其余都是它的渲染层。

🌏 世界名校群岛(七岛计划 · 学习航线序):① 哈佛大学(哲学 ✅)② 普林斯顿(历史与文明 ✅)③ 纽约大学(文化艺术与媒介 ✅)④ 斯坦福(心理与认知)⑤ 芝加哥(经济)⑥ 耶鲁(法律与治理)⑦ MIT(科技与社会);三区=各校真实校区地点(见 docs/ISLAND-REGISTRY.md)。校名与建筑仅作致敬虚构,与各校无隶属关系。

🤖 给 AI / 新开发者的第一入口:docs/SPEC.md 内含阅读协议(开工先读)、硬约束与常量、P1 扩展点、§9 验收清单(npm run check)。 每座新岛开工前还要读 docs/ISLAND-REGISTRY.md,改完代码必须跑 npm run check。 想先了解「项目为什么存在、怎么一路演化、我们信什么」——读 docs/PROJECT-VISION.md(项目总纲)。


快速开始

🎮 直接玩(无需任何安装)

打开 像素知识岛-群岛合集-630卡.html(项目根)—— 多岛合集自包含单文件(七套数据/样式/脚本全部内联), 双击即玩、可离线、可发给任何人。首次点击画面解锁音效。

历史文件 像素知识岛-文化艺术与媒介90卡.html 为合集前的单岛版(无哲学岛/渡轮),仅供旧引用,不再维护。

💻 开发模式(改代码)

# 方式一:直接双击 index.html(浏览器 file:// 协议即可运行)
# 方式二:本地静态服务
python3 -m http.server 8000
# 浏览器访问 http://localhost:8000/index.html

开发模式下样式与脚本均为独立文件,便于修改调试。

构建发布版

内容物料(md 卡片)变化后,先重新提取数据,再构建:

python3 scripts/extract_cards.py   # content/ 全部套 md -> data/cards.all.js
python3 scripts/build.py           # 内联全部资源 -> 像素知识岛-群岛合集-630卡.html(项目根)

也可以用 npm:

npm run extract && npm run build

发布到网页(PWA 投放目录):公开部署前多跑一步,生成 publish/ 投放目录(=注入 manifest / Service Worker / 图标的单文件副本):

python3 scripts/publish.py   # 生成 publish/(index.html + manifest.webmanifest + sw.js + icons/)
  • 根目录 像素知识岛-群岛合集-630卡.html = 自包含零外链发布版,file:// 双击即玩(无 PWA 增强,属预期);
  • publish/ 整目录上传 Vercel / GitHub Pages 即得可「添加到主屏幕」的网页版;
  • 免费托管步骤与对比见 docs/DEPLOY-VERCEL.md(Vercel 主路径 / GitHub Pages 备选)。

手机离线版(断网可玩):安卓=APK 直装(python3 scripts/build_apk.py → release/像素知识岛-安卓离线版.apk,本体内嵌、飞行模式可玩);iPhone=主屏幕 PWA(Safari 打开部署网址→分享→添加到主屏幕)。详见 docs/MOBILE-OFFLINE.md(DECISIONS D21)。


目录结构

pixel-island/
├─ index.html                 开发入口(外链 css/js/data)
├─ 像素知识岛-群岛合集-630卡.html    发布版(自包含零外链,项目根双击即玩)
├─ publish/                    网页投放目录(publish.py 生成:PWA 注入副本 + manifest/sw/icons;托管上传此目录)
├─ mobile/                      安卓离线壳源码(WebView 加载内嵌 assets/index.html;Java 壳 + res 图标)
├─ release/                     本地直装分发物:像素知识岛-安卓离线版.apk + 自签名密钥 pki-release.keystore(勿丢)
├─ package.json               npm 脚本(extract/build/rebuild/serve/check)
├─ README.md                  快速开始(本文件)
├─ docs/                      开发规范(给 AI/新开发者,开发前必读)
│  ├─ PROJECT-VISION.md       ★ 总纲:为什么做、演化脉络、理念与信条(先读它建立全局感)
│  ├─ SPEC.md                 ★ 主规范:阅读协议、硬约束、常量、扩展点、验收清单
│  ├─ ISLAND-REGISTRY.md      七岛登记表:命名/氛围/地标/BGM 提案/开发状态
│  ├─ DECISIONS.md            决策记录与踩坑史(D1..B7,防推翻已定设计)
│  ├─ VISUAL.md               视觉与像素美术规范(调色板/造型/布局)
│  ├─ AUDIO.md                音频与 BGM 作曲规范(WebAudio 合成)
│  ├─ DEPLOY-VERCEL.md         部署指南(免费托管:Vercel 主 / GitHub Pages 备)
│  └─ MOBILE-OFFLINE.md         手机离线版指南(安卓 APK 直装 / iPhone 主屏幕 PWA)
├─ content/                   内容物料(真源,随项目存放)
│  └─ 90个文化艺术与媒介概念/    90 张 Markdown 概念卡 + MOC
├─ src/                       源码(加载顺序固定,见 SPEC §8)
│  ├─ css/style.css
│  └─ js/setup·store·layout·view·sprites·terrain·render·ui·visitors·audio·npc·main.js
├─ data/cards.js              卡片数据(extract 生成,勿手改)
└─ scripts/
   ├─ extract_cards.py        content/*.md -> data/cards.js
   ├─ build.py                内联资源 -> 发布版(项目根)
   ├─ publish.py              生成 publish/ 投放目录(PWA manifest/SW/图标,见 DEPLOY 指南)
   ├─ build_apk.py             生成安卓离线 APK(mobile/ 壳 + 本体内嵌,见 MOBILE-OFFLINE 指南)
   └─ checks/                 npm run check 的验收自检(SPEC §9)
      ├─ check_all.py         入口:数据/语法/桩+几何/产物 四段检查
      └─ run_harness.js       Node 桩执行 + 几何自检(落陆地/间距/空洞)

内容真源 = content/ 下七套概念卡(90个文化艺术与媒介概念 … 90个历史与文明概念,每套 90 张 md)随项目存放, 克隆/拷贝本项目即可完整复现构建(七岛 630 卡),不依赖项目外的任何文件。


玩法与操作

操作 说明
拖动 / 滚轮 / +- 逛岛、缩放
点小屋 打开读卡窗:一句话定义 + 领域/期次 + 盖章
顺路逛逛 石板路跳同套关联;🚢 按钮=乘渡轮去对岸大学看那张卡
🚢 渡轮 顶栏按钮:群岛菜单,随时乘船换岛;过场=驶向该校的校史时光轴(逐条点亮里程碑)
🗺 群岛 / 缩小到底 看整片群岛海图:虚线航线连着各校;金色学缘弧=两岛之间有跨套关联(如文化→哲学 14 条);点远岛=短渡轮过去,点自己所在的岛=拉近回落
盖章任务 复习自测勾选(✓ 存档)
完整卡片 折叠阅读该卡全文小节
🛤 石板路 / 🏷 全岛路牌 看关联网络 / 全部名字挂牌
♪ 音乐 / ♪ 音效 分区 BGM 开关 / 音效开关
搜索框 按中文名 / 英文别名 / 领域找当前岛的卡
阿通 左下角吉祥物,点击换提示

分区 BGM(WebAudio 实时合成,零音频文件;③ 文化艺术岛三曲=P0 原曲母本,其余岛均为其移调变奏,移调量见 docs/AUDIO.md): ① 哲学岛:哈佛园=晨铃低语、怀德纳图书馆=书海对答、奥尔斯顿校区=暮钟星火; ② 历史与文明岛:拿骚厅=史册晨钟、费尔斯通图书馆=编年咏调、路易斯图书馆=余烬夜曲; ③ 文化艺术岛:华盛顿广场=广场晨钟、博斯特图书馆=书卷节拍、蒂施艺术学院=夜城音乐盒(P0 原曲·母本); ④ 心理与认知岛:主方院=晨光练习曲、纪念教堂=心灵圆舞、胡佛塔=星塔夜曲; ⑤ 经济学岛:主方院=市集晨曲、哈珀图书馆=金流圆舞、塞耶经济楼=远航号子; ⑥ 法律与治理岛:老校园=老院晨钟、斯特林图书馆=书殿咏叹、法学院区=宪章夜颂; ⑦ 科技与社会岛:大圆顶=圆顶晨光、无尽长廊=长廊脉冲、媒体实验室=实验室夜曲; 海上=海浪。

进度存储:localStorage(预览沙箱禁用时自动降级为内存);「↺ 清空进度」需二次确认。


技术要点

  • 纯前端零依赖:无框架、无构建库、无外链字体/图片/音频;发布版连数据都内嵌。
  • 性能:多岛合集采用"活动岛"架构——任何时刻只渲染/驻留当前一座岛(离屏 base 一块),切岛即重建,内存与帧率等同单岛;数据 7×90 卡全量常驻仅几 MB。 地形一次性预渲染;每帧只重绘房屋/游客/动态装饰;游客 ~14 个/岛,帧循环 110ms,手机上也很流畅。
  • 群岛海图零负担:缩到海图视野时,远岛是程序化轻绘(椭圆色块+期次色屋点+名牌,数百次绘制/帧);海图底为程序化大洋背景(深海渐变+经纬网格+深水斑+波光+罗盘);均无额外离屏大图——加满七岛也不增加常驻内存。
  • 确定性布局:房屋坐标/树木/装饰由卡片名的哈希 + 固定种子生成——每次打开地图都一样。
  • 真源单向:修改 md 卡片 → 重跑 extract + build 即同步到游戏,代码无需改动。

已知限制

  • 浏览器要求首次「点击」后才能播放音频(自动播放策略),点击小屋即可解锁。
  • 「下载 .md」按钮在部分内嵌预览环境中不可见;本地打开时它指向当前岛 content/<该套目录>/ 下的原卡。
  • 若在无网络沙箱里本地存储被禁用,进度仅保存在当前会话。

路线图(P1/P2 想法)

  • ✅ 发布形态定版(D20):静态网页面向全平台(桌面/手机/平板响应式+双指捏合触控);publish/ PWA 投放目录;托管 Vercel 主 / GitHub Pages 备(docs/DEPLOY-VERCEL.md)
  • ✅ 手机离线版(D21):安卓 APK 真离线(本体内嵌,mobile/ 壳 + scripts/build_apk.py)+ iPhone 主屏幕 PWA(docs/MOBILE-OFFLINE.md)
  • ✅ 收官:七岛全量(630 卡)已全部并入同一合集(每岛=一次会话:迁套→extract 登记→cfg 条目→rebuild+check,DECISIONS D10–D17)
  • ✅ 航线序定版(D18):七岛序号按「由根本到枝叶」重排(哲学开篇)——渡轮菜单、海图蛇形读数、默认启航岛与文档全量对齐
  • 精灵级校园化:为名校岛新增红砖/拱门等新小屋造型与地标(需按 VISUAL 记录)
  • 正式新曲:哲学岛目前是移调变奏,后续可按 AUDIO §2 模板精写专属旋律
  • 印章收集:集齐一镇庆祝彩带、导出印章图
  • 漂流瓶:每日随机漂来一张卡的「一句话定义」
  • 游客升级:跟随鼠标、与地标交互(坐在篝火旁)

About

把学科概念盖成一座逛不完的群岛:一岛一学科,一屋一概念。不刷题、只散步——哲学开篇,由根本到枝叶;630 张概念卡,等你一座一座走完。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages