示例#1
0
        /// <summary>
        /// returns the sides that would be front and left
        /// if the cube was rotated so that the corner is the left bottom corner
        /// </summary>
        /// <param name="corner"></param>
        /// <param name="front"></param>
        /// <param name="left"></param>
        public static void GetFrontLeftFromCorner(RelativeCornerPosition corner, out Sides front, out Sides left)
        {
            //default
            front = Sides.Front;
            left  = Sides.Left;

            if (corner == RelativeCornerPosition.BottomLeft)
            {
                front = Sides.Front;
                left  = Sides.Left;
            }
            if (corner == RelativeCornerPosition.BottomRight)
            {
                front = Sides.Right;
                left  = Sides.Front;
            }
            if (corner == RelativeCornerPosition.TopRight)
            {
                front = Sides.Back;
                left  = Sides.Right;
            }
            if (corner == RelativeCornerPosition.TopLeft)
            {
                front = Sides.Left;
                left  = Sides.Back;
            }
        }
示例#2
0
        public void Apply(Cube cube, RelativeCornerPosition corner)
        {
            Sides frontSide, leftSide;

            Helper.GetFrontLeftFromCorner(corner, out frontSide, out leftSide);
            cube.RotateSideCCW(frontSide);
            cube.RotateBottomCCW();
            cube.RotateSideCW(frontSide);
        }
示例#3
0
        public double Applicable(Cube cube, RelativeCornerPosition corner)
        {
            Sides f, l;

            Helper.GetFrontLeftFromCorner(corner, out f, out l);
            Side front = cube.GetSideFromEnum(f);
            Side left  = cube.GetSideFromEnum(l);
            Side right = left.Opposite;

            foreach (var side in new Side[] { front, left, right })
            {
                if (side.Fields[2, 1] == side.Color)
                {
                    return(0);
                }
            }
            return(1);
        }
示例#4
0
        public double Applicable(Cube cube, RelativeCornerPosition corner)
        {
            Sides frontSide, leftSide;

            Helper.GetFrontLeftFromCorner(corner, out frontSide, out leftSide);
            Side front = cube.GetSideFromEnum(frontSide);
            Side left  = cube.GetSideFromEnum(leftSide);

            //if the front bottom left field is of the top color
            //and the other fields are either the left color or the front color
            if (left.GetCornerField(RelativeCornerPosition.BottomRight) == cube.Top.Color &&
                (front.GetCornerField(RelativeCornerPosition.BottomLeft) == left.Color || front.GetCornerField(RelativeCornerPosition.BottomLeft) == front.Color) &&
                (cube.Bottom.GetCornerField(Helper.SwapTopBottom(corner)) == left.Color || cube.Bottom.GetCornerField(Helper.SwapTopBottom(corner)) == front.Color))
            {
                return(1);
            }
            else
            {
                return(0);
            }
        }
示例#5
0
        /// <summary>
        /// swaps top and bottom, leaves the other options as they are
        /// </summary>
        /// <param name="?"></param>
        /// <returns></returns>
        public static RelativeCornerPosition SwapTopBottom(RelativeCornerPosition startPosition)
        {
            if (startPosition == RelativeCornerPosition.TopLeft)
            {
                return(RelativeCornerPosition.BottomLeft);
            }
            if (startPosition == RelativeCornerPosition.TopRight)
            {
                return(RelativeCornerPosition.BottomRight);
            }
            if (startPosition == RelativeCornerPosition.BottomLeft)
            {
                return(RelativeCornerPosition.TopLeft);
            }
            if (startPosition == RelativeCornerPosition.BottomRight)
            {
                return(RelativeCornerPosition.TopRight);
            }

            return(startPosition);
        }
示例#6
0
        public Brush GetCornerField(RelativeCornerPosition corner)
        {
            if (corner == RelativeCornerPosition.BottomLeft)
            {
                return(fields[2, 0]);
            }
            if (corner == RelativeCornerPosition.BottomRight)
            {
                return(fields[2, 2]);
            }
            if (corner == RelativeCornerPosition.TopLeft)
            {
                return(fields[0, 0]);
            }
            if (corner == RelativeCornerPosition.TopRight)
            {
                return(fields[0, 2]);
            }

            return(Brushes.Transparent);                //default to satisfy compiler
        }
示例#7
0
        public double Applicable(Cube cube, RelativeCornerPosition corner)
        {
            Sides frontSide, leftSide;

            Helper.GetFrontLeftFromCorner(corner, out frontSide, out leftSide);
            Side front = cube.GetSideFromEnum(frontSide);
            Side left  = cube.GetSideFromEnum(leftSide);

            //check if the corner piece is incorrectly positioned, but one of the 3 colors is the top color
            //moving it down if it is not a top piece is useless
            if ((front.GetCornerField(RelativeCornerPosition.TopLeft) != front.Color ||
                 left.GetCornerField(RelativeCornerPosition.TopRight) != left.Color) &&
                (front.GetCornerField(RelativeCornerPosition.TopLeft) == cube.Top.Color ||
                 left.GetCornerField(RelativeCornerPosition.TopRight) == cube.Top.Color ||
                 cube.Top.GetCornerField(corner) == cube.Top.Color))
            {
                return(1);
            }
            else
            {
                return(0);
            }
        }
示例#8
0
        /// <summary>
        /// represents the move to rotate the front 3 edges clockwise
        /// </summary>
        /// <param name="cube"></param>
        public void Apply(Cube cube, RelativeCornerPosition corner)
        {
            Sides f, l;

            Helper.GetFrontLeftFromCorner(corner, out f, out l);
            Side front = cube.GetSideFromEnum(f);
            //because the cube is rotated around the x-axis, left and right are switched
            Side right = cube.GetSideFromEnum(l);
            Side left  = right.Opposite;

            cube.RotateSideCW(front.CubeSide);
            cube.RotateSideCW(front.CubeSide);
            cube.RotateBottomCW();
            cube.RotateSideCW(left.CubeSide);
            cube.RotateSideCCW(right.CubeSide);
            cube.RotateSideCW(front.CubeSide);
            cube.RotateSideCW(front.CubeSide);
            cube.RotateSideCCW(left.CubeSide);
            cube.RotateSideCW(right.CubeSide);
            cube.RotateBottomCW();
            cube.RotateSideCW(front.CubeSide);
            cube.RotateSideCW(front.CubeSide);
        }