Files
HexTrails/README.md
T
cabinw e92cccba82 feat: version campaigns and document original puzzle design
Restore v0.1 and v0.2 archives with separate progress, publish the curved v0.3 campaign, and document the original 24-level design with reproducible evidence. Refine board presentation and movement, and keep video lab tooling within its own directory.
2026-09-09 13:17:30 +08:00

10 KiB

HEX TRAILS · 转转六角

一款竖屏六角轨道解谜游戏:观察路线,点击箭头棋子让它离场;免费旋转底盘和尝试路线,在清楚的反馈中逐步清空棋盘。

项目使用原生 JavaScript ES modules 和 Canvas,无第三方运行依赖,无在线字体或 CDN。选关窗口提供 v0.1 最初 24 关、v0.2 直线较多的 48 关与 v0.3 当前弯轨 48 关;默认 v0.3,按 8 章 × 6 拍制作。另有关卡工坊、求解器、确定性关卡生成器,以及 Cocos Creator 适配示例。

后续关卡优化的原始设计参照见 v0.1 · 最初 24 关设计理念:还原必要旋转、空间让路与分阶段解开轨道的结构,并区分历史规则、实际布局和本次设计归纳。

快速开始

需要 Node.js 20 或更高版本,以及 Git;无需执行 npm install。

git clone git@git.zeroplus.fun:Zeroplus/HexTrails.git
cd HexTrails
npm run dev

打开 游戏。请通过 HTTP 访问,直接双击 HTML 文件无法正常加载 ES modules。开发服务监听 0.0.0.0,同一局域网的手机可通过电脑 IP 和端口访问。

  • 关卡工坊:当前精简游戏界面隐藏工坊导航,通过此地址进入。
  • 交互设计规范:色板、图标、组件状态与动效示例。
  • 修改端口:PORT=4174 npm run dev。

游戏规则

  • 点击棋子,从箭头方向进入轨道;弯道自动转向,交叉处不换轨。
  • 点击左右旋转按钮,或沿棋盘边缘拖动,将底盘旋转 60°。棋子的位置与箭头方向保持不动,底板格子与轨道配对一起旋转。
  • 棋子不能穿过其他棋子。碰撞检测覆盖整段运动路径,包括弯道与邻格擦碰;碰撞动画展示接触后退回原位。
  • 只有成功移除棋子消耗 1 次预算;旋转和失败试路均免费。主线预算等于初始棋子数,只表示剩余消除工作量,不惩罚试错。撤销恢复棋盘、棋子、朝向和计数;没有倒计时。
  • 提示会高亮可安全离场的棋子,或建议旋转方向。棋子配色不影响规则。

主线每章按“进入 → 换路 → 展开 → 小挑战 → 释放 → 长局回报”安排,不按难度分数单调排序,也不要求每关必须旋转。早期就可使用 37 格棋盘,后期舒缓关使用 61 格延长熟悉操作的体验;19 格小棋盘也可承担局部挑战。棋盘规模与认知难度分别记录。

9 月 9 日版的 48 关以真正的弯轨消除为主:每关参考解答至少 65% 的成功离场棋子经过弯道,且不少于 3 枚。直线只作少量节奏调剂,不安排纯直出关,也不用空格上的装饰曲线充数。当前单关最多 25 枚棋子,后期长局增加的是沿弯轨观察与解开的实际内容。

第 1 关为 37 格、8 枚棋子,开局全部可离场,每枚参考路径恰好转弯一次,无需旋转;“全部可离场”不表示任意朝向都相同。前 7 关通过 lesson 字段依次学习箭头起步与弯轨转向、旋转换路而棋子箭头不动、交叉不换轨、阻挡先后、舒缓的一两弯、大盘连续解路径,以及完整路线观察。

主线发布要求包括完整可解、每枚棋子在六个朝向下的独立路线无闭环,以及参考解答中的阻挡可解释、旋转后有明确进展;这些门槛不代表玩家任意旋转或点击序列都不会遇阻。制作方向见 玩法方向,逐关生成与验收记录见 主线审阅报告,验证结果以实际生成报告和测试输出为准。

所有关卡可自由选择。在左上角选关窗口切换 v0.1 / v0.2 / v0.3,分别保存通关进度与上次选关;对应旧存档会自动迁移,旧数据继续保留。历史布局原样恢复,三版共用当前免费旋转与失败试路规则,详见 关卡版本与来源。以上弯轨比例与节奏门槛针对 v0.3。音效使用 Web Audio 合成,首次交互后启用,可在设置中关闭并保存偏好。

关卡工坊

工坊支持 19、37、61 格底板、棋子方向与配色、15 种轨道配对、单格轨道旋转和整体底盘旋转;还提供擦除、路径检查、撤销编辑、试玩、随机生成、本机单槽存档及 JSON 导入导出。

试玩不修改草稿,也不计入主线进度。工坊与正式游戏共用碰撞及求解规则。分析器区分最少消除成本 minimumMoves=N 与最少交互数 minimumActions=N+R,其中 R 是最少旋转数;自定义预算不足 N 时仍会报告预算不足。认知难度与工作量分别提供,搜索达到上限时显示“尚未确定”,不直接判定无解。

不具备六重旋转对称性的导入底板会禁用整体旋转。导入失败保留当前草稿;不可解关卡仍可保存用于调试。浏览器存档不会跨设备同步,需长期保存或分享时请导出 JSON。

关卡字段、导入限制、求解算法和评分公式见 关卡设计说明。

开发与构建

命令 用途
npm run dev 启动本地开发服务,默认端口 4173
npm test 执行 Node 内置测试套件
npm run build 生成设计资源并输出静态站点到 dist/
npm run levels 读取主线种子清单重新生成 48 关,同步关卡 JSON、共享模块和实际路径验收报告
npm run levels:versions 校验历史关卡归档并生成 v0.1 / v0.2 的浏览器模块
npm run design 生成颜色 token、CSS、JSON、PNG、对比度报告和设计指南 HTML
node scripts/serve.mjs --dist 本地预览构建产物

部署时先执行 npm run build,再将 dist/ 的内容上传至静态网站服务器。站点无需后端服务。构建会清空并重建 dist/;不要提交 dist/ 或 node_modules/。

修改语义颜色时编辑 src/design-tokens.js,然后运行 npm run design 并检查生成资源的差异。修改关卡生成逻辑后运行 npm run levels 和 npm test,确保关卡数据同步且全部可解。

主线布局来源为 levels/campaign-seeds.json,包含逐关种子和生成参数;不要直接编辑派生关卡。levels/campaign-analysis.json 的 pathUsage 记录参考解答中真正成功走过的弯轨/直线路径、转弯数量与逐棋子明细,不能用棋盘弯线总数替代。报告仍是结构与回放证据,不包含真人体验数据。

项目结构

路径 职责
index.html、style.css 响应式浏览器界面
src/core.js 游戏规则、旋转、求解、生成、评分与导入校验
src/path-math.js 渲染与连续碰撞共享的路径数学
src/geometry.js、src/tile-shape.js 坐标转换、命中检测与棋子轮廓
src/renderer.js 引擎无关绘制命令与 Canvas 适配
src/app.js、src/ui.js、src/audio.js 浏览器交互、界面、存档与音效
src/collision-animation.js 碰撞反馈动画
src/sprites.js、src/ui-skin.js 棋子与 UI 图集裁切、共享皮肤定义
src/design-tokens.js、design/ 语义颜色源与生成的设计资源
levels/campaign-seeds.json 48 关种子与生成参数的制作来源
levels/campaign.json、src/levels.js 根据种子清单生成的主线 JSON 与浏览器模块
levels/campaign-analysis.json 逐关回放、真实成功路径 pathUsage 与结构指标
assets/ PNG 图集、历史素材与生成提示词
tests/、scripts/ 自动测试、开发服务和生成脚本
cocos/ Cocos Creator 棋盘及 UI 适配示例
wechat/HexTrail/ Cocos Creator 3.8.8 工程,后续游戏移植的目标工程
docs/ 玩法分析、关卡设计和移植说明

规则与数学模块不依赖 DOM、存储 API 或浏览器物理引擎。新增玩法应留在模型层,浏览器输入与存储逻辑留在适配层。

美术与移植

当前界面采用蓝灰背景、暖白棋盘、哑光棋子和生成图标。主要资源为 assets/tiles-matte-clean-v8.png、assets/ui-icons-generated.png 和 assets/ui-surfaces.png;裁切与颜色定义以源码为准,历史素材不一定用于当前界面。

Design.md 记录设计规范;Design.html 内嵌图片与样式,可单文件离线分享。生成过程与提示词见 素材说明。

Cocos 示例复用规则、碰撞、渲染命令和图集;HTML 控件、文件导入导出与存储需替换成宿主接口。接入步骤见 Cocos 移植指南。wechat/HexTrail/ 是本仓库管理的 Cocos Creator 3.8.8 工程,后续将把当前游戏移植到该工程中。使用 Creator 打开该目录;工程自身的 .gitignore 排除缓存、本地配置和构建产物,源码与项目配置随主仓库提交。

验证与已知限制

自动测试覆盖主线完整解答、生成关卡、旋转与撤销、弯轨寻路、连续碰撞、闭环、导入校验,以及设计颜色对比度和图标裁切。测试结果以当前 npm test 输出为准。

界面变更还需在浏览器检查竖屏布局、旋转、碰撞回位、弹窗和工坊导入导出;自动测试不替代实机交互验收。较小屏幕可能需要纵向滚动。认知难度评分不直接加入棋盘规模,仍是未经玩家数据标定的结构估计。工作量中的估计秒数也只是内部制作假设,不能当作真人平均通关时长。

cocos/ 是适配示例,不是完整 Creator 工程;原生场景及 Android/iOS 构建尚未完成验收。docs/ui-layout.json 是旧版布局快照,不应直接作为当前场景模板。

更多背景见 视频与规则分析。

V2 色彩与离场展示

打开 http://localhost:4173/design-showcase.html,切换五套关卡主题并播放离场动效。主线按难度使用四套背景,12 色棋子库在每关收敛为 3–4 色;编辑器开放全部 12 色。每周挑战目前为独立美术主题预览,尚未实现周赛功能。规范与色库详见 Design.md。

视频 UI 实验室

Hex Video Lab 是基于 examples/hex.mp4 的独立 UI / 特效复刻,可切换地图、棋盘和领奖场景,支持自动试玩、单片翻转、彩纸、金币飞入、慢速播放及参考帧对照。棋子按本项目要求保留单片薄侧边,不使用视频中的多片堆叠。运行 npm run dev 后访问 /labs/hex-video/index.html;详见 复刻笔记。