/// <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; } }
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); }
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); }
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); } }
/// <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); }
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 }
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); } }
/// <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); }