from otree.api import * doc = """ Simple trust game """ class C(BaseConstants): NAME_IN_URL = 'trust_simple_JP' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 ENDOWMENT = cu(10) MULTIPLIER = 3 INSTRUCTIONS_TEMPLATE = 'trust_simple_JP/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): sent_amount = models.CurrencyField( min=cu(0), max=C.ENDOWMENT, label="参加者Bへいくら送りますか?", ) sent_back_amount = models.CurrencyField( label="いくら送り返しますか?" ) class Player(BasePlayer): pass # FUNCTIONS def sent_back_amount_choices(group): #参加者Bの手元にわたる金額を計算 return currency_range( 0, group.sent_amount * C.MULTIPLIER, 1 ) def set_payoffs(group: Group): #利得の計算 p1 = group.get_player_by_id(1) #p1を参加者Aとして定義 p2 = group.get_player_by_id(2) #p2を参加者Bとして定義 p1.payoff = C.ENDOWMENT - group.sent_amount + group.sent_back_amount #参加者Aの利得を計算 p2.payoff = group.sent_amount * C.MULTIPLIER - group.sent_back_amount #参加者Bの利得を計算 # PAGES class Send(Page): form_model = 'group' form_fields = ['sent_amount'] @staticmethod def is_displayed(player): #参加者Aのみ表示 return player.id_in_group == 1 class WaitForP1(WaitPage): pass class SendBack(Page): form_model = 'group' form_fields = ['sent_back_amount'] @staticmethod def is_displayed(player): #参加者Bのみ表示 return player.id_in_group == 2 @staticmethod def vars_for_template(player): #参加者Bの手元に届いた金額を計算 group = player.group return dict(tripled_amount=group.sent_amount * C.MULTIPLIER) class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): pass page_sequence = [ Send, WaitForP1, SendBack, ResultsWaitPage, Results ]