from otree.api import * import random c = Currency doc = """ Rot Prac vs Comp """ class Constants(BaseConstants): name_in_url = 'rotprac1' players_per_group = 1 num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): message = random.randint(0,1) group = self.get_groups() for g in group: if message == 0: g.red_message = "The number is Even" else: g.red_message = "The number is Odd" for g in groups: if self.round_number = 1: g.accurate = False else: g.accurate = True class Group(BaseGroup): red_message = models.StringField() blue_decision = models.StringField() accurate = models.BooleanField() class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'blue' response = models.StringField( widget=widgets.RadioSelectHorizontal, choices= ['Believe','Insure','Risk-Avert'] ) info = models.StringField( initial='The message sent by the Red Player is inaccurate' ) reveal = models.StringField( widget=widgets.RadioSelect, choices= ['at least one Red Player (cost $2)', 'partner Red Player (cost $6)','request deferred'] ) #Pages class information(Page): def is_displayed(self): return self.round_number = 1: class compmessage(Page): pass class defense(Page): pass class survey(Page): pass class choice_reveal(Page): def after_all_players_arrive(self): class receiver(Page): form_model = 'player' form_fields = ['response'] def is_displayed(player): return player.role() == 'blue' class receiverWaitPage(WaitPage): #Timer - say 10 seconds pass class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): group = self.group players = group.get_players() if p.role() == "blue": if p.response == "Believe": group.blue_decision = "Believe" elif p.response == "Insure": group.blue_decision = "Insure" else: group.blue_decision = "Risk-Avert" 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 = [receiverWaitPage, compmessage, infoWaitPage, information, defenseWaitPage, defense, survey, receiver, ResultsWaitPage, results]