第一次写博客,还不知道怎么写。
自己制作的魔方还原项目,写入cfop高级公式
先上几张效果图吧 ↓
这是刚开始时,未打乱
这是在打乱过程中
还原之后,除了中心块朝向不同(当然,魔方还原也没有要求中心块朝向)
这是一年前做的小项目了,当时使用的Unity3D5.6版本开发
开发的是mvc初步项目设计架构。
引入自己写的dll库文件以达到后期可以移植的可能性。
数据模型
编写时首先使用控制台应用编写数据模型的模拟还原。
首先搭建魔方结构(自己写的Vec3)
/// <summary>
/// 魔方管理
/// </summary>
///
/// 所有方块的旋转由此文件管理封装
///
/// 使用:
/// 构造器中Init创建一个魔方
/// ...
public class RubikCube
{
/// <summary>
/// 所有旋转事件的集合
/// </summary>
List<Cube>[] list_event = new List<Cube>[9];
#region 方块变量
/// <summary>
/// 角块
/// </summary>
public Cube[][][] hornbiock { get; private set; }
/// <summary>
/// 棱块
/// </summary>
public Cube[][][] edgeCube { get; private set; }
/// <summary>
/// 中心块
/// </summary>
public Cube[][][] centreCube { get; private set; }
#endregion
public RubikCube()
{
Init();
}
/// <summary>
/// 方块对象初始化
/// </summary>
private void Init()
{
#region 集合数组
for (int i = 0; i < list_event.Length; i++)
{
list_event[i] = new List<Cube>();
}
#endregion
#region 角块
hornbiock = new Hornblock[2][][];
for (int i = 0; i < 2; i++)
{
hornbiock[i] = new Hornblock[2][];
for (int j = 0; j < 2; j++)
{
hornbiock[i][j] = new Hornblock[2];
for (int k = 0; k < 2; k++)
{
hornbiock[i][j][k] = new Hornblock(new RubikCubeVector3(ESurface.U, ESurface.F, ESurface.R));
}
}
}
hornbiock[0][0][0].Twirl_U().Twirl_U().ToState();
hornbiock[0][0][1].Twirl_U().ToState();
hornbiock[0][1][0].Twirl_R().Twirl_R().Twirl_D().ToState();
hornbiock[0][1][1].Twirl_F().Twirl_F().ToState();
hornbiock[1][0][0].Twirl_U(false).ToState();
hornbiock[1][0][1].ToState();
hornbiock[1][1][0].Twirl_R().Twirl_R().ToState();
hornbiock[1][1][1].Twirl_R().Twirl_R().Twirl_D(false).ToState();
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
hornbiock[i][j][k].Position = hornbiock[i][j][k].StatePosition;
hornbiock[i][j][k].SetListEvent(list_event);
}
}
}
//hornbiock[0][0][0]//UBL
//hornbiock[0][0][1]//UFL
//hornbiock[0][1][0]//DBL
//hornbiock[0][1][1]//DFL
//hornbiock[1][0][0]//UBR
//hornbiock[1][0][1]//UFR
//hornbiock[1][1][0]//DBR
//hornbiock[1][1][1]//DFR
list_event[(int)ESurface.U].Add(hornbiock[0][0][0]); list_event[(int)ESurface.U].Add(hornbiock[0][0][1]); list_event[(int)ESurface.U].Add(hornbiock[1][0][0]); list_event[(int)ESurface.U].Add(hornbiock[1][0][1]);
list_event[(int)ESurface.D].Add(hornbiock[0][1][0]); list_event[(int)ESurface.D].Add(hornbiock[0][1][1]); list_event[(int)ESurface.D].Add(hornbiock[1][1][0]); list_event[(int)ESurface.D].Add(hornbiock[1][1][1]);
list_event[(int)ESurface.F].Add(hornbiock[0][0][1]); list_event[(int)ESurface.F].Add(hornbiock[0][1][1]); list_event[(int)ESurface.F].Add(hornbiock[1][0][1]); list_event[(int)ESurface.F].Add(hornbiock[1][1][1]);
list_event[(int)ESurface.B].Add(hornbiock[0][0][0]); list_event[(int)ESurface.B].Add(hornbiock[0][1][0]); list_event[(int)ESurface.B].Add(hornbiock[1][0][0]); list_event[(int)ESurface.B].Add(hornbiock[1][1][0]);
list_event[(int)ESurface.R].Add(hornbiock[1][0][0]); list_event[(int)ESurface.R].Add(hornbiock[1][0][1]); list_event[(int)ESurface.R].Add(hornbiock[1][1][0]); list_event[(int)ESurface.R].Add(hornbiock[1][1][1]);
list_event[(int)ESurface.L].Add(hornbiock[0][0][0]); list_event[(int)ESurface.L].Add(hornbiock[0][0][1]); list_event[(int)ESurface.L].Add(hornbiock[0][1][0]); list_event[(int)ESurface.L].Add(hornbiock[0][1][1]);
#endregion
#region 棱块
edgeCube = new EdgeCube[2][][];
for (int i = 0; i < 2; i++)
{
edgeCube[i] = new EdgeCube[3][];
for (int j = 0; j < 3; j++)
{
edgeCube[i][j] = new EdgeCube[2];
for (int k = 0; k < 2; k++)
{
edgeCube[i][j][k] = new EdgeCube(new RubikCubeVector2(ESurface.U, ESurface.F));
}
}
}//end -- 上下两层棱块初始化
edgeCube[0][0][0].Twirl_U().Twirl_U().ToState();
edgeCube[0][0][1].Twirl_U().ToState();
edgeCube[0][1][0].Twirl_U().Twirl_U().Twirl_B().ToState();
edgeCube[0][1][1].Twirl_F(false).ToState();
edgeCube[0][2][0].Twirl_F().Twirl_F().Twirl_D().Twirl_D().ToState();
edgeCube[0][2][1].Twirl_F().Twirl_F().Twirl_D(false).ToState();
edgeCube[1][0][0].Twirl_U(false).ToState();
edgeCube[1][0][1].ToState();
edgeCube[1][1][0].Twirl_U().Twirl_U().Twirl_B(false).ToState()