from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) ## player 1 is predator, player 2 is prey author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'my_PPG_v1' players_per_group = 2 num_rounds = 3 endowment = c(10) class Subsession(BaseSubsession): def before_session_starts(self): if self.round_number == 1: for player in self.get_players(): if player.id_in_group % 2 == 0: # if it's an even numbered player, so a prey player.role = 'Prey' else: player.role = 'Predator' self.group_randomly(fixed_id_in_group=True) class Group(BaseGroup): predator_invest = models.CurrencyField() prey_invest = models.CurrencyField() def set_payoffs(self): p1 = self.get_player_by_role('Predator') p2 = self.get_player_by_role('Prey') self.predator_invest = p1.player_invest self.prey_invest = p2.player_invest if self.predator_invest > self.prey_invest: p1.payoff = (Constants.endowment - self.predator_invest) + (Constants.endowment - self.prey_invest) p2.payoff = 0 elif self.predator_invest <= self.prey_invest: p1.payoff = (Constants.endowment - self.predator_invest) p2.payoff = (Constants.endowment - self.prey_invest) # return(self.predator_invest, self.prey_invest) class Player(BasePlayer): def role(self): if self.id_in_group % 2 == 0: # if it's an even numbered player, so a prey return 'Prey' else: return 'Predator' player_invest = models.CurrencyField( choices=currency_range(0, Constants.endowment, c(1)), widget=widgets.RadioSelect() ) test_question_1 = models.BooleanField( choices=('TRUE', 'FALSE'), widget=widgets.RadioSelect() ) test_question_2 = models.BooleanField( choices=('TRUE', 'FALSE'), widget=widgets.RadioSelect() ) test_question_3 = models.BooleanField( choices=('TRUE', 'FALSE'), widget=widgets.RadioSelect() ) test_question_4 = models.BooleanField( choices=('TRUE', 'FALSE'), widget=widgets.RadioSelect() )