Skip to content

edgesider/blankube

Repository files navigation

Blankube

魔方模拟器+魔方演算器,示例

计划的功能有:

  • 支持高阶魔方
  • 解析执行公式
  • 键盘操作
  • 手柄操作
  • 自动打乱
  • 还原计时
  • 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:提交公式(输入框内)

TODO

  • 动作框架

    • 支持撤销、重做
    • reset的撤销重做
    • 键盘、公式、按钮动作的统一管理
    • 公式
      • 输入错误提示
      • 支持按行输入
      • 高阶公式
      • 短语重复
      • 运行进度显示和控制(区分输入界面和执行界面)
      • 键盘模式自动隐藏公式输入
    • 动作时间轴、计时等
  • Cube

    • 支持自定义材质
    • 状态描述
      • 状态验算
      • 存储每个片的位置和旋转信息,以实现更为灵活的自定义材质
      • 可解判定(置换群?)
  • 历史记录显示

  • 打乱、CFOP还原

  • 帮助(学习)系统

    • CFOP公式显示
  • 配置界面

    • 自定义快捷键绑定
    • 手柄支持
    • 动画速度
    • 视角范围
    • 镜头移动方式(摄像机模式,轴模式)
    • commit id
  • 移动端适配

    • 相机触摸控制
  • 其它

    • vimium检测
    • async协程,Promise的中断

About

A Rubik's Cube.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published