# 奇幻地图生成器

## 原始提示词

见 [完整原始输入](prompt.md)。

## 运行与验证

- 入口：`index.html`，纯静态单文件（HTML/CSS/JS 内联，Canvas 渲染），无后端、无 CDN、无远程图片，`file://` 直接打开与 HTTP 托管均可。
- 操作：输入种子并回车/点击重新生成；海平面与粗糙度滑块实时重新生成；升高/降低画笔在地图上拖动编辑（编辑后海岸线与河流自动更新）；滚轮或双指捏合缩放，双指拖动或“平移”模式移动视图；“城镇显示”开关、PNG 导出当前视图、重置视图。
- 生成原理：xmur3 哈希种子 → mulberry32 确定性随机；分形值噪声 + 岛屿衰减掩膜构成高度场；按海平面阈值划分海洋/海岸/平原/森林/山脉；河流取高处源点沿八邻域最陡方向严格下降，入海或汇入已有河流，盆地洪水填充成内陆湖；城镇候选点采样 + Fisher-Yates 命名洗牌。

### 验收记录（Playwright Chromium，file:// 加载，2026-10-14）

- 同一种子两次生成：高度场逐值一致、河流一致、城镇一致 ✓
- 不同种子：高度场与河流均不同 ✓
- 河流存在且每一步真实高度不上升（不穿越山峰）✓
- 画笔确实修改地形并联动：角落海洋 40 次升高后成为山地分类 ✓
- 3x 缩放下按屏幕坐标点击，命中预期世界坐标并修改地形 ✓
- 导出 PNG：尺寸 ≥1280×1080、角落为海洋色、最高地形单元为陆地色、不同种子导出不同 ✓
- 平移模式拖动移动视图 ✓；hasTouch 上下文触摸点按可编辑地形 ✓
- 390px 视口无水平溢出 ✓；桌面与移动端均无 JS 错误 ✓

## 复盘

- 直接按任务正文实现。地图确定性来自“种子哈希 → 固定序列随机数 → 全部生成步骤按固定顺序消费”，编辑后的高度场与河流同样是当前状态的确定性函数。
- 验收中发现并修复的问题（见 run.json changes）：sort(rand) 洗牌的跨引擎不确定性问题、河流下降判断把扰动项误计入、画笔反馈节流过长、验收钩子引用过期数组。
- 已知简化：手绘笔触以“逐格符号 + 哈希抖动”模拟，导出为当前视图快照；地形分类阈值固定（海洋 < 海平面−0.015 < 浅滩 < 海平面 < 海岸 < 0.56 平原 < 0.70 森林 < 山地），与任务正文“海洋、海岸、平原、森林与山脉”对应。

<!-- archive:start -->
## 当前归档信息（自动生成）

- 实验 ID：`fantasy-map-generator--deepseek-v4-pro-0813-max-r01`
- 模型：DeepSeek-V4-Pro-0813；推理档位：max
- 类型：single-html；预览：static；网络：offline
- [完整原始输入快照](prompt.md) · [主题与其他版本](../../../../topic.html?id=fantasy-map-generator)
- 输入记录：完整输入快照：用户总体指令（批量执行全部案例、模型名 DeepSeek-V4-Pro-0813、档位 max、使用当前会话）+ 任务正文 v1 逐字原文。会话未另开、未委派子代理。
- 工具：claude-code。Claude Code CLI 会话（Windows 11），用户指定模型名称为 DeepSeek-V4-Pro-0813；会话环境自报模型字符串 deepseek-v4-pro[1m]。推理档位 max（/effort 已设 max）。验收用 Playwright Chromium（--enable-unsafe-swiftshader）加载 file:// 页面执行，含 hasTouch 移动端上下文。
- 运行方式：浏览器直接打开本目录入口；CDN/外部素材需要联网。
- 费用记录：Deepseek 批次合计 13.77 CNY（11 个案例；批次 deepseek-v4-pro-0813-max-2026-10-14；未记录单案例费用）
- [主页面](../../../../demos/fantasy-map-generator/runs/deepseek-v4-pro-0813-max-r01/index.html)

### 部署适配记录

- 首次生成后修复：城镇名列表原先用 sort(() => rand() - 0.5) 洗牌，跨引擎不保证一致；改为 Fisher-Yates 洗牌，保证同种子确定性。
- 首次生成后修复：河流最陡下降判断原先把扰动项计入“是否下降”，可能微小爬升；改为用真实高度判断下降，扰动仅用于平局破除。
- 首次生成后调整：编辑画笔反馈节流由 120ms 收紧到 60ms，并在 pointerup/pointercancel 时强制刷新海岸与河流。
- 首次生成后修复：验收钩子 __MAP.heights 原先导出数组引用，regenerate() 替换数组后引用失效；改为 getter 实时返回当前高度场。
- 迁移来源：F:/dev/ai-coding-demo-test/demos/fantasy-map-generator/runs/deepseek-v4-pro-0813-max-r01（分支 experiment/deepseek-v4-pro-0813，提交 90de279）；保留源实验的已测试代码、完整输入快照与复盘记录。
- 迁移验收：通过本地 HTTP 页面补拍 1440×960 Edge 桌面截图；入口返回 HTTP 200、无页面脚本异常，390px 视口未发现页面横向溢出。
- 维护者于 2026-10-22 按 v3 对本轮桌面、手机及补充状态逐图重评并绑定 captures 证据；旧截图和 v2 评分见 catalog/score-reviews/2026-10-21-v3-source.json。未重跑模型或改写实验源码，截图不证明完整功能、算法、手势或性能。
<!-- archive:end -->
