// constructors public Board(Player a, Player b) { Console.ForegroundColor = ConsoleColor.White; Turns = 0; fiftyMoveRule = 0; threeholdRepetition = false; history = new Stack <Move>(); deletedPieces = new Stack <Piece>(); whitePlayer = a.color == Color.White ? a : b; blackPlayer = a.color != Color.White ? a : b; BoardTab = new Piece[8, 8]; BoardTab[0, 0] = new Rook(Color.White); BoardTab[7, 0] = new Rook(Color.White); BoardTab[0, 7] = new Rook(Color.Black); BoardTab[7, 7] = new Rook(Color.Black); BoardTab[2, 0] = new Bishop(Color.White); BoardTab[5, 0] = new Bishop(Color.White); BoardTab[2, 7] = new Bishop(Color.Black); BoardTab[5, 7] = new Bishop(Color.Black); BoardTab[1, 0] = new Knight(Color.White); BoardTab[6, 0] = new Knight(Color.White); BoardTab[1, 7] = new Knight(Color.Black); BoardTab[6, 7] = new Knight(Color.Black); BoardTab[3, 0] = new Queen(Color.White); BoardTab[3, 7] = new Queen(Color.Black); BoardTab[4, 0] = new King(Color.White); BoardTab[4, 7] = new King(Color.Black); for (int i = 0; i < 8; i++) { BoardTab[i, 1] = new Pawn(Color.White); BoardTab[i, 6] = new Pawn(Color.Black); } }
/// <summary> /// Add a piece to the board /// </summary> /// <param name="pieceIndex">The square to add the piece to</param> /// <param name="pieceName">The name of the piece type</param> /// <param name="owner">What colour it should be, null for promotion</param> public void SpecialAdd(int pieceIndex, string pieceName, string owner) { Piece piece = new Pawn(0, 0, Color.White); var x = (pieceIndex % 8) + 1; var y = (pieceIndex / 8) + 1; var ownerColour = Color.Black; if (owner.Equals("NULL")) { ownerColour = (y == 1 ? Board.WhiteColour : Board.BlackColour); } else if (owner.Equals("WHITE")) { ownerColour = Board.BlackColour; } else if (owner.Equals("BLACK")) { ownerColour = Board.WhiteColour; } switch (pieceName) { case "Pawn": piece = new Pawn(x, y, ownerColour); break; case "Rook": piece = new Rook(x, y, ownerColour); break; case "Bishop": piece = new Bishop(x, y, ownerColour); break; case "Knight": piece = new Knight(x, y, ownerColour); break; case "Queen": piece = new Queen(x, y, ownerColour); break; // Shouldn't be needed case "King": piece = new King(x, y, ownerColour); break; } // Remove any old piece Board.Pieces.Remove(Board.GetPiece(x, y)); // Add the new piece Board.Pieces.Add(piece); foreach (var pieces in Board.Pieces) { pieces.GetMoves(Board, true); } }
public override IEnumerable <Loc> TilesCovered(Board currentBoard, byte row, byte col) => Rook._TilesCovered(currentBoard, row, col).Union(Bishop._TilesCovered(currentBoard, row, col));