from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ This is a standard 2-player trust game where the amount sent by player 1 gets tripled. The trust game was first proposed by Berg, Dickhaut, and McCabe (1995) . """ class Constants(BaseConstants): name_in_url = 'myTG' players_per_group = 2 num_rounds = 1 # fixedfee = 0 instructions_template = 'myTG/Instructions.html' # Initial amount allocated to each player endowment = 10 multiplier = 3 class Subsession(BaseSubsession): pass game2_payoff = models.CurrencyField() paying_round = models.IntegerField() def creating_session(self): if self.round_number == 1: paying_round = random.randint(1, Constants.num_rounds) self.session.vars['paying_round'] = paying_round # print('set the paying round to', paying_round) class Group(BaseGroup): sent_amount = models.CurrencyField( min=0, max=Constants.endowment, doc="""Amount sent by player A""", ) sent_back_amount = models.CurrencyField( doc="""Amount sent back by player B""", min=0, ) def set_payoffs(self): p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff = Constants.endowment - self.sent_amount + self.sent_back_amount p2.payoff = self.sent_amount * Constants.multiplier - self.sent_back_amount # if self.subsession.round_number == self.session.vars['paying_round']: # else: # p1.payoff = c(0) # p2.payoff = c(0) # else: # p2.payoff = c(0) # game3_payoff = p.payoff # print('game3_payoff', game3_payoff) # p.participant.vars['game3_payoff'] = self.participant.payoff class Player(BasePlayer): random_payment = models.IntegerField() tg_payoff = models.IntegerField() def role(self): return {1: 'A', 2: 'B'}[self.id_in_group] def set_payoff(self): self.participant.vars['game2_payoff'] = self.payoff game2_payoff = self.participant.vars['game2_payoff'] # print('game3_payoff', game3_payoff) test1 = models.StringField( choices=['8', '6', '2'], verbose_name='How much is your final payoff?', widget=widgets.RadioSelect) test2 = models.StringField( choices=['8', '10', '12'], verbose_name='How much does player B get as final payoff?', widget=widgets.RadioSelect) # print('game_payoff') # if self.subsession.round_number == self.session.vars['paying_round']: # random_payment = random.choice([p.payoff for p in self.in_all_rounds()]) # self.participant.vars['tg_payoff'] = self.random_payment # print('tg payoff', random_payment) # for p in self.participant.get_players(): # p.payoff_backup = p.payoff # p.payoff = 0 # self.payoff = Constants.fixedfee + self.participant.vars['tg_payoff'] # self.participant.vars['game3_payoff'] = self.payoff # game3_payoff = self.participant.vars['game3_payoff'] # print('game3_payoff', game3_payoff)