from otree.api import * c = cu doc = """ A game first proposed by Berg, Dickhaut, and McCabe (1995). """ class Constants(BaseConstants): name_in_url = 'TrustGame' players_per_group = 2 num_rounds = 4 multiplier = 3 endowment = cu(100) class Subsession(BaseSubsession): pass def endowment_return_max(group): return group.endowment_sent * Constants.multiplier def payoff(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.payoff = Constants.endowment - group.endowment_sent + group.endowment_return p2.payoff = group.endowment_sent * Constants.multiplier - group.endowment_return class Group(BaseGroup): endowment_sent = models.CurrencyField(label='Please enter an amount from 0 to 100:', max=100, min=0) endowment_return = models.CurrencyField(initial=0, label='How many points would you like to return to Participant A?', min=0) class Player(BasePlayer): pass class Instructions(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number == 1 class Player1_Send(Page): form_model = 'group' form_fields = ['endowment_sent'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 1 class Player2_Wait(WaitPage): @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 2 class Player2_Return(Page): form_model = 'group' form_fields = ['endowment_return'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 2 @staticmethod def vars_for_template(player): group = player.group return dict(multiplied_amount=group.endowment_sent * Constants.multiplier) class Player1_Wait(WaitPage): after_all_players_arrive = payoff @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 1 class Results_Round_1(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number == 1 @staticmethod def vars_for_template(player): group = player.group return dict( multiplied_amount=group.endowment_sent * Constants.multiplier, p1=group.get_player_by_id(1), p2=group.get_player_by_id(2)) class Results_Other_Rounds(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number != 1 @staticmethod def vars_for_template(player): group = player.group other_players = player.get_others_in_group() opponent = other_players[0] opponent_prev_round = opponent.in_round(player.round_number - 1) return dict( multiplied_amount=group.endowment_sent * Constants.multiplier, prev_round=player.in_round(player.round_number - 1), opponent_prev_round=opponent_prev_round.payoff, p1=group.get_player_by_id(1), p2=group.get_player_by_id(2)) class End(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number == Constants.num_rounds page_sequence = [Instructions, Player1_Send, Player2_Wait, Player2_Return, Player1_Wait, Results_Round_1, Results_Other_Rounds, End]