/// <summary> /// Constructor of Centre to create a centre of specified colour /// </summary> /// <param name="colour">The colour the piece will be</param> public Centre(Cube.Colours colour) { this.colour = colour; pieceType = (int)Cube.PieceTypes.centre; switch (colour) { case Cube.Colours.green: position = Cube.Positions.top; break; case Cube.Colours.yellow: position = Cube.Positions.front; break; case Cube.Colours.red: position = Cube.Positions.right; break; case Cube.Colours.white: position = Cube.Positions.back; break; case Cube.Colours.orange: position = Cube.Positions.left; break; case Cube.Colours.blue: position = Cube.Positions.bottom; break; } }
/// <summary> /// Returns the colour in the specifed position as a letter (as a string). Used for /// making a printable cube /// </summary> /// <param name="pos">The position to get the string for</param> /// <returns>String that represents the colour at the position of the piece</returns> public string GetColourString(Cube.Positions pos) { for (int i = 0; i < position.Length; i++) { if (position[i] == pos) { if (colour[i] == Cube.Colours.green) { return("g"); } else if (colour[i] == Cube.Colours.blue) { return("b"); } else if (colour[i] == Cube.Colours.yellow) { return("y"); } else if (colour[i] == Cube.Colours.white) { return("w"); } else if (colour[i] == Cube.Colours.orange) { return("o"); } else { return("r"); } } } return(null); }
// Return if piece is within the specified side public override bool InSide(Cube.Positions side) { if (position == side) { return(true); } else { return(false); } }
// Return if in side public override bool InSide(Cube.Positions side) { foreach (Cube.Positions pos in position) { if (pos == side) { return(true); } } return(false); }
// Return if piece is in the specified side public override bool InSide(Cube.Positions side) { bool inSide = false; foreach (Cube.Positions pos in position) { if (pos.Equals(side)) { inSide = true; } } return(inSide); }
/// <summary> /// Contruct the Edge with given colours /// </summary> /// <param name="colours">The colours the piece will be</param> public Edge(Cube.Colours[] colours) { this.colour = new Cube.Colours[2]; position = new Cube.Positions[2]; pieceType = Cube.PieceTypes.edge; for (int i = 0; i < 2; i++) { colour[i] = colours[i]; switch (colour[i]) { case Cube.Colours.green: position[i] = Cube.Positions.top; break; case Cube.Colours.yellow: position[i] = Cube.Positions.front; break; case Cube.Colours.red: position[i] = Cube.Positions.right; break; case Cube.Colours.white: position[i] = Cube.Positions.back; break; case Cube.Colours.orange: position[i] = Cube.Positions.left; break; case Cube.Colours.blue: position[i] = Cube.Positions.bottom; break; } } }
/// <summary> /// Check /// </summary> /// <param name="side"></param> /// <returns>Whether in the side or not</returns> public abstract bool InSide(Cube.Positions side);
/// <summary> /// Rotates the side requested in a clockwise or anticlockwise direction (clockwise is relative /// to the front face) /// Goes through and changes the positions of the pieces within the selected side then updates /// the cube. /// </summary> /// <param name="side">The side to be rotated</param> /// <param name="clockWise">Rotate clockwise?</param> public void RotateAroundSide(Cube.Positions side, bool clockWise) { if (side.Equals(Cube.Positions.front)) { for (int i = 0; i < position.Length; i++) { if (clockWise) { if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.left; continue; } } else { if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.right; continue; } } } } else if (side.Equals(Cube.Positions.back)) { for (int i = 0; i < position.Length; i++) { if (!clockWise) { if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.left; continue; } } else { if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.right; continue; } } } } else if (side.Equals(Cube.Positions.right)) { for (int i = 0; i < position.Length; i++) { if (clockWise) { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.back; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.front; continue; } } else { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.front; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.back; continue; } } } } else if (side.Equals(Cube.Positions.left)) { for (int i = 0; i < position.Length; i++) { if (!clockWise) { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.back; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.front; continue; } } else { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.bottom; continue; } else if (position[i] == Cube.Positions.top) { position[i] = Cube.Positions.front; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.top; continue; } else if (position[i] == Cube.Positions.bottom) { position[i] = Cube.Positions.back; continue; } } } } else if (side.Equals(Cube.Positions.top)) { for (int i = 0; i < position.Length; i++) { if (clockWise) { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.front; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.back; continue; } } else { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.back; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.front; continue; } } } } else if (side.Equals(Cube.Positions.bottom)) { for (int i = 0; i < position.Length; i++) { if (!clockWise) { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.front; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.back; continue; } } else { if (position[i] == Cube.Positions.front) { position[i] = Cube.Positions.right; continue; } else if (position[i] == Cube.Positions.right) { position[i] = Cube.Positions.back; continue; } else if (position[i] == Cube.Positions.back) { position[i] = Cube.Positions.left; continue; } else if (position[i] == Cube.Positions.left) { position[i] = Cube.Positions.front; continue; } } } } }
/// <summary> /// Sets the position of the piece. Used for moving the piece, or for creating a cube that /// isn't already solved /// </summary> /// <param name="newPosition">The new position to set to</param> public void SetPosition(Cube.Positions newPosition) { position = newPosition; }