public static List <BoardPosition> GetAvaiableMoves(BoardPosition bp, ChessBoard aBoard) { if (!aBoard.GetBoard()[bp.X, bp.Y].HasPiece()) { return(null); } Piece p = aBoard.GetBoard()[bp.X, bp.Y].GetPiece(); switch (p.GetPieceType()) { case (Piece.PieceType.PAWN): return(GetPawnMoves(bp, aBoard)); case (Piece.PieceType.ROOK): return(GetRookMoves(bp, aBoard)); case (Piece.PieceType.KNIGHT): return(GetKnightMoves(bp, aBoard)); case (Piece.PieceType.BISHOP): return(GetBishopMoves(bp, aBoard)); case (Piece.PieceType.QUEEN): return(GetQueenMoves(bp, aBoard)); case (Piece.PieceType.KING): return(GetKingMoves(bp, aBoard)); default: return(null); } }