说起来这个《魔方小助手》,就是我那阵子在家闲得蛋疼,又不想光看手机,想着找点事儿折腾出来的。我这个人,看到别人玩魔方玩得溜,心里就痒痒,可自己一上手,立马就变“手残党”了。网上那些什么CFOP教程,什么七步还原法,我对着视频看了一百遍,手指头都快掰断了,脑子还是记不住那些个鬼画符似的公式。

摸索思路,找个切入点

我当时就寻思着,我记不住这些公式,那要是能有个东西,我把魔方的颜色输进去,它就能自动给我算出来下一步该怎么拧,那不是美滋滋?这股子“懒劲”就成了我动手的最大动力。

我这个人,做什么事都喜欢先去网上扒拉扒拉资料。于是我先是去B站、知乎把那些经典的魔方还原教程给翻了一遍,特别是那些新手入门的,什么“层先法”,就是一层一层地还原那种,我觉得这个比较适合我这种思路。我看明白了,魔方还原就是一个不断把不规则状态变成规则状态的过程,每一步都有它固定的目的和公式。

我就想着,如果我能把魔方的所有面,所有格子的颜色都“告诉”程序,那程序是不是就能像一个经验丰富的魔方玩家一样,根据当前状态,判断出下一步应该怎么做?这听起来挺复杂,但我想着先从最简单的入手。

动手敲代码,磕磕绊绊的开始

有了这个想法,我就开始琢磨怎么实现。我电脑上平时就写写Python,想着这东西应该也能用Python来搞定。刚开始,我压根儿没想用什么图像识别那种高大上的玩意儿,那对我来说太难了。我就想,最笨的办法,就是我自己手动把魔方九个面的颜色,一个一个输进去。

于是我先搭了一个特别简陋的界面,就是纯文字的命令行界面。我把魔方展开成一个十字架形状,每个面九个格子,我就设计成让我输入比如“R1C1”代表红色的意思,然后依次输入每个格子的颜色。这步就挺费劲的,因为要确保输入的顺序和实际魔方一致,不然结果肯定不对。为了避免出错,我给自己画了个小图,标清楚每个格子的编号,然后对着图一点点输入。

输入问题解决了,接下来就是核心的逻辑部分了。我把网上找来的“层先法”教程,也就是新手最常用的那个,一步一步地拆解。

  • 第一步:复原十字。 我就找了很多十字的各种情况,把它们的初始状态和对应的旋转公式给记录下来。
  • 第二步:复原角块。 接着就是每个角的块,也有它对应的摆放位置和旋转公式。
  • 第三步:复原中棱。 中间那一层的棱块,又是另外一套公式。
  • 两步:顶面十字和顶面角块。 这两步的公式就更多更复杂了。

我把这些公式都整理成了一个个的“规则”。比如,如果魔方现在是A状态,那我执行旋转X,就会变成B状态,而B状态距离还原就更近了一步。我就用Python里的字典和列表,把这些状态和对应的操作给存起来。听起来简单,但写起来真是一团麻,因为魔方状态变化太复杂了,一个公式影响的不仅仅是当前的面,还有相邻的面。

踩坑、调试,直到怀疑人生

刚开始代码跑起来,那叫一个惨不忍睹。我输入一组颜色,它给出来的步骤,要么是根本跑不通,魔方完全没变化;要么是给一堆乱七八糟的旋转,魔方变得更乱了;更有甚者,它会陷入一个无限循环,一直给我同一个旋转指令,根本停不下来。

我当时真是头都大了,觉得是不是自己太异想天开了。但我这个人,有点“轴”,越是搞不定就越想搞定。我就一遍一遍地对着魔方,一步一步地跟着我的程序走,人工模拟魔方的每一步变化,然后和程序计算出来的结果进行对比。

这个过程真的非常痛苦。我发现好几次都是我自己把公式记错了,或者在代码里把颜色判断的条件写漏了,导致程序“误判”了魔方的状态。比如,本来应该判断顶面有没有黄色块,我可能写成了判断侧面。还有一些时候,是公式执行完之后,魔方的新状态没有正确地更新到程序里,导致程序一直在旧状态上打转。

为了解决这些问题,我给自己搞了一个临时的“可视化”工具,就是一个打印魔方状态的函数,每次执行完一个旋转操作,我就把魔方所有格子的颜色状态打印出来,看看是不是和我想象的一样。然后对着打印出来的状态,再对照我手里的真魔方,一点点地排查哪里出了问题。

修修补补,总算见了点成效

经过无数次的修修补补,我终于让我的小助手能跑通最简单的魔方还原了。那种成就感,真的比自己手动还原魔方还要大!虽然它只能按照一种最简单的“层先法”来还原,速度也肯定比不上那些专业的求解器,但对我来说,它已经是个大飞跃了。

后来我又给它加了点小功能。比如,每次还原完了,可以一键清空所有颜色,重新输入;或者加了个“撤销上一步”的功能,以防我跟着它的指令拧错了。我还花了点时间,把输出的旋转指令改得更通俗易懂一点,比如“正面顺时针90度”这种,而不是简单的“F’”。

这玩意儿虽然不是什么惊天地泣鬼神的大项目,但从一个完全不懂魔方还原原理的人,到自己敲代码实现一个能辅助还原的工具,我真是学到了不少东西。最大的感触就是,有些看似特别复杂的事情,你真能沉下心来,一步一步地把它拆解开来,然后一个萝卜一个坑地去解决,总能看到点成果的。而且自己动手做的东西,用起来就是感觉特别顺手,特别有成就感。

免责声明:喜欢请购买正版授权并合法使用,此软件只适用于测试试用版本。来源于转载自各大媒体和网络。 此仅供爱好者测试及研究之用,版权归发行公司所有。任何组织或个人不得传播或用于任何商业用途,否则一切后果由该组织及个人承担!我方将不承担任何法律及连带责任。 对使用本测试版本后产生的任何不良影响,我方不承担任何法律及连带责任。 请自觉于下载后24小时内删除。如果喜欢本游戏,请购买正版授权并合法使用。 本站内容侵犯了原著者的合法权益,可联系我们进行处理。