from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'TG' players_per_group = 2 num_rounds = 5 endowment = c(30) multiplication_factor = 3 class Subsession(BaseSubsession): """ Randomly match two players together while each individual's role is fixed.""" def before_session_starts(self): self.group_randomly(fixed_id_in_group=True) class Player(BasePlayer): """ Want player 2 to be a player from another game...""" def role(self): return {1: 'Sender', 2: 'Receiver'}[self.id_in_group] class Group(BaseGroup): """ Choices for Sender""" sent_amount = models.CurrencyField( choices=currency_range(0, Constants.endowment, c(1)), # widget=widgets.SliderInput(attrs={'step': '1'}), doc="""Amount sent by Sender""", ) """ Choices for Receiver""" sent_back_amount = models.CurrencyField( doc="""Amount returned by Receiver""", min=c(0), widget=widgets.SliderInput(attrs={'step': c(1)}) ) """ Payoff for each player per round""" def set_payoffs(self): p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff = Constants.endowment - self.sent_amount + self.sent_back_amount p2.payoff = self.sent_amount * Constants.multiplication_factor - self.sent_back_amount