from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = 'Filip Gonschorek, Mingxian Jin' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'cutcake_practice_IcutUchoose' players_per_group = 2 num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): if self.round_number == 1: self.group_randomly() class Group(BaseGroup): cut_value = models.IntegerField(initial=0) choice_piece = models.StringField() round_value = models.IntegerField(initial=1) choice = models.BooleanField( choices=[ [False, 'Left'], [True, 'Right'], ] ) class Player(BasePlayer): left_piece = models.IntegerField(initial=0) right_piece = models.IntegerField(initial=0) value_own_piece = models.IntegerField(initial=0) value_other_piece = models.IntegerField(initial=0) payoff_help = models.CurrencyField(initial=0) envy = models.BooleanField() truth_telling = models.BooleanField() def set_pieces(self): if self.id_in_group == 1: if self.group.cut_value <= 60: self.left_piece = 0 elif self.group.cut_value <= 120: self.left_piece = self.group.cut_value - 60 elif self.group.cut_value <= 170: self.left_piece = 60 elif self.group.cut_value <= 190: self.left_piece = self.group.cut_value - 110 elif self.group.cut_value <= 290: self.left_piece = 80 elif self.group.cut_value <= 310: self.left_piece = self.group.cut_value - 210 elif self.group.cut_value <= 410: self.left_piece = 100 elif self.group.cut_value <= 430: self.left_piece = self.group.cut_value - 310 else: self.left_piece = 120 if self.id_in_group == 2: if self.group.cut_value <= 120: self.left_piece = 0 elif self.group.cut_value <= 130: self.left_piece = self.group.cut_value - 120 elif self.group.cut_value <= 410: self.left_piece = 10 elif self.group.cut_value <= 430: self.left_piece = self.group.cut_value - 400 elif self.group.cut_value <= 450: self.left_piece = 30 elif self.group.cut_value <= 540: self.left_piece = self.group.cut_value - 420 else: self.left_piece = 120 self.right_piece = 120 - self.left_piece def set_payoff(self): if self.group.choice: self.group.choice_piece = 'Right' else: self.group.choice_piece = 'Left' if self.id_in_group == 1: if self.group.choice: self.value_own_piece = self.left_piece self.value_other_piece = self.right_piece else: self.value_own_piece = self.right_piece self.value_other_piece = self.left_piece elif self.id_in_group == 2: if self.group.choice: self.value_own_piece = self.right_piece self.value_other_piece = self.left_piece else: self.value_own_piece = self.left_piece self.value_other_piece = self.right_piece def set_envy(self): if self.value_own_piece >= self.value_other_piece: self.envy = False else: self.envy = True def set_truthtelling(self): if self.id_in_group == 1: if self.left_piece <= 65 and self.left_piece >= 55: self.truth_telling = True else: self.truth_telling = False elif self.id_in_group == 2: if self.value_own_piece >= self.value_other_piece: self.truth_telling = True else: self.truth_telling = False