from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random doc = """ Players decide how to divide a certain amount between himself and the other player. """ class Constants(BaseConstants): name_in_url = 'dictator' players_per_group = 2 num_rounds = 1 instructions_template = 'dictator/instructions.html' # Initial amount allocated to the dictator endowment = 20 class Subsession(BaseSubsession): pass # def creating_session(self): # if self.round_number == 1: # for group in self.get_groups(): # if random.random() < 0.2: # group.is_selected_for_payment = 1 # else: # group.is_selected_for_payment = 0 # # print('Group is selected for payment:', self.group.is_selected_for_payment ) class Group(BaseGroup): # given2 = models.CurrencyField( # doc="""Amount dictator decided to give to the other party """, # min=0, max=Constants.endowment, # ) is_selected_for_payment = models.IntegerField() rand_number = models.FloatField() def set_payoffs(self): rand_number = random.random() if rand_number < 0.2: self.is_selected_for_payment = 1 else: self.is_selected_for_payment = 0 print('Group selected for payment:', self.is_selected_for_payment) if self.is_selected_for_payment == 1: p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p1.payoff_dictator = Constants.endowment - p1.given p2.payoff_dictator = p1.given print('Player 1 payoff:', p1.payoff_dictator) print('Player 2 payoff:', p2.payoff_dictator) else: players = self.get_players() for p in players: p.payoff_dictator=0 print('Players payoff:', p.payoff_dictator) players = self.get_players() for p in players: p.participant.vars['payoff_dictator'] = p.payoff_dictator class Player(BasePlayer): payoff_dictator= models.IntegerField() given = models.IntegerField( doc="""Amount dictator decided to give to the other party """, min=c(0), max=Constants.endowment, )