from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'Salim Nuhu' doc = """ This is the CoP Experiment """ import random class Constants(BaseConstants): name_in_url = 'COP_Study_3' players_per_group = 2 num_rounds = 8 endowment = c(100) multiplication_factor = 3 shocks = [0, 3] #random_return = random.choice(shocks) complist = [0.1, 0.3, 0.5] fine = c(75) other_fine =c(45) #instructions_template = 'COP_Experiment/instructions.html' class Subsession(BaseSubsession): def creating_session(self): #self.group_randomly(fixed_id_in_group=True) computer_selects = random.choice(Constants.complist) self.session.vars['computer_selects'] = computer_selects if self.round_number == 3 or self.round_number == 5: random_return = random.choice(Constants.shocks) self.session.vars['random_return'] = random_return # self.group_randomly(fixed_id_in_group=True) if self.round_number >= 4: # reverse the roles for group in self.get_groups(): players = group.get_players() players.reverse() group.set_players(players) if self.round_number == 1: paying_round3 = random.randint(1, Constants.num_rounds) self.session.vars['paying_round'] = paying_round3 class Group(BaseGroup): sent_amount = models.CurrencyField( min=0, max=Constants.endowment, label=''' I would like to send P2 (the computer) ''', ) #tripled = models.CurrencyField(c(3) * c(sent_amount) #) sent_back_amount = models.CurrencyField( min=c(0), max= Constants.endowment*Constants.multiplication_factor, label=''' I would like to send P1 ''', ) amount_demanded = models.CurrencyField( min=0, max=300, label=''' And I would like to request back from P2 (the computer) ''', ) def round_payoffs(self): for player in self.get_players(): if self.subsession.round_number == self.session.vars['paying_round3']: player.payoff = player.round_gains else: player.payoff = 0 class Player(BasePlayer): def role(self): if self.id_in_group == 1: return 'Sender' if self.id_in_group == 2: return 'Computer'