changed Player to abstract