from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'distribution_game' PLAYERS_PER_GROUP = 4 NUM_ROUNDS = 1 INSTRUCTIONS_TEMPLATE = 'distribution_game/instructions.html' class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): session = subsession.session subsession.group_randomly() class Group(BaseGroup): pass def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p3 = group.get_player_by_id(3) p4 = group.get_player_by_id(4) import random value = random.randint(0, 3) for p in group.get_players(): if value == 0: p1.dictator = 1 if value == 1: p2.dictator = 1 if value == 2: p3.dictator = 1 if value == 3: p4.dictator = 1 if p1.dictator == 1: if p1.decisione == "Scelta A": p1.payoff = 30 p2.payoff = 51 p3.payoff = 9 p4.payoff = 6 p2.dictator_choice = p1.decisione p3.dictator_choice = p1.decisione p4.dictator_choice = p1.decisione p1.dictator_choice = p1.decisione elif p1.decisione == "Scelta B": p1.payoff = 27 p2.payoff = 45 p3.payoff = 15 p4.payoff = 9 p2.dictator_choice = p1.decisione p3.dictator_choice = p1.decisione p4.dictator_choice = p1.decisione p1.dictator_choice = p1.decisione else: p1.payoff = 24 p2.payoff = 42 p3.payoff = 18 p4.payoff = 12 p2.dictator_choice = p1.decisione p3.dictator_choice = p1.decisione p4.dictator_choice = p1.decisione p1.dictator_choice = p1.decisione elif p2.dictator == 1: if p2.decisione == "Scelta A": p2.payoff = 30 p1.payoff = 51 p3.payoff = 9 p4.payoff = 6 p1.dictator_choice = p2.decisione p3.dictator_choice = p2.decisione p4.dictator_choice = p2.decisione p2.dictator_choice = p2.decisione elif p2.decisione == "Scelta B": p2.payoff = 27 p1.payoff = 45 p3.payoff = 15 p4.payoff = 9 p1.dictator_choice = p2.decisione p3.dictator_choice = p2.decisione p4.dictator_choice = p2.decisione p2.dictator_choice = p2.decisione else: p2.payoff = 24 p1.payoff = 42 p3.payoff = 18 p4.payoff = 12 p1.dictator_choice = p2.decisione p3.dictator_choice = p2.decisione p4.dictator_choice = p2.decisione p2.dictator_choice = p2.decisione elif p3.dictator == 1: if p3.decisione == "Scelta A": p3.payoff = 30 p1.payoff = 51 p2.payoff = 9 p4.payoff = 6 p2.dictator_choice = p3.decisione p1.dictator_choice = p3.decisione p4.dictator_choice = p3.decisione p3.dictator_choice = p3.decisione elif p3.decisione == "Scelta B": p3.payoff = 27 p1.payoff = 45 p2.payoff = 15 p4.payoff = 9 p2.dictator_choice = p3.decisione p1.dictator_choice = p3.decisione p4.dictator_choice = p3.decisione p3.dictator_choice = p3.decisione else: p3.payoff = 24 p1.payoff = 42 p2.payoff = 18 p4.payoff = 12 p2.dictator_choice = p3.decisione p1.dictator_choice = p3.decisione p4.dictator_choice = p3.decisione p3.dictator_choice = p3.decisione else: if p4.decisione == "Scelta A": p4.payoff = 30 p1.payoff = 51 p2.payoff = 9 p3.payoff = 6 p2.dictator_choice = p4.decisione p1.dictator_choice = p4.decisione p3.dictator_choice = p4.decisione p4.dictator_choice = p4.decisione elif p4.decisione == "Scelta B": p4.payoff = 27 p1.payoff = 45 p2.payoff = 15 p3.payoff = 9 p2.dictator_choice = p4.decisione p1.dictator_choice = p4.decisione p3.dictator_choice = p4.decisione p4.dictator_choice = p4.decisione else: p4.payoff = 24 p1.payoff = 42 p2.payoff = 18 p3.payoff = 12 p2.dictator_choice = p4.decisione p1.dictator_choice = p4.decisione p3.dictator_choice = p4.decisione p4.dictator_choice = p4.decisione class Player(BasePlayer): controlq1 = models.IntegerField(choices=[[15, '15 punti'], [27, '27 punti']], label='Immagina di aver scelto B. Se tu vieni selezionato dal computer per decidere i compensi di tutti, tu guadagni:', widget=widgets.RadioSelect) controlq2 = models.IntegerField(choices=[[1, '42 oppure 18 oppure 12 punti, a seconda del colore che il computer estrae a caso e ti assegna'], [2, '45 oppure 15 oppure 9 punti, a seconda del colore che il computer estrae a caso e ti assegna']], label='Immagina di aver scelto A. Un altro componente del tuo gruppo viene estratto per decidere i compensi di tutti e questa persona ha scelto C. In questo caso tu guadagni:', widget=widgets.RadioSelect) decision = models.IntegerField(choices=[[1, 'Scelta A'], [2, 'Scelta B'], [3, 'Scelta C']], label='Ora puoi effettuare la tua scelta:') dictator = models.IntegerField(choices=[[0, '0'], [1, '1']], initial=0) decisione = models.StringField(choices=[['Scelta A', 'Scelta A'], ['Scelta B', 'Scelta B'], ['Scelta C', 'Scelta C']], label='Ora puoi effettuare la tua scelta:', widget=widgets.RadioSelect) dictator_choice = models.StringField() revenue = models.IntegerField(choices=[]) def setglobals(player: Player): participant = player.participant participant.vars['DG_payoff'] = participant.payoff return(participant.vars) class MyWaitPage(WaitPage): wait_for_all_groups = True class Intro(Page): form_model = 'player' class Introduction(Page): form_model = 'player' class Domanda_comprensione(Page): form_model = 'player' form_fields = ['controlq1', 'controlq2'] @staticmethod def error_message(player: Player, values): print ('values is', values) if values['controlq1'] !=27 or values['controlq2']!= 1: return 'Attenzione: Per procedere รจ necessario rispondere correttamente a tutte le domande. Per favore controlla le tue risposte.' class Start(Page): form_model = 'player' class Offer(Page): form_model = 'player' form_fields = ['decisione'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): setglobals(player) page_sequence = [MyWaitPage, Intro, Introduction, Domanda_comprensione, Start, Offer, ResultsWaitPage, Results]