AIPlayer now abstract, with concrete subclasses