你家里有没有这样一个魔方:买回来时六面整整齐齐,转了几下之后,就一直保持着“自由配色”的状态?
偶尔想把它还原,照着教程试了一会儿,好像复原了一面,另外几面又乱了。再看到一串 R U R' U',还得先弄明白这些字母应该怎么转。
这次,我用 C# 做了一个 Windows 桌面小工具:魔方还原助手。
把手里魔方的六面颜色填进去,软件检查状态、计算还原步骤,再用三维动画演示每一步。你可以拿着实物,点一步、转一步,按自己的节奏跟着做。
六面涂色 → 检查状态 → 生成步骤 → 跟着动画还原。
整个过程在本地完成,无需显卡、模型权重,也不需要安装 Python 或 Java。
魔方还原助手真实运行界面:左侧录入六面颜色,右侧查看三维魔方和还原步骤
上图为实际软件界面。左侧保留最初录入的颜色,右侧负责展示还原过程。
先点一下“打乱练习”,试试效果
如果你暂时不想填写六面颜色,可以先体验软件自带的练习流程。
点击“打乱练习”,程序会从复原状态出发,执行一组 25 步的随机转动,生成一个打乱的魔方。然后点击“开始还原”,右侧就会出现还原步骤。
这时可以点“下一步”,看某一层怎样转动;也可以点“播放”,观看完整过程。
三维魔方支持鼠标拖动,能转到后面、底面看看。勾选“跟随”后,每一步开始时,观察角度会自动调整,让当前转动面更容易看清。
播放速度可以切换。想停下来对照实物,就暂停;某一步没看明白,可以退回去再看。
随机打乱的公式也会留在日志里,可以拿一个已经复原的实物魔方照着打乱,再试着跟随还原步骤练习。
手里的魔方,怎么录进去?
第一步,先确定六个面的身份。
软件用六个字母表示方向:
U 上、R 右、F 前、D 下、L 左、B 后。
默认配色是白色在上、绿色朝前、红色在右。六个中心块决定每一面的颜色;如果你的魔方配色不同,也可以取消“锁定中心”,修改中心颜色。
接着,点击“清空非中心”。中心块会保留,只需要填写另外 48 个色块。
选择上方的颜色画笔,再点击对应方格即可。左键涂色,右键擦除,数字键 1~6 可以快速切换颜色。
录入时,每一面都要正对着看,从左到右、从上到下填写。特别留意上面和下面的朝向:U 面的下边靠近前 F 面,D 面的上边靠近前 F 面。
这一步不用着急。方向填对了,后面的求解和跟转才有意义。
每种颜色都有九块,就一定填对了吗?
还不够。
三阶魔方除了六种颜色,还包含角块、棱块,以及它们的位置和方向。即使每种颜色恰好九块,也可能拼出一个无法通过正常转动还原的状态。
因此,软件提供了“检查状态”。它会检查颜色数量、角棱组合、重复或缺失的块,以及扭转、翻转和置换的约束。
比如,只把一个棱块单独翻过来,或者单独拧动一个角,就会破坏正常转动需要满足的条件。
遇到提示时,可以先核对六面是否填错、某一面是否录反了方向。如果实物曾经拆装过,也要考虑装回去的位置或方向是否正确。
先把状态检查清楚,再开始还原,能少走很多弯路。
有了步骤,怎样跟着转?
生成结果后,软件会显示完整公式,同时给每一步配上中文说明。
例如:
R:右面顺时针转 90°。R':右面逆时针转 90°。R2:右面转 180°。
这里的顺时针、逆时针,都按正对被转动的那一面判断。
拿着实物跟转时,保持最初的整体方向:F 朝前、U 朝上、R 在右。软件为了展示动作而改变观察角度,并不代表你也要把实物整体换一个朝向。
可以先用“下一步”慢慢转。一步完成后,对照一下,再继续下一步。右侧步骤列表也支持点击跳转,查看执行完某一步后的状态。
软件会保留左侧最初的录入,右侧动画独立回放,方便随时回到起点重新看。
没填完可以保存,步骤也能带走
六面填了一半,有事要离开,可以先保存工程。
工程会保留录入颜色,包括尚未填完的部分。下次打开后继续填写,再重新求解即可。
当前提供两种导出:
- TXT 还原步骤:包含初始状态、中心配色、完整公式和逐步中文说明,可以复制到文档中整理、打印。
- PNG 六面配色图:把录入的魔方导出为展开图,方便记录或交流。
默认工作目录放在程序旁边的 workspace 中,业务路径按程序所在目录解析,便于整个文件夹一起移动。
它是怎样算出还原步骤的?
这部分采用 Kociemba 两阶段算法。
可以把它理解为:先把复杂的魔方状态整理到一个满足特定条件的范围,再从这个范围继续搜索复原。
第一阶段处理角块、棱块的朝向,以及中层棱块所在的组合;第二阶段在相应的转动规则下继续寻找还原路径。配合预计算的转移表和剪枝表,就能减少很多不必要的尝试。
本项目集成了开源的 tremwil/TwoPhaseSolver(github.com/tremwil/Two… C# 实现,保留了上游许可证和对 Herbert Kociemba 的致谢,并补充了桌面应用需要的路径处理、取消搜索和时间预算检查。
搜索表已经放在软件包里,完整解压后即可使用,不需要第一次启动时长时间生成。
求解结果还会经过一次独立验证:程序把输出的每个动作重新应用到魔方状态上,确认六面确实复原后,再把步骤展示出来。
目前已完成 40 组、每组 25 步打乱状态的还原测试,并核对回放结果;同时检查了不同中心配色、非法状态、取消搜索和工程保存等情况。
两阶段法侧重快速找到可用解,不承诺每次都是最少步数。具体搜索时间也会随状态和电脑而变化。
对 C# 开发者,这也是一个可以拆开学习的项目
项目使用 C# WinForms + .NET Framework 4.8,提供完整的 VS2022 解决方案。
窗体保留 .Designer.cs 和 .resx,方便在设计器里调整。六面展开图和三维魔方,使用标准控件配合绘制事件实现。
三维演示的基本过程也很直观:给每个色块保存空间位置和朝向,转动时旋转对应层,再投影到二维界面绘制。动画结束后,才提交这一步的离散状态。
后台搜索、取消任务、结果校验、相对路径和安全保存,也都串在同一个小工具里。想学习“把一个算法做成别人能用的桌面软件”,可以从这个流程看起。
当前部署压缩包约 4.34 MiB,完整源码压缩包约 4.77 MiB。运行需要 Windows x64 和 .NET Framework 4.8。源码用 VS2022 打开后,选择 Release、x64 编译即可,搜索表随源码提供。
使用时请完整解压,保留 assets 等目录,双击 RubiksCube.Workshop.exe 启动。
这一版适合拿来做什么?
可以把它当作桌边的还原助手:卡住的时候录入状态,跟着演示试一遍。也可以陪孩子一起辨认方向、认识公式,观察一次转动会影响哪些色块。
对于已经会一点魔方的朋友,打乱练习、公式应用和步骤回放,也能作为一个方便观察的小工具。
当前版本面向普通三阶魔方,手工录入颜色。摄像头自动识色、其他阶数和异形魔方暂未加入;练习打乱也不作为正式比赛的打乱工具。
我希望它能让那个在抽屉里乱了很久的魔方,重新变得愿意拿出来玩。
想交流软件使用、源码学习和后续改进,欢迎加入:
QQ群:天天代码码天天
群号:264292622
也欢迎说说,你最想给这个魔方助手加什么功能。