from otree.api import * doc = """ Your app description """ contain_a = [] contain_b = [] selected_rounds = [] class Constants(BaseConstants): name_in_url = 'practice' players_per_group = 5 num_rounds = 1 endowment = 45 multiplier = 10 choices = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] class Subsession(BaseSubsession): pass class Group(BaseGroup): public_signal1 = models.StringField() public_signal2 = models.StringField() public_signal3 = models.StringField() public_signal4 = models.StringField() public_signal5 = models.StringField() public_signal6 = models.StringField() public_signal7 = models.StringField() public_signal8 = models.StringField() public_signal9 = models.StringField() public_signal10 = models.StringField() public_signal11 = models.StringField() public_signal12 = models.StringField() public_signal13 = models.StringField() public_signal14 = models.StringField() urn_type = models.IntegerField() urn_type_word = models.StringField() urn_group = models.IntegerField() selected_round_a = models.IntegerField() selected_round_b = models.IntegerField() cumulative_bet_on_even = models.CurrencyField() cumulative_bet_on_odd = models.CurrencyField() def select_urn(self): import random self.urn_type = random.choice((1,2,3,4)) if self.urn_type == 1: self.urn_type_word = 'A' self.urn_group = 1 contain_a.append('赤') contain_a.append('緑') contain_a.append('緑') contain_a.append('緑') contain_b.append('黒') contain_b.append('白') contain_b.append('白') contain_b.append('白') elif self.urn_type == 2: self.urn_type_word = 'B' self.urn_group = 1 contain_a.append('赤') contain_a.append('赤') contain_a.append('赤') contain_a.append('緑') contain_b.append('黒') contain_b.append('黒') contain_b.append('黒') contain_b.append('白') elif self.urn_type == 3: self.urn_type_word = 'C' self.urn_group = 2 contain_a.append('赤') contain_a.append('緑') contain_a.append('緑') contain_a.append('緑') contain_b.append('黒') contain_b.append('黒') contain_b.append('黒') contain_b.append('白') else: self.urn_type_word = 'D' self.urn_group = 2 contain_a.append('赤') contain_a.append('赤') contain_a.append('赤') contain_a.append('緑') contain_b.append('黒') contain_b.append('白') contain_b.append('白') contain_b.append('白') def cumulative_bet(self): self.cumulative_bet_on_even = (sum([p.round_1_even for p in self.get_players()])+ sum([p.round_2_even for p in self.get_players()])+ sum([p.round_3_even for p in self.get_players()])+ sum([p.round_4_even for p in self.get_players()])+ sum([p.round_5_even for p in self.get_players()])) self.cumulative_bet_on_odd = (sum([p.round_1_odd for p in self.get_players()])+ sum([p.round_2_odd for p in self.get_players()])+ sum([p.round_3_odd for p in self.get_players()])+ sum([p.round_4_odd for p in self.get_players()])+ sum([p.round_5_odd for p in self.get_players()])) def signal_maker(self): import random for player in self.get_players(): player.private_signal = random.choice(contain_a) self.public_signal1 = random.choice(contain_b) self.public_signal2 = random.choice(contain_b) self.public_signal3 = random.choice(contain_b) self.public_signal4 = random.choice(contain_b) def random_round(self): import random selected_rounds.extend(random.sample(Constants.choices, 2)) self.selected_round_a = selected_rounds[0] self.selected_round_b = selected_rounds[1] def R1_set_payoffs(self): if self.urn_group == 1: for player in self.get_players(): player.R1_revenew = player.round_1_even * Constants.multiplier player.R1_payoff = player.R1_revenew - player.R1_costs else: for player in self.get_players(): player.R1_revenew = player.round_1_odd * Constants.multiplier player.R1_payoff = player.R1_revenew - player.R1_costs def R1_costs_difinition(self): for player in self.get_players(): player.R1_costs = 0 for i in range(0,player.round_1_even + 1): player.R1_costs = player.R1_costs + i for i in range(0,player.round_1_odd + 1): player.R1_costs = player.R1_costs + i def R2_set_payoffs(self): if self.urn_group == 1: for player in self.get_players(): player.R2_revenew = player.round_2_even * Constants.multiplier player.R2_payoff = player.R2_revenew - player.R2_costs else: for player in self.get_players(): player.R2_revenew = player.round_2_odd * Constants.multiplier player.R2_payoff = player.R2_revenew - player.R2_costs def R2_costs_difinition(self): for player in self.get_players(): player.R2_costs = 0 for i in range(0,player.round_2_even + 1): player.R2_costs = player.R2_costs + i for i in range(0,player.round_2_odd + 1): player.R2_costs = player.R2_costs + i def R3_set_payoffs(self): if self.urn_group == 1: for player in self.get_players(): player.R3_revenew = player.round_3_even * Constants.multiplier player.R3_payoff = player.R3_revenew - player.R3_costs else: for player in self.get_players(): player.R3_revenew = player.round_3_odd * Constants.multiplier player.R3_payoff = player.R3_revenew - player.R3_costs def R3_costs_difinition(self): for player in self.get_players(): player.R3_costs = 0 for i in range(0,player.round_3_even + 1): player.R3_costs = player.R3_costs + i for i in range(0,player.round_3_odd + 1): player.R3_costs = player.R3_costs + i def R4_set_payoffs(self): if self.urn_group == 1: for player in self.get_players(): player.R4_revenew = player.round_4_even * Constants.multiplier player.R4_payoff = player.R4_revenew - player.R4_costs else: for player in self.get_players(): player.R4_revenew = player.round_4_odd * Constants.multiplier player.R4_payoff = player.R4_revenew - player.R4_costs def R4_costs_difinition(self): for player in self.get_players(): player.R4_costs = 0 for i in range(0,player.round_4_even + 1): player.R4_costs = player.R4_costs + i for i in range(0,player.round_4_odd + 1): player.R4_costs = player.R4_costs + i def R5_set_payoffs(self): if self.urn_group == 1: for player in self.get_players(): player.R5_revenew = player.round_5_even * Constants.multiplier player.R5_payoff = player.R5_revenew - player.R5_costs else: for player in self.get_players(): player.R5_revenew = player.round_5_odd * Constants.multiplier player.R5_payoff = player.R5_revenew - player.R5_costs def R5_costs_difinition(self): for player in self.get_players(): player.R5_costs = 0 for i in range(0,player.round_5_even + 1): player.R5_costs = player.R5_costs + i for i in range(0,player.round_5_odd + 1): player.R5_costs = player.R5_costs + i class Player(BasePlayer): private_signal = models.StringField() round_1_even = models.IntegerField( min = 0, max = 9, label = 'グループ1にかけるポイント数') round_2_even = models.IntegerField( min = 0, max = 9, label = 'グループ1にかけるポイント数') round_3_even = models.IntegerField( min = 0, max = 9, label = 'グループ1にかけるポイント数') round_4_even = models.IntegerField( min = 0, max = 9, label = 'グループ1にかけるポイント数') round_5_even = models.IntegerField( min = 0, max = 9, label = 'グループ1にかけるポイント数') round_1_odd = models.IntegerField( min = 0, max = 9, label = 'グループ2にかけるポイント数') round_2_odd = models.IntegerField( min = 0, max = 9, label = 'グループ2にかけるポイント数') round_3_odd = models.IntegerField( min = 0, max = 9, label = 'グループ2にかけるポイント数') round_4_odd = models.IntegerField( min = 0, max = 9, label = 'グループ2にかけるポイント数') round_5_odd = models.IntegerField( min = 0, max = 9, label = 'グループ2にかけるポイント数') R1_revenew = models.CurrencyField() R1_costs = models.CurrencyField() R2_revenew = models.CurrencyField() R2_costs = models.CurrencyField() R3_revenew = models.CurrencyField() R3_costs = models.CurrencyField() R4_revenew = models.CurrencyField() R4_costs = models.CurrencyField() R5_revenew = models.CurrencyField() R5_costs = models.CurrencyField() R1_payoff = models.CurrencyField() R2_payoff = models.CurrencyField() R3_payoff = models.CurrencyField() R4_payoff = models.CurrencyField() R5_payoff = models.CurrencyField() selected_payoff1 = models.CurrencyField() selected_payoff2 = models.CurrencyField() selected_payoff3 = models.CurrencyField() selected_payoff4 = models.CurrencyField() selected_payoff5 = models.CurrencyField() # PAGES class Intro(Page): pass class division(WaitPage): @staticmethod def after_all_players_arrive(group): group.select_urn() group.signal_maker() class Round1(Page): form_model = 'player' form_fields = ['round_1_even', 'round_1_odd'] class Wait2(WaitPage): pass class Round2(Page): form_model = 'player' form_fields = ['round_2_even', 'round_2_odd'] class Wait3(WaitPage): pass class Round3(Page): form_model = 'player' form_fields = ['round_3_even', 'round_3_odd'] class Wait4(WaitPage): pass class Round4(Page): form_model = 'player' form_fields = ['round_4_even', 'round_4_odd'] class Wait5(WaitPage): pass class Round5(Page): form_model = 'player' form_fields = ['round_5_even', 'round_5_odd'] class ResultWaitPage(WaitPage): @staticmethod def after_all_players_arrive(group): group.R1_costs_difinition() group.R1_set_payoffs() group.R2_costs_difinition() group.R2_set_payoffs() group.R3_costs_difinition() group.R3_set_payoffs() group.R4_costs_difinition() group.R4_set_payoffs() group.R5_costs_difinition() group.R5_set_payoffs() group.random_round() class Results(Page): pass page_sequence = [Intro, division,Round1, Wait2, Round2, Wait3, Round3, Wait4, Round4, Wait5, Round5, ResultWaitPage, Results]