from otree.api import * import random doc = """ RoT Practice """ class Constants(BaseConstants): name_in_url = 'rotprac' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): red_message = models.StringField() blue_decision = models.StringField() value = models.IntegerField(initial=int(random.random()*1000)) accurate = models.BooleanField() class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'red' if self.id_in_group == 2: return 'blue' message = models.StringField( widget=widgets.RadioSelect, choices= ['The number is Odd','The number is Even'] ) response = models.StringField( widget=widgets.RadioSelectHorizontal, choices= ['Believe','Insure','Risk-Avert'] ) # PAGES class sender(Page): form_model = 'player' form_fields = ['message'] def is_displayed(player): return player.role() == 'red' class receiver(Page): form_model = 'player' form_fields = ['response'] def is_displayed(player): return player.role() == 'blue' class receiverWaitPage(WaitPage): def after_all_players_arrive(self): group = self.group players = group.get_players() for p in players: if p.role() == 'red': group.red_message = p.message if p.role() == 'blue': pass class senderWaitPage(WaitPage): pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): group = self.group players = group.get_players() for p in players: if p.role() == "red": if group.value % 2 == 1 and p.message == "The number is Odd": group.accurate = True elif group.value % 2 == 0 and p.message == "The number is Even": group.accurate = True else: group.accurate = False if p.role() == "blue": if p.response == "Believe": group.blue_decision = "Believe" elif p.response == "Insure": group.blue_decision = "Insure" print(group.blue_decision) else: group.blue_decision = "Risk-Avert" print(group.blue_decision) for p in players: if p.role() == "red": if group.accurate == True and group.blue_decision == 'Believe': p.payoff += 9 elif group.accurate == True and group.blue_decision == 'Insure': p.payoff += 6 elif group.accurate == True and group.blue_decision == 'Risk-Avert': p.payoff += 3 elif group.accurate == False and group.blue_decision == 'Believe': p.payoff += 12 elif group.accurate == False and group.blue_decision == 'Insure': p.payoff += 6 else: p.payoff += 0 if p.role() == "blue": if group.accurate == True and group.blue_decision == 'Believe': p.payoff += 12 elif group.accurate == True and group.blue_decision == 'Insure': p.payoff += 9 elif group.accurate == True and group.blue_decision == 'Risk-Avert': p.payoff += 6 elif group.accurate == False and group.blue_decision == 'Believe': p.payoff += 0 elif group.accurate == False and group.blue_decision == 'Insure': p.payoff += 3 else: p.payoff += 6 class results(Page): pass page_sequence = [sender, receiverWaitPage, receiver, senderWaitPage, ResultsWaitPage, results]