public void UpdateBoardState() { BlackCapturableLocations = new List <Tuple <int, int> >(); BlackMoveLocations = new List <Tuple <int, int> >(); WhiteCapturableLocations = new List <Tuple <int, int> >(); WhiteMoveLocations = new List <Tuple <int, int> >(); BlackPiecesOnBoard = new List <ChessPiece>(); WhitePiecesOnBoard = new List <ChessPiece>(); for (var i = 0; i < Board.GetLength(0); i++) { for (var j = 0; j < Board.GetLength(1); j++) { var piece = GetPiece(i, j); if (piece != null) { var row = piece.Row; var col = piece.Column; piece.Accept(this); switch (PieceType) { case "Pawn": piece.MoveStrategy = new PawnAdapterStrategy(piece.MoveCount, (piece as Pawn).Direction, this); break; case "Rook": piece.MoveStrategy = new RookMoveStrategy(this); break; case "Knight": piece.MoveStrategy = new KnightMoveStrategy(this); break; case "Bishop": piece.MoveStrategy = new DiagonalMoveStrategy(this); break; case "Queen": piece.MoveStrategy = new QueenMoveStrategy(this); break; case "King": piece.MoveStrategy = new KingMoveStrategy(this); if (piece.PieceColor == PieceColor.White) { WhiteKing = piece as King; } else { BlackKing = piece as King; } break; default: break; } AddLocations(piece, row, col); } } } if (WhiteKing != null) { WhiteKing.IsInCheck = BlackCapturableLocations.Contains(new Tuple <int, int>(WhiteKing.Row, WhiteKing.Column)); } if (BlackKing != null) { BlackKing.IsInCheck = WhiteCapturableLocations.Contains(new Tuple <int, int>(BlackKing.Row, BlackKing.Column)); } }
public void Visit(King king) { PieceType = "King"; }