from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'wiggle_room' players_per_group = 2 num_rounds = 1 payoffs_sender = [c(6), c(5)] payoffs_receiver = [c(1), c(5)] examples = [c(1), c(2), c(3), c(4)] class Subsession(BaseSubsession): def creating_session(self): import itertools treatments = itertools.cycle([True, False]) for g in self.get_groups(): g.version = random.choice([True, False]) g.treatment = next(treatments) class Group(BaseGroup): version = models.BooleanField() #if True, the flipped version applies treatment = models.BooleanField() #if True,it is the wiggle room treatment def set_payoffs(self): if self.version and self.treatment: if self.get_player_by_id(1).choice: self.get_player_by_id(1).payoff = Constants.payoffs_sender[0] self.get_player_by_id(2).payoff = Constants.payoffs_receiver[1] else: self.get_player_by_id(1).payoff = Constants.payoffs_sender[1] self.get_player_by_id(2).payoff = Constants.payoffs_receiver[0] else: if self.get_player_by_id(1).choice: self.get_player_by_id(1).payoff = Constants.payoffs_sender[0] self.get_player_by_id(2).payoff = Constants.payoffs_receiver[0] else: self.get_player_by_id(1).payoff = Constants.payoffs_sender[1] self.get_player_by_id(2).payoff = Constants.payoffs_receiver[1] class Player(BasePlayer): choice = models.BooleanField(choices=[[True, "A"], [False, "B"]], label="Please make your choice", widget=widgets.RadioSelect) reveal = models.BooleanField(choices=[[True, "Yes"], [False, "No"]], label="Do you want to see the full payoff table?", widget=widgets.RadioSelect, initial=False) test1 = models.CurrencyField(label="If the Sender chooses A in the example, what is the Sender's payoff?") test2 = models.CurrencyField(label="If the Sender chooses B in the example, what is the Receiver's payoff?") def role(self): if self.id_in_group == 1: self.role = "Sender" else: self.role = "Receiver" return self.role