// Return false if move is illegal public bool MakeMove(int oldPos, int destPos) { PieceType pieceType = S[oldPos].PieceType; // Handle queening and castle prevention if (WhosMove == Colour.Black) { if (pieceType == PieceType.Pawn) { if (Rank(destPos) == 0) S[oldPos] = new Piece(Colour.Black, PieceType.Queen); if (destPos == oldPos - 16) // set en-passant square EpSquare = destPos + 8; } else if (pieceType == PieceType.King) { BlackCanQCastle = false; BlackCanKCastle = false; if (destPos == oldPos + 2) //Q-side castle move rook { S[63] = null; S[60] = new Piece(Colour.Black, PieceType.Rook); } if (destPos == oldPos - 2) //K-side castle move rook { S[56] = null; S[58] = new Piece(Colour.Black, PieceType.Rook); } } else if (pieceType == PieceType.Rook && oldPos == 56) BlackCanKCastle = false; else if (pieceType == PieceType.Rook && oldPos == 63) BlackCanQCastle = false; } if (WhosMove == Colour.White) { if (pieceType == PieceType.Pawn) { if (Rank(destPos) == 7) S[oldPos] = new Piece(Colour.White, PieceType.Queen); if (destPos == oldPos + 16) // set en-passant square EpSquare = destPos - 8; } if (pieceType == PieceType.King) { WhiteCanQCastle = false; WhiteCanKCastle = false; if (destPos == oldPos + 2) //Q-side castle move rook { S[7] = null; S[4] = new Piece(Colour.White, PieceType.Rook); } if (destPos == oldPos - 2) //K-side castle move rook { S[0] = null; S[2] = new Piece(Colour.White, PieceType.Rook); } } if (pieceType == PieceType.Rook && oldPos == 0) WhiteCanKCastle = false; if (pieceType == PieceType.Rook && oldPos == 7) WhiteCanQCastle = false; } if (destPos == m_OldBoard.EpSquare && pieceType == PieceType.Pawn) { if (WhosMove == Colour.White) S[m_OldBoard.EpSquare - 8] = null; if (WhosMove == Colour.Black) S[m_OldBoard.EpSquare + 8] = null; } S[destPos] = new Piece(S[oldPos]); S[oldPos] = null; if (KingIsInCheck) return false; this.WhosMove = m_OldBoard.WhosMove == Colour.White ? Colour.Black : Colour.White; return true; }
public Board(Board currentBoard) { this.BlackCanQCastle = currentBoard.BlackCanQCastle; this.BlackCanKCastle = currentBoard.BlackCanKCastle; this.WhiteCanQCastle = currentBoard.WhiteCanQCastle; this.WhiteCanKCastle = currentBoard.WhiteCanKCastle; this.WhosMove = currentBoard.WhosMove; for (int i = 0; i < 64; i++) { if (currentBoard.S[i] != null) S[i] = new Piece(currentBoard.S[i]); } m_OldBoard = currentBoard; }
public Piece(Piece piece) : this(piece.Colour, piece.PieceType) { }