from otree.api import * doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'ultimatum_trialS1' players_per_group = 3 num_rounds = 1 payment = 1000 endowment = 1000 currency_range(0, 1000, 10) class Subsession(BaseSubsession): pass class Group(BaseGroup): payment = models.IntegerField( choices=currency_range(cu(0), cu(Constants.payment), cu(10)), label="あなたはいくらでエージェントを雇いますか?", ) principal_point=models.IntegerField() agent_point=models.IntegerField() proposal = models.IntegerField( label="あなたはいくら相手に渡しますか" ) accept = models.IntegerField() accepted_or_not = models.BooleanField( doc="あなたは提案を受け入れますか?" ) proposer_point = models.IntegerField() accepter_point = models.IntegerField() principal_lastpoint=models.IntegerField() # FUNCTIONS def set_payoffs(group): if group.accepted_or_not==True: group.proposer_point = Constants.endowment - group.proposal group.accepter_point = group.proposal group.principal_lastpoint=1000 - group.payment + 1000 - group.proposal else: group.proposer_point = 0 group.accepter_point = 0 group.agent_point = 0 group.principal_lastpoint=1000 def compute(group): group.principal_point = Constants.payment - group.payment group.agent_point = group.payment def compute2(group): group.accept = 1000 - group.proposal class Player(BasePlayer): understand1 = models.IntegerField( label = "・プリンシパルからエージェントに渡される最低報酬額はいくらですか?", choices=[ [1, "0円"], [2, "250円"], [3, "500円"], ], initial = 0, widget = widgets.RadioSelect, ) understand2 = models.IntegerField( label="・プリンシパルがエージェントをX円で雇った時、エージェントは、最後通牒ゲームにおいて、受取人に最高でいくらまで渡せますか?", choices=[ [1, "1000-X円"], [2, "X円"], [3, "1000円"], ], initial = 0, widget = widgets.RadioSelect, ) understand3 = models.IntegerField( label="・プリンシパルがエージェントをX円で雇い、最後通牒ゲームにおいて、エージェントの提案が受取人に断られたとき、エージェントの報酬はどうなりますか?", choices=[ [1, "プリンシパルからそのままX円が支払われる。"], [2, "プリンシパルから報酬は支払われず、0円になる。"], [3, "半分になる。"] ], initial = 0, widget = widgets.RadioSelect, ) understand4 = models.IntegerField( label="・最後通牒ゲームについて、提案者がX円を渡す提案をして、受取人が「承諾」した場合、それぞれの利得はどうなりますか?", choices=[ [1, "提案者:X円, 受取人:1000-X円"], [2, "提案者:1000-X円, 受取人:X円"], [3, "提案者:X円, 受取人:X円"], ], initial = 0, widget = widgets.RadioSelect, ) understand5 = models.IntegerField( label="・最後通牒ゲームについて、提案者がX円を渡す提案をして、受取人が「拒否」した場合、それぞれの利得はどうなりますか?", choices=[ [1, "提案者:X円, 受取人:0円"], [2, "提案者:0円, 受取人:X円"], [3, "提案者:0円, 受取人:0円"], ], initial = 0, widget = widgets.RadioSelect, ) understand6 = models.IntegerField( label="・この実験では、最後通牒ゲームの結果は、最終的に誰と誰の利得になりますか?", choices=[ [1, "提案者(エージェント)と受取人"], [2, "プリンシパルと提案者(エージェント)"], [3, "プリンシパルと受取人"], ], initial = 0, widget = widgets.RadioSelect, ) def understand1_error_message(player, understand1): if understand1 != 3: return "この答えは間違ってます。もう一度、考えてみてください。" def understand2_error_message(player, understand2): if understand2 != 1: return "この答えは間違ってます。もう一度、考えてみてください。" def understand3_error_message(player, understand3): if understand3 != 2: return "この答えは間違ってます。もう一度、考えてみてください。" def understand4_error_message(player, understand4): if understand4 != 2: return "この答えは間違ってます。もう一度、考えてみてください。" def understand5_error_message(player, understand5): if understand5 != 3: return "この答えは間違ってます。もう一度、考えてみてください。" def understand6_error_message(player, understand6): if understand6 != 3: return "この答えは間違ってます。もう一度、考えてみてください。" # PAGES class Page2(Page): form_model = 'group' form_fields = ['proposal'] def is_displayed(player): return player.id_in_group == 2 class Page3(WaitPage): pass class Page4(Page): form_model = 'group' form_fields = ['accepted_or_not'] def is_displayed(player): return player.id_in_group == 3 class Page5(WaitPage): template_name = 'ultimatum_trialF1/ResultsWaitProposer.html' body_text = '' title_text = '' after_all_players_arrive = set_payoffs class Page6(Page): def is_displayed(player): return player.id_in_group == 3 class Page15(Page): def is_displayed(player): return player.id_in_group < 3 class Page7(Page): def is_displayed(player): return player.id_in_group < 3 class Page8(Page): form_model ='group' form_fields = ['payment'] def is_displayed(player): return player.id_in_group==1 class Page9(WaitPage): template_name = 'ultimatum_trialF1/ResultsWaitProposer.html' body_text = '' title_text = '' after_all_players_arrive = compute class Page10(Page): def is_displayed(player): return player.id_in_group<3 class Page11(Page): def is_displayed(player): return player.id_in_group == 3 class Page12(Page): def is_displayed(player): return player.id_in_group == 2 class ResultsWaitPage(WaitPage): template_name = 'ultimatum_trialF1/ResultsWaitResponder.html' body_text = '' title_text = '' after_all_players_arrive = compute2 def is_displayed(player): return player.id_in_group == 3 class Results(Page): pass class Page13(Page): def is_displayed(player): return player.id_in_group < 3 class Page14(Page): def is_displayed(player): return player.id_in_group == 1 class Page16(Page): pass class Quiz(Page): form_model = 'player' form_fields = ['understand1', 'understand2','understand3','understand4','understand5','understand6'] def is_displayed(player): return player.id_in_group < 3 class Quiz2(Page): form_model = 'player' form_fields = ['understand4','understand5'] def is_displayed(player): return player.id_in_group == 3 page_sequence = [ Page16, Page7, Page14, Page12, Page13, Page11, Quiz, Quiz2, Page8, Page9, Page10, Page2, ResultsWaitPage, Page4, Page5, Page6, Page15, Results ]