from otree.api import * c = cu doc = '\nThis is a standard 2-player trust game where the amount sent by player 1 gets\ntripled. The trust game was first proposed by\n\n Berg, Dickhaut, and McCabe (1995)\n.\n' class C(BaseConstants): NAME_IN_URL = 'trust' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 ENDOWMENT = cu(100) MULTIPLIER = 3 ENDOWMENT2 = 100 INSTRUCTIONS_TEMPLATE = 'trust/instructions.html' class Subsession(BaseSubsession): chat = models.IntegerField(initial=0) Same_group = models.BooleanField(initial=False) def creating_session(subsession: Subsession): subsession.Same_group = subsession.session.config['Same_group'] session = subsession.session if subsession.Same_group==0: subsession.group_randomly() class Group(BaseGroup): treatment = models.IntegerField() Private = models.BooleanField() def set_payoffs(group: Group): for player in group.get_players(): player.sent_back_other= player.get_others_in_group()[0].sent_back_amount p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.payoff = C.ENDOWMENT - p1.sent + p1.sent_back_other p2.payoff = p2.sent_other * C.MULTIPLIER - p2.sent_back_amount def sent_amount_calc(group: Group): for player in group.get_players(): player.sent_other= player.get_others_in_group()[0].sent class Player(BasePlayer): sent = models.IntegerField(label='', max=C.ENDOWMENT2, min=0) sent_back_amount = models.IntegerField(min=0,label='') sent_other = models.IntegerField(label='') sent_back_other = models.IntegerField(label='') guess = models.IntegerField(min=0,label='') def sent_back_amount_max(player: Player): return player.sent_other * C.MULTIPLIER def guess_max(player: Player): return player.sent * C.MULTIPLIER class Introduction(Page): form_model = 'player' class Send(Page): form_model = 'player' form_fields = ['sent'] class Guess(Page): form_model = 'player' form_fields = ['guess'] class SendBackWaitPage(WaitPage): after_all_players_arrive = sent_amount_calc class SendBack(Page): form_model = 'player' form_fields = ['sent_back_amount'] @staticmethod def is_displayed(player: Player): tripled_amount = player.sent_other * C.MULTIPLIER return dict(tripled_amount=tripled_amount) @staticmethod def vars_for_template(player: Player): tripled_amount = player.sent_other * C.MULTIPLIER return dict(tripled_amount=tripled_amount) class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): return dict(tripled_amount=player.sent_other * C.MULTIPLIER) page_sequence = [Introduction, Send, Guess, SendBackWaitPage, SendBack, ResultsWaitPage, Results]