public bool IsFriendlyPawnValidForEnpassant(BoardMove move,
                                                    IReadOnlyBoardState <ChessPieceEntity> roBoardState,
                                                    out ChessPieceEntity pawn)
        {
            pawn = null;
            var pawnItem = roBoardState.GetItem(move.From);

            if (pawnItem == null)
            {
                return(false);
            }
            pawn = pawnItem.Item;

            return(pawnItem.Item.Is(ChessPieceName.Pawn));
        }
        public bool IsKingAllowedToCastle(BoardMove move,
                                          IReadOnlyBoardState <ChessPieceEntity> roBoardState,
                                          out ChessPieceEntity king)
        {
            var kingItem = roBoardState.GetItem(move.From);

            king = null;
            if (kingItem == null)
            {
                return(false);
            }
            king = kingItem.Item;

            return(king.Piece.Equals(ChessPieceName.King) &&
                   kingItem.Location.Equals(Pieces.King
                                            .StartPositionFor(king.Player)) &&
                   king.LocationHistory.Count() == 1);
        }