end_turn should be virtual