from otree.api import ( Page, WaitPage, models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) class Constants(BaseConstants): name_in_url = 'trust_simple' players_per_group= 20 num_rounds = 1 endowment = c(20) instructions_template = 'trust_simple/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): recieved1 = models.CurrencyField() recieved2 = models.CurrencyField() recieved3 = models.CurrencyField() recieved4 = models.CurrencyField() recieved5 = models.CurrencyField() recieved6 = models.CurrencyField() recieved7 = models.CurrencyField() recieved8 = models.CurrencyField() recieved9 = models.CurrencyField() recieved10 = models.CurrencyField() class Player(BasePlayer): Answer = models.IntegerField() Answer2 = models.IntegerField() Answer3 = models.IntegerField() Answer4 = models.IntegerField() offer_1 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_2 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_3 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_4 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_5 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_6 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_7 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_8 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_9 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) offer_10 = models.IntegerField(widget=widgets.RadioSelect, choices=[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) # FUNCTIONS def set_winner(group: Group): players = group.get_players() for p in players: set_payoff(p) def set_payoff(player: Player): group = player.group if player.id_in_group == 1: group.recieved1 = Constants.endowment - player.offer_1 player.payoff = player.offer_1 if player.id_in_group == 11: player.payoff = group.recieved1 if player.id_in_group == 2: group.recieved2 = Constants.endowment - player.offer_2 player.payoff = player.offer_2 if player.id_in_group == 12: player.payoff = group.recieved2 if player.id_in_group == 3: group.recieved3 = Constants.endowment - player.offer_3 player.payoff = player.offer_3 if player.id_in_group == 13: player.payoff = group.recieved3 if player.id_in_group == 4: group.recieved4 = Constants.endowment - player.offer_4 player.payoff = player.offer_4 if player.id_in_group == 14: player.payoff = group.recieved4 if player.id_in_group == 5: group.recieved5 = Constants.endowment - player.offer_5 player.payoff = player.offer_5 if player.id_in_group == 15: player.payoff = group.recieved5 if player.id_in_group == 6: group.recieved6 = Constants.endowment - player.offer_6 player.payoff = player.offer_6 if player.id_in_group == 16: player.payoff = group.recieved6 if player.id_in_group == 7: group.recieved7 = Constants.endowment - player.offer_7 player.payoff = player.offer_7 if player.id_in_group == 17: player.payoff = group.recieved7 if player.id_in_group == 8: group.recieved8 = Constants.endowment - player.offer_8 player.payoff = player.offer_8 if player.id_in_group == 18: player.payoff = group.recieved8 if player.id_in_group == 9: group.recieved9 = Constants.endowment - player.offer_9 player.payoff = player.offer_9 if player.id_in_group == 19: player.payoff = group.recieved9 if player.id_in_group == 10: group.recieved10 = Constants.endowment - player.offer_10 player.payoff = player.offer_10 if player.id_in_group == 20: player.payoff = group.recieved10 # PAGE class Welcome(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Rule(Page): form_model = 'player' form_fields = ['Answer'] class Wrong(Page): @staticmethod def is_displayed(player: Player): return player.Answer != 8 form_model = 'player' form_fields = ['Answer2'] class Wrong2 (Page): timeout_seconds = 20 @staticmethod def is_displayed(player: Player): if player.Answer != 8: return player.Answer2 != 5 class Correct (Page): pass class Rule_A (Page): @staticmethod def is_displayed(player: Player): return player.id_in_group < 11 form_model = 'player' form_fields = ['Answer3'] class Rule_A2(Page): @staticmethod def is_displayed(player: Player): if player.id_in_group < 11: return player.Answer3 != 15 form_model = 'player' form_fields = ['Answer4'] class Rule_A3(Page): timeout_seconds = 20 @staticmethod def is_displayed(player: Player): if player.id_in_group < 11: if player.Answer3 != 15: return player.Answer4 != 7 class Rule_B (Page): timeout_seconds = 10 @staticmethod def is_displayed(player: Player): return player.id_in_group > 10 class Send(Page): form_model = 'player' form_fields = ['offer_1', 'offer_2', 'offer_3', 'offer_4', 'offer_5','offer_6','offer_7','offer_8','offer_9','offer_10'] @staticmethod def is_displayed(player: Player): return player.id_in_group < 11 class WaitForP1(WaitPage): after_all_players_arrive = 'set_winner' class Results(Page): pass page_sequence = [Welcome, Rule, Wrong, Wrong2, Correct, Rule_A,Rule_A2,Rule_A3, Rule_B, Send, WaitForP1, Results]