魔方模拟器+魔方演算器,示例 。
计划的功能有:
- 支持高阶魔方
- 解析执行公式
- 键盘操作
- 手柄操作
- 自动打乱
- 还原计时
- CFOP自动还原
另外,在其中尝试实现了之前的一些想法,比如用协程的思路做响应式。
目前拆出来了一个分支event-coroutine,用于设计和思考用协程来做事件驱动。
名称 | 意义 |
---|---|
Face,面 | 指魔方的一个表面,由面名称(udfbrl )指定u: up, d: down, f: front, b: back, r: right, l: left |
Piece,片 | 指魔方面上的贴片 |
Layer,层 | 指魔方的一层 |
Formula | 指魔方公式 |
标准坐标系 | 右手坐标系,魔方中心位于原点;以原点为起点,xyz轴正方向指向的面分别为前面f、上面u、右面r |
标准面序 | 指魔方面的udfbrl 顺序 |
魔方描述符 | 可以描述魔方当前状态的字符串,由面描述符构成 |
初始面 | 为了使面描述符颜色无关,对片引入了初始面的概念,指的是该片在魔方初始状态下所在的面,初始面决定了一个片的颜色 |
面描述符 | 可以描述面当前状态的字符串,由面上的片对应的初始面按一定顺序排列构成 |
标准片序 | 指面描述符中片排序的规则。 排序时忽略该面的法线轴,然后按照其余两轴坐标升序排序,排序顺序为x>y>z。 比如对于f面来说,先对其中的片按照x坐标升序排序,将其分为三组,然后对三组分别按照y坐标排序。 |
短语 | 表示单次转动的字符串 |
公式 | 由短语组合而成的字符串,表示一个转动序列 |
基本短语(Phrase):
面名称表示顺时针转动;
r: r面顺时针转动
面名称后加'表示逆时针转动;
r': r面逆时针转动
组合:
rur'u'
中间的空格可选:
r u r'u'
- udfbrl:顺时针转动对应的面
- UDFBRL:逆时针转动对应的面
- xyz:顺时针绕对应的轴转动
- XYZ:逆时针绕对应的轴转动
- space: 重置魔方(复原)
- backspace/ctrl-o:撤销
- shift-backspace/ctrl-i:重做
- ctrl-enter: 输入公式(esc可退出)
- enter:提交公式(输入框内)
-
动作框架
- 支持撤销、重做
- reset的撤销重做
- 键盘、公式、按钮动作的统一管理
- 公式
- 输入错误提示
- 支持按行输入
- 高阶公式
- 短语重复
- 运行进度显示和控制(区分输入界面和执行界面)
- 键盘模式自动隐藏公式输入
- 动作时间轴、计时等
-
Cube
- 支持自定义材质
- 状态描述
- 状态验算
- 存储每个片的位置和旋转信息,以实现更为灵活的自定义材质
- 可解判定(置换群?)
-
历史记录显示
-
打乱、CFOP还原
-
帮助(学习)系统
- CFOP公式显示
-
配置界面
- 自定义快捷键绑定
- 手柄支持
- 动画速度
- 视角范围
- 镜头移动方式(摄像机模式,轴模式)
- commit id
-
移动端适配
- 相机触摸控制
-
其它
- vimium检测
- async协程,Promise的中断