from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'my_trust' players_per_group = 2 num_rounds = 5 endowment = c(10) multiplication_factor = 3 class Subsession(BaseSubsession): dice = models.IntegerField() def creating_session(self): if self.round_number == 1: self.group_randomly() class Group(BaseGroup): final_round = models.IntegerField() sent_back_amount = models.CurrencyField() sent_back_amount2 = models.CurrencyField() sent_amount = models.CurrencyField( choices=currency_range(0, Constants.endowment, c(1)), widget=widgets.RadioSelect ) sent_amount2 = models.CurrencyField( choices=currency_range(0, Constants.endowment, c(1)), widget=widgets.RadioSelect ) def set_payoffs(self): p1 = self.set_player_by_id(1) p2 = self.set_player_by_id(2) for player in [p1, p2]: paying_round = random.randint(1, self.final_round) if self.subsession.round_number == paying_round: p1.payoff = ((Constants.endowment - self.sent_amount + self.sent_back_amount) + (self.sent_amount2 * Constants.multiplier - self.sent_back_amount2)) p2.payoff = ((Constants.endowment - self.sent_amount2 + self.sent_back_amount2) + (self.sent_amount * Constants.multiplier - self.sent_back_amount)) class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'sender' if self.id_in_group == 2: return 'receiver'