.
1
/
2
魔方打乱程序思路
2010
之前在 上下载了一个魔方打乱程序手机版
(
WM
平台)
,
程序中的打乱可以说是糟透
了,
RLR
’这样的出现很多,但最让人郁闷的不是
RLR
’
,而是居然还让我见到了
DD
’这
样的公式,
真是有够开玩笑的,
所以想到了写这篇文章,
我不是专业的程序员,也就不写什
么例程之类的了,只写写我想到的方法。
首先我把魔方打乱公式中的转动方法分为
18
种,按照
U
、
U2
、
U
’
、
D
、
D2
、
D
’
、
F
、
F2
、
F
’
、
B
、
B2
、
B
’
、
R
、
R2
、
R
’
、
L
、
L2
、
L
’这样的顺序来把这
18
个转动方式编 为
1-18
(顺序一写要是正对的两个面是连在一起的)
,再准备三个整数变量
I1
、
I2
和
I3
。
然后在出打乱公式第一步的时候生成一个
1
到
18
之间的随机数并把这个随机数保存到
I2
中。
接下来出打乱公式的第二步,生成随机数(一样是
1
到
18
之间的,后面没特别说明的就是
1
到
18
之间的)
,并把第二步生成的这个随机数保存到
I1
中,这时要做一次检查,以防止
出现
UU
’或者
RR2
这样的公式出现,这里我的检查方法很简单,直接检查
(I1-1)/3
的整数
部分是否等于
(I2-1)/3
的整数部分,例如第一步是
U
,第二步是
U
’
,那么现在
I2
的值是
1
,
I1
的值是
3
,放进我前面说的两个公式里就是
(3-1)/3=0.666
…和
(1-1)/3=0
,它们的整数部分
相等,
检查结果就证明了第二步如果是我刚才的例子则是废步,
那么就重新生成一个随机数
并保存到
I1
中去吧(条件循环)
;再举个例子,第一步是
R2
,第二步是
L
’
,对照我的
18
个编 可以看到
R2
是
14
,
L
是
18
,那么两个公式就是
(18-1)/3=5.666
…和
(14-1)/3=4.333
…,
此时两个结果的整数部分不相等,这个情况下就说明
R2L
’不是废步。
接下来就说说第三步吧,第三步开始时先把
I2
的值保存到
I3
中去,然后
I1
的值保存到
I2
中去,
比如刚才前面所说的
I2
是
14
,
I1
是
18
,
那么经过我现在所写的之后,
就应该变为
I3=14
,
I2=18
了,
然后再次生成随机数,
并把这个新的随机数保存到
I1
里,
进行一次刚才第二步时
一样的检查,也就是看
(I1-1)/3
和
(I2-1)/3
的整数部分,这里就不废话了,接下来检查第三步
会不会造成和第一步产生废步,
也就是说不可以有
RLR
或者
F2BF
’
这样的公式出现,
检查
方法也很简单,先看
(I1-1)/6
和
(I2-1)/6
的整数部分是否相等,如果不相等则第三步没有和第
一步产生废步,后面的步骤可以跳过了(原理很简单,稍微想想就知道了)
;但是如果先看
(I1-1)/6
和
(I2-1)/6
的整数部分相等的话,
那么就还要再检查一次了,
这次要检查的是
(I1-1)/3
和
(I3-1)/3
的整数部分,如果相等则说明产生废步了,不等则不是废步。就拿刚才的第一步
是
14(R2)
,第二步是
(L
’
)
来说吧,第三步如果是
L
、
L2
和
L
’这三个的其中之一,那么在
第一次检查(除以
3
的)时就不通过了(请自己将
18
个编 套用公式算一下,后面都不写
出公式的计算过程了)
;那么第三步如果是
R
、
R2
和
R
’这三个其中之一的话,那么第三步
第一次检查则通过,于是进入第三步的第二次检查(除以
6
的)
,这里由于前面一步是属于
L
转的三个状态之一,所以要进入第三步的第三次检查(也是除以
3
的,不过
I2
换成了
I3
)
了,这时就会发现第三步和第一步出现废步,重新生成随机数给
I1
吧(条件循环)
。
现在生成第四步,再往后面和第四步是一样的,就不用写了。首先是把
I3
里保存的数字输
出成文字,
也就是
I3
为
1
则输出
U
,
为
2
则输出
U2
等,
,
接下来就是完全和第三步一样了,
没什么好写的了,
然后是就最后一步了,
当生成到了最后一步时,
检查完了
I1
不是废步就直接把
I2
和
I1
里保
存的数字输出成文字,至此整个没有明显废步打乱公式就生成成功了,我想写的也写完了,
呵呵。
PS
:对于
18
种转动在大部分编程语言里应该是可以写成一个文本数组吧p>
最后附上我用上面所说的方法生成的
100
步公式吧,看看上面写的方法是否正确的。
相关资源:软件魔盒v2.9.5.0官方最新安装版-其它代码类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!