from otree.api import * c = cu doc = '\nThis is a 1 staged "Ultimatum Game". One of two players is aked to split 100. The second player can accept or not. If not, nobody gets anything.' class C(BaseConstants): NAME_IN_URL = 'Ultimatum_1' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 ENDOWMENT = cu(100) class Subsession(BaseSubsession): pass class Group(BaseGroup): kept_1 = models.CurrencyField(initial=0, label='Bitte tragen Sie die Punkte ein die Sie für sich behalten möchten.', max=C.ENDOWMENT, min=0) accept_1 = models.BooleanField(choices=[[True, 'Ja'], [False, 'Nein']], label='Akzeptieren Sie das Angebot von Teilnehmer 2?') def set_payoffs1(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) if group.accept_1 == True: p1.payoff = (C.ENDOWMENT - group.kept_1) p2.payoff = group.kept_1 else: p1.payoff = 0 p2.payoff = 0 class Player(BasePlayer): pass class Fragen(Page): form_model = 'player' class Intro(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return False class Angebot(Page): form_model = 'group' form_fields = ['kept_1'] @staticmethod def is_displayed(player: Player): group = player.group return player.id_in_group == 2 class Warten1(WaitPage): @staticmethod def is_displayed(player: Player): group = player.group return player.id_in_group == 1 return True class Entscheidung(Page): form_model = 'group' form_fields = ['accept_1'] @staticmethod def is_displayed(player: Player): group = player.group return player.id_in_group == 1 @staticmethod def vars_for_template(player: Player): group = player.group return dict(offer = C.ENDOWMENT - group.kept_1) class Warteseite_1(WaitPage): after_all_players_arrive = set_payoffs1 class Ergebnisse(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): group = player.group return group.accept_1 == True @staticmethod def vars_for_template(player: Player): group = player.group return dict(offer=C.ENDOWMENT - group.kept_1) class Results3(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): group = player.group return group.accept_1 == False class Ende(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS return True page_sequence = [Fragen, Intro, Angebot, Warten1, Entscheidung, Warteseite_1, Ergebnisse, Results3, Ende]