Example #1
0
        public void Init()
        {
            //initial values, no state given
            FrontFace.Init(CubeValue.Front);
            BackFace.Init(CubeValue.Back);
            UpFace.Init(CubeValue.Up);
            DownFace.Init(CubeValue.Down);
            LeftFace.Init(CubeValue.Left);
            RightFace.Init(CubeValue.Right);

            return;
        }
Example #2
0
        public void DoMove(CubeMove move)
        {
            int i, j;

            CubeFace  endFace    = null;
            CubeValue planeValue = CubeValue.None;

            int z = Math.Abs(move.Level - faceMax);

            switch (move.Plane)
            {
            case CubePlane.X:
                //save before move
                if (move.Level == 0)
                {
                    endFace = LeftFace;
                }
                else if (move.Level == faceMax)
                {
                    endFace = RightFace;
                }

                for (i = 0; i < cubeSize; i++)
                {
                    j          = Math.Abs(i - faceMax);
                    planeValue = FrontFace.GetFaceValue(move.Level, i);

                    //do plane move
                    if (move.Direction == CubeMoveDirection.Right)
                    {
                        FrontFace.SetFaceValue(move.Level, i, UpFace.GetFaceValue(move.Level, i));
                        UpFace.SetFaceValue(move.Level, i, BackFace.GetFaceValue(move.Level, j));
                        BackFace.SetFaceValue(move.Level, j, DownFace.GetFaceValue(move.Level, j));
                        DownFace.SetFaceValue(move.Level, j, planeValue);
                    }
                    else
                    {
                        FrontFace.SetFaceValue(move.Level, i, DownFace.GetFaceValue(move.Level, j));
                        DownFace.SetFaceValue(move.Level, j, BackFace.GetFaceValue(move.Level, j));
                        BackFace.SetFaceValue(move.Level, j, UpFace.GetFaceValue(move.Level, i));
                        UpFace.SetFaceValue(move.Level, i, planeValue);
                    }

                    //do face move maybe
                    DoFaceMove(endFace, move.Direction, i, j);
                }

                break;

            case CubePlane.Y:
                //save before move
                if (move.Level == 0)
                {
                    endFace = FrontFace;
                }
                else if (move.Level == faceMax)
                {
                    endFace = BackFace;
                }

                for (i = 0; i < cubeSize; i++)
                {
                    j          = Math.Abs(i - faceMax);
                    planeValue = LeftFace.GetFaceValue(z, i);

                    //do plane move
                    if (move.Direction == CubeMoveDirection.Right)
                    {
                        LeftFace.SetFaceValue(z, i, DownFace.GetFaceValue(j, move.Level));
                        DownFace.SetFaceValue(j, move.Level, RightFace.GetFaceValue(z, j));
                        RightFace.SetFaceValue(z, j, UpFace.GetFaceValue(i, move.Level));
                        UpFace.SetFaceValue(i, move.Level, planeValue);
                    }
                    else
                    {
                        LeftFace.SetFaceValue(z, i, UpFace.GetFaceValue(i, move.Level));
                        UpFace.SetFaceValue(i, move.Level, RightFace.GetFaceValue(z, j));
                        RightFace.SetFaceValue(z, j, DownFace.GetFaceValue(j, move.Level));
                        DownFace.SetFaceValue(j, move.Level, planeValue);
                    }

                    //do face move maybe
                    DoFaceMove(endFace, move.Direction, i, j);
                }

                break;

            case CubePlane.Z:
                //save before move
                if (move.Level == 0)
                {
                    endFace = DownFace;
                }
                else if (move.Level == faceMax)
                {
                    endFace = UpFace;
                }

                for (i = 0; i < cubeSize; i++)
                {
                    j          = Math.Abs(i - faceMax);
                    planeValue = FrontFace.GetFaceValue(i, move.Level);

                    //do plane move
                    if (move.Direction == CubeMoveDirection.Right)
                    {
                        FrontFace.SetFaceValue(i, move.Level, RightFace.GetFaceValue(j, move.Level));
                        RightFace.SetFaceValue(j, move.Level, BackFace.GetFaceValue(j, move.Level));
                        BackFace.SetFaceValue(j, move.Level, LeftFace.GetFaceValue(i, move.Level));
                        LeftFace.SetFaceValue(i, move.Level, planeValue);
                    }
                    else
                    {
                        FrontFace.SetFaceValue(i, move.Level, LeftFace.GetFaceValue(i, move.Level));
                        LeftFace.SetFaceValue(i, move.Level, BackFace.GetFaceValue(j, move.Level));
                        BackFace.SetFaceValue(j, move.Level, RightFace.GetFaceValue(j, move.Level));
                        RightFace.SetFaceValue(j, move.Level, planeValue);
                    }

                    //do face move maybe
                    DoFaceMove(endFace, move.Direction, i, j);
                }

                break;
            }
        }