Skip to content
This repository was archived by the owner on Jun 22, 2026. It is now read-only.

fboostr/pinpin-china

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 拼拼中国 · 中国地图拼图

一个给孩子玩的中国地图拼图游戏:把 34 个省级行政区拖回它们在地图上的家,认识祖国版图与七大地理分区。还能进一步选某个省,把它的各个地级市拼成全省地图。

  • 本地运行、零安装:纯前端静态网页,双击 index.html 即玩,完全离线。
  • 两种玩法:拼全国(34 个省级行政区,三档难度)/ 分省拼图(选一个省,拼它的各地级市)。
  • 三档难度自适应:从学龄前到小学到高手挑战,提示逐档递减。
  • 发音辅助:用浏览器内置语音读出名字(无需任何音频文件)。
  • 完整版图:含台湾省、港澳,并以「南海诸岛」内嵌小图体现完整国家版图。

运行方式

最简单:双击项目里的 index.html,用浏览器打开即可(推荐 Chrome / Edge / Safari)。

如果某些浏览器在 file:// 下读音不可用,可起一个本地静态服务器再访问:

# 任选其一
python3 -m http.server 8000
npx serve .

然后浏览器打开 http://localhost:8000

难度说明

难度 适合 玩法
🐣 简单 3-6 岁 · 学龄前 按七大区一关一关来,底图标着省名、拼块带拼音、点一下会读名字,吸附范围大
🦊 中等 6-10 岁 · 小学 一次拼全 34 个省,底图只有空白轮廓,看名字找位置
🐉 困难 高手挑战 只有国界外框剑影、不显示名字、要放得准,并计时和记录放错次数

放置时拼块靠近正确位置会自动吸附归位;放对的省份按所属地理区上色,地图会一点点拼出来。

分省拼图

在首页选「🗺️ 分省拼图」,再选一个省(目前内置 26 个地级市划分规整的省/自治区,覆盖除直辖市、海南、港澳台以外的常规省份),把该省各地级市拖到正确位置拼成全省地图。

  • 棋盘上只给全省最外轮廓作参考,托盘里的地市块带名称,靠形状判断它在哪儿。
  • 吸附范围按各省尺度自适应(地市多的省块小、少的省块大,手感保持一致)。
  • 不分关、不计时,放对会读出地市名。

项目结构

pinpin-china/
├── index.html          # 入口页面
├── css/styles.css      # 样式
├── js/
│   ├── difficulty.js   # 难度配置:全国三档 + 分省单档、七大区/地市配色
│   ├── audio.js        # 浏览器语音合成读名字(含降级)
│   ├── render.js       # SVG 渲染:底图/拼块/南海诸岛/动画/坐标换算(数据集驱动)
│   ├── game.js         # 拖拽吸附、关卡推进、计时计分、完成判定(数据集驱动)
│   └── main.js         # 入口装配:选玩法/难度/省份、通关/重玩/读音开关
├── data/
│   ├── provinces.js    # 全国省界 SVG 数据(构建产物)
│   └── puzzles/        # 分省拼图数据,每省一文件(如 410000.js = 河南)
└── tools/              # 开发期工具(普通玩家无需关心)
    ├── build-map.mjs       # 由 GeoJSON 生成 data/provinces.js(全国)
    ├── build-provinces.mjs # 生成 data/puzzles/*.js(分省地市)
    ├── check-data.mjs      # 全国数据校验
    ├── check-puzzles.mjs   # 分省数据校验
    └── e2e.mjs             # 真实浏览器端到端测试(可选)

运行时只依赖 index.html + css/ + js/ + data/(全国与分省数据),没有任何第三方运行时依赖

开发

data/provinces.js 已随仓库提供,一般无需重建。需要重新生成或跑测试时:

cd tools
npm install          # 仅开发期:d3-geo(构建)、puppeteer-core(e2e,可选)

npm run build            # 由 GeoJSON 投影生成 ../data/provinces.js(全国)
npm run build:provinces  # 生成 ../data/puzzles/*.js(分省地市)
npm run check            # 校验全国:34 个省、字段齐全、七大区合计 34、含台湾、南海诸岛
npm run check:provinces  # 校验分省:省外框非空、地市字段齐全、坐标落在画布内
npm run e2e              # 可选:用本机 Chrome 跑端到端(全国+分省,渲染/吸附/分关/通关)

构建流程关键点(见 tools/build-map.mjs / build-provinces.mjs 注释):

  • d3-geo 的等积圆锥投影(China Albers)把边界投影到固定画布;分省时每个省单独按其经纬范围 fitExtent 投影到整张画布(省外框与该省所有地市共用同一投影,才能拼到一起);
  • 修正多边形环绕方向(源数据外环为逆时针,d3-geo 需顺时针,否则会反填整张图);
  • 海南只保留海南岛本体,三沙/远海小岛归入「南海诸岛」内嵌小图,避免投影被纬度跨度拉变形。

新增分省拼图省份:在 tools/build-provinces.mjsPROVINCES 表里加上 adcode 与名称,重跑 npm run build:provinces 即可——脚本会生成 data/puzzles/{adcode}.js,并自动把全部分省 <script> 标签写进 index.html<!-- puzzles:start --><!-- puzzles:end --> 标记区间(按 adcode 升序),无需手改 HTML。注意直辖市(下辖是区)、海南(含三沙)等特殊行政结构需单独处理。

地图数据来源与版权

省界与国界数据来自 DataV.GeoAtlas(阿里云) 公开地理边界服务: https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json

本项目仅用于个人/教育用途。地图边界以官方完整版中国地图为准(含台湾省、港澳及南海诸岛)。如用于其他用途,请遵循数据源各自的使用条款。

Releases

Packages

Contributors

Languages