from otree.api import * c = cu doc = '最后通牒博弈' class C(BaseConstants): NAME_IN_URL = 'Ultimatumgame' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 ENDOW = cu(100) class Subsession(BaseSubsession): pass class Group(BaseGroup): kept = models.CurrencyField(label='作为决策者,你准备给自己留多少钱?', max=C.ENDOW, min=0) accept = models.BooleanField(choices=[[True, '接受!'], [False, '拒绝!']], label='作为响应者,你是否接受对方给你的分配?') def set_payoff(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) if group.accept: p1.payoff = group.kept p2.payoff = C.ENDOW - group.kept else: p1.payoff = 0 p2.payoff = 0 class Player(BasePlayer): name = models.StringField(label='请输入你的姓名') sex = models.StringField(choices=[['男', '男'], ['女', '女']], label='请选择你的性别', widget=widgets.RadioSelect) class Introd(Page): form_model = 'player' class Offer(Page): form_model = 'group' form_fields = ['kept'] @staticmethod def is_displayed(player: Player): group = player.group return player.id_in_group == 1 class WaitforPlay1(WaitPage): title_text = '请等待对手做决策' class Accep(Page): form_model = 'group' form_fields = ['accept'] @staticmethod def is_displayed(player: Player): group = player.group return player.id_in_group == 2 @staticmethod def vars_for_template(player: Player): group = player.group group= player.group return dict( offer = C.ENDOW - group.kept ) class Mywait(WaitPage): after_all_players_arrive = set_payoff title_text = '请等待对手做决策' class RES(Page): form_model = 'player' class Ques(Page): form_model = 'player' form_fields = ['name', 'sex'] page_sequence = [Introd, Offer, WaitforPlay1, Accep, Mywait, RES, Ques]