import random from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, Page, WaitPage ) doc = '' class Constants(BaseConstants): name_in_url = 'my_CPR' players_per_group = 4 num_rounds = 2 group_endowment = c(40) multiplier = 2 class Subsession(BaseSubsession): pass class Group(BaseGroup): total_extraction = models.CurrencyField() individual_share = models.CurrencyField() # set_payoffs = set_payoffs # set_earnings = set_earnings def set_payoffs(self): players = self.get_players() extractions = [p.extraction for p in players] print('extractions:', extractions) self.total_extraction = sum(extractions) self.individual_share = ( Constants.multiplier * (Constants.group_endowment-self.total_extraction) / Constants.players_per_group) for p in players: p.payoff = p.extraction + self.individual_share print('payoffs:', p.payoff) if p.round_number == Constants.num_rounds: selected_round = random.randint(1, Constants.num_rounds) print('selected_round:', selected_round) selected_round_payoff = p.in_round(selected_round).payoff # p.participant.vars['earning_2'] = dict(payoff=selected_round_payoff) p.participant.vars['earning_2'] = selected_round_payoff class Player(BasePlayer): extraction = models.CurrencyField(label='How much do you want to extract?', max=10, min=0) # participant.payoff = selected_round_payoff