Example #1
0
        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));
            }
        }