created player abstraction