from otree.api import * class C(BaseConstants): NAME_IN_URL = 'zemi_b' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 7 CASE_A = 1 CASE_B = 2 CASE_C = 3 CASE_D = 4 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): keisiki = models.StringField( choices=[['レンタル', 'レンタル'], ['販売', '販売']], label='どちらの方法を採用しますか?', widget=widgets.RadioSelect, ) first_a = models.StringField( choices=[['1','1'],['2', '2'], ['3', '3'],['無し','無し']], label='1期目の生産量はどうしますか?(両方レンタル)

あなたの1期目の利得=(8-あなたの1期目の生産量-相手の1期目の生産量)*あなたの1期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量と同じにしてください。

', widget=widgets.RadioSelectHorizontal, ) first_b = models.StringField( choices=[['0.75', '0.75'], ['1.75', '1.75'],['2.75', '2.75'],['無し','無し']], label='1期目の生産量はどうしますか?(あなたレンタル、相手販売)

あなたの1期目の利得=(8-あなたの1期目の生産量-相手の1期目の生産量)*あなたの1期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量を下回るようにしてください。

', widget=widgets.RadioSelectHorizontal, ) first_c = models.StringField( choices=[['0.5', '0.5'], ['1.5', '1.5'],['2.5', '2.5'],['無し','無し']], label='1期目の生産量はどうしますか?(あなた販売、相手レンタル)

あなたの1期目の利得={(4/3)*(8-あなたの1期目の生産量)-相手の1期目の生産量}*あなたの1期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量を下回るようにしてください。

', widget=widgets.RadioSelectHorizontal, ) first_d = models.StringField( choices=[['1.5', '1.5'], ['2','2'], ['2.5', '2.5'],['無し','無し']], label='1期目の生産量はどうしますか?(両方販売)

あなたの1期目の利得={(4/3)*(8-あなたの1期目の生産量-相手の1期目の生産量)}*あなたの1期目の生産量

ただし、2期目の生産量は、1期目に1.5を選んだ場合0、2を選んだ場合0か0.5、2.5を選んだ場合0か0.5か1を選択してください。

', widget=widgets.RadioSelectHorizontal, ) second_a = models.StringField( choices=[['1','1'],['2', '2'], ['3', '3'],['無し','無し']], label='2期目の生産量はどうしますか?(両方レンタル)

あなたの2期目の利得=(8-あなたの2期目の生産量-相手の2期目の生産量)*あなたの2期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量と同じにしてください。

', widget=widgets.RadioSelectHorizontal, ) second_b = models.StringField( choices=[['0', '0'], ['1', '1'],['2', '2'],['無し','無し']], label='2期目の生産量はどうしますか?(あなたレンタル、相手販売)

あなたの2期目の利得=(8-あなたの2期目の生産量-相手の1期目の生産量-相手の2期目の生産量)*あなたの2期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量を下回るようにしてください。

', widget=widgets.RadioSelectHorizontal, ) second_c = models.StringField( choices=[['0', '0'], ['1', '1'],['2', '2'],['無し','無し']], label='2期目の生産量はどうしますか?(あなた販売、相手レンタル)

あなたの2期目の利得=(8-あなたの1期目の生産量-あなたの2期目の生産量-相手の1期目の生産量)*あなたの2期目の生産量

ただし、2期目の生産量は、必ず1期目の生産量を下回るようにしてください。

', widget=widgets.RadioSelectHorizontal, ) second_d = models.StringField( choices=[['0', '0'], ['0.5','0.5'], ['1', '1'],['無し','無し']], label='2期目の生産量はどうしますか?(両方販売)

あなたの2期目の利得=(8-あなたの1期目の生産量-相手の1期目の生産量-あなたの2期目の生産量-相手の2期目の生産量)*あなたの2期目の生産量

ただし、2期目の生産量は、1期目に1.5を選んだ場合0、2を選んだ場合0か0.5、2.5を選んだ場合0か0.5か1を選択してください。

', widget=widgets.RadioSelectHorizontal, ) # FUNCTIONS def keisiki(group: Group): for p in group.get_players(): keisiki(p) def other_player(player: Player): return player.get_others_in_group()[0] def keisiki(player: Player): keisiki_matrix = { ('レンタル', 'レンタル'): C.CASE_A, ('レンタル', '販売'): C.CASE_B, ('販売', 'レンタル'): C.CASE_C, ('販売', '販売'): C.CASE_D, } other = other_player(player) player.keisiki = keisiki_matrix[(player.keisiki, other.keisiki)] # PAGES class Ways(Page): timeout_seconds = 30 form_model = 'player' form_fields = ['keisiki'] class WaitPage1(WaitPage): after_players_arrive = Ways class Output1(Page): @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return dict( opponent=opponent, same_choice=player.keisiki == opponent.keisiki, my_decision=player.field_display('keisiki'), opponent_decision=opponent.field_display('keisiki'), ) form_model = 'player' form_fields = ['first_a','first_b','first_c','first_d'] class WaitPage2(WaitPage): after_players_arrive = Output1 class Output2(Page): @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return dict( opponent=opponent, same_choice=player.keisiki == opponent.keisiki, my_decision=player.field_display('keisiki'), opponent_decision=opponent.field_display('keisiki'), same_choice_a=player.first_a == opponent.first_a, my_decision1_a=player.field_display('first_a'), opponent_decision1_a=opponent.field_display('first_a'), same_choice_b=player.first_b == opponent.first_b, my_decision1_b=player.field_display('first_b'), opponent_decision1_b=opponent.field_display('first_b'), same_choice_c=player.first_c == opponent.first_c, my_decision1_c=player.field_display('first_c'), opponent_decision1_c=opponent.field_display('first_c'), same_choice_d=player.first_d == opponent.first_d, my_decision1_d=player.field_display('first_d'), opponent_decision1_d=opponent.field_display('first_d'), ) form_model = 'player' form_fields = ['second_a','second_b','second_c','second_d'] class WaitPage3(WaitPage): after_players_arrive = Output2 class Results(Page): @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return dict( opponent=opponent, same_choice=player.keisiki == opponent.keisiki, my_decision=player.field_display('keisiki'), opponent_decision=opponent.field_display('keisiki'), same_choice_a=player.first_a == opponent.first_a, my_decision1_a=player.field_display('first_a'), opponent_decision1_a=opponent.field_display('first_a'), same_choice_b=player.first_b == opponent.first_b, my_decision1_b=player.field_display('first_b'), opponent_decision1_b=opponent.field_display('first_b'), same_choice_c=player.first_c == opponent.first_c, my_decision1_c=player.field_display('first_c'), opponent_decision1_c=opponent.field_display('first_c'), same_choice_d=player.first_d == opponent.first_d, my_decision1_d=player.field_display('first_d'), opponent_decision1_d=opponent.field_display('first_d'), same_choice_A=player.second_a == opponent.second_a, my_decision2_a=player.field_display('second_a'), opponent_decision2_a=opponent.field_display('second_a'), same_choice_B=player.second_b == opponent.second_b, my_decision2_b=player.field_display('second_b'), opponent_decision2_b=opponent.field_display('second_b'), same_choice_C=player.second_c == opponent.second_c, my_decision2_c=player.field_display('second_c'), opponent_decision2_c=opponent.field_display('second_c'), same_choice_D=player.second_d == opponent.second_d, my_decision2_d=player.field_display('second_d'), opponent_decision2_d=opponent.field_display('second_d'), ) page_sequence = [Ways, WaitPage1, Output1, WaitPage2, Output2, WaitPage3, Results]