+ refactor Player with generics