7.0 KiB
数字一笔200关 · 明亮教具室实现与验证
日期:2026-10-21。状态:已接入、已构建、自动回归与浏览器验证通过;微信手机验收待进行。
直接体验
- 源码与微信工程:wechat-campaign-200-r2。在微信开发者工具导入该目录,重新编译并生成新的手机预览。
- 独立导入包:NumberSwipe-campaign-200-r2-明亮教具室-20261021.zip。解压后导入;不需要构建npm。
- 浏览器试玩:在工程目录执行
node qa/serve.mjs,打开 明亮教具室试玩。提供200关、五种屏幕尺寸和真实关卡样张选择;页面上的自动画路按钮属于验收工具,不进入游戏包。
导入包 SHA-256:53945F4558F7DD3EA4904B9AE2373E88288B728D16FC359504631AF550D1F251。
已实现的美术
| 范围 | 当前表现 |
|---|---|
| 整体与UI | 暖黄背景、低对比静态几何纹样、奶油舞台、圆角面板、按钮下沿、紫色指路主按钮、程序路径图标 |
| 棋盘 | 矩形/异形完整轮廓、多环与内孔支持、缩缝圆角、短底沿、接触投影、左上亮边与微渐变 |
| 路径 | 普通块整面紫色;真实共边桥接;数字单位不随大块面积放大;当前位置短角标 |
| 规则 | 固定条件框、奇偶副标、可反向通道、类别形状、连续黑黄墙带、开/关/已过门形态 |
| 组合状态 | 蓝橙类别面全程保留;错误采用局部标记与反馈;六边条件框和角标单独适配 |
| 指路 | 独立透明层;按真实入口和块内可通行区域引导;避让数字与规则;擦除已走块的完整面和底沿 |
| 教学与完成 | 教学复用新renderer,隔离玩家状态;门160ms短切换、通关320ms短扫光;完成后原位显示下一关 |
| 字体与偏好 | Nunito800数字、Noto Sans SC500/600/700中文子集;本地加载、许可及哈希记录;减少动态持久化 |
| 调度 | 静态选关、无活动动效的思考状态与减少动态下静态提示停止RAF;前后台正确停止和恢复 |
关卡、顺序、规则、存档key、半音音效、抬手续画、逐格回退、撤销、重开、分段提示与手动下一关保持原有行为。当前起始页继续使用原有选关流程,没有增加独立首页或扩展商业系统。未制作额外主题、原创标题轮廓和通关粒子。
运行包中没有PNG、JPG、WebP、SVG图片美术;全部形状由Canvas绘制。qa/下截图仅是验收证据,打包时排除。字体共369700字节,附两份OFL与字集/SHA-256 manifest;构建工具、原始完整字体不进入运行包。
源码接入
| 文件 | 责任 |
|---|---|
src/bright-classroom/theme.mjs |
直接导入设计令牌、字体加载、文字与面板基础绘制 |
src/bright-classroom/geometry.mjs |
全闭环轮廓、内缩、圆角、布局、稳定锚点、合并共边与块内引导 |
src/bright-classroom/board-renderer.mjs |
材质、桥、标注、类别、墙门、动效、表现缓存与提示几何 |
src/bright-classroom/ui.mjs |
纹样、图标、按钮与舞台 |
bright-classroom-build.mjs |
检查过的上游绘制接缝替换,保留原业务回写与教学状态恢复 |
src/main.mjs、src/platform.mjs |
宿主UI、输入、设置、脏状态调度、Canvas合成与诊断 |
src/hints.mjs |
保留分段控制器,新增几何引导与安全遮罩绘制 |
fonts/、build-fonts.py |
改名的静态字体子集、许可、manifest及离线重建脚本 |
上游四份来源快照的内容和哈希不变,source-manifest.json只更新适配版本说明。build.mjs已构建新 game.js;独立包只含三个入口/配置文件、41个音频和7个字体及许可/manifest文件。
验证结果
以下命令在 wechat-campaign-200-r2 执行,均已通过:
node build.mjs
node --test bright-classroom.test.mjs hints.test.mjs lessons.test.mjs audio-copy.test.mjs
node smoke.mjs
| 检查 | 结果与证据 |
|---|---|
| 模块测试 | 29/29通过:既有23项+6项新美术检查,包括内孔、200关四种尺寸几何、异形引导不穿洞、类别身份、字体哈希与构建接缝 |
| 微信模拟整包 | 200/200唯一解与触摸通关;撤销/重开/提示;教学状态隔离;四种手机尺寸;前后台;存档/音效恢复。记录见 validation.json |
| 新调度与偏好 | 字体本地装载调用、减少动态存档恢复、静态页与静态提示无RAF积压,加入 smoke.mjs |
| 浏览器实际像素 | 200/200关的已走格采样像素在提示前后及撤销重画后相同。使用随包字体,入口 qa/hints.html |
| 人工浏览器检查 | 基础大块、双色奇偶、六边墙、320×568密集36块;据此修正六边类别标记和焦点角标位置 |
| 色对与内容审计 | 仓库根目录 node docs/design/bright-classroom/audit-design.mjs 通过规定色对检查,关卡统计仍为20章200关 |
| 运行包资源 | ZIP条目检查无图片美术,无源码、QA截图、字体构建工具和完整源字体 |
浏览器截图:大块关、六边关。截图来自实际游戏包的浏览器宿主,不是概念效果图或微信真机截图。
微信手机验收
在开发者工具导入新目录或ZIP解压目录,重新编译并生成预览;至少检查基础大块、双色通道、门、六边和r2-163密集盘。关注字体是否实际加载、滑动与回退命中、墙门和两位数、提示遮罩、后台恢复、音效及持续操作耗时。
浏览器验证与模拟触摸不能证明手机的帧率、内存、音色和字体API兼容性。当前没有60fps或微信手机显示已验收的结论;字体失败时有稳定系统回退,并可在 GameGlobal.numberSwipeR2.snapshot().fonts 查看加载诊断。
Evidence → Finding → Path
| 证据 | 结论 | 执行路径 |
|---|---|---|
| 原美术报告、tokens.json、真实200关及来源快照 | 风格应服从真实几何与规则,不能只替换颜色 | 轮廓与共边→材质→规则标注→UI与教学 |
新专项测试、validation.json、浏览器200关像素检查 |
新renderer保持既有玩法、类别身份和提示填色不变量 | 实际game.js→模拟微信与浏览器→独立运行包 |
| 真实浏览器样张与320宽密集关 | 六边角落与密集数字需独立排版 | 六边标记修正→复查样张→保留截图 |
| 未执行微信手机预览 | 平台显示与性能仍需设备证据 | 新包导入→手机预览→记录设备与实测结果 |
字体上游:Nunito、Noto Sans SC。实际使用的源文件哈希、输出字重与子集哈希记录于 fonts/manifest.json,相应许可随包交付。