from otree.api import * doc = """ Your app description """ # dictator - player.id_in_group == 2 seller # recipient - player.id_in_group == 1 buyer class Constants(BaseConstants): name_in_url = 'app_8_dictator' players_per_group = 2 num_rounds = 1 # Dictator game pie pie = cu(400) class Subsession(BaseSubsession): pass def group_by_arrival_time_method(subsession: Subsession, waiting_players): d = {} for p in waiting_players: group_id = p.participant.past_group_id if group_id not in d: d[group_id] = [] players_in_my_group = d[group_id] players_in_my_group.append(p) if len(players_in_my_group) == 2: return players_in_my_group def set_payoffs(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.payoff = group.pie_to_buyer p2.payoff = Constants.pie - group.pie_to_buyer print(p1.payoff, p2.payoff) print(p1.id_in_group, p2.id_in_group) class Group(BaseGroup): # dictator game中seller分给buyer的收益 pie_to_buyer = models.CurrencyField( min=0, max=400, lable="""实验二中一共有400点,请填写你愿意分给买方的点数,剩下的部分为你在实验二中的收益""" ) class Player(BasePlayer): # Questionnaire gender = models.StringField(choices=['男', '女'], label="""你的性别是""") age = models.IntegerField(label="""你的年龄是""") major = models.StringField(label="""你的专业是""") origin = models.StringField(label="""你的高考省份是""") # potential_payoff = models.CurrencyField() class Wait(WaitPage): group_by_arrival_time = True @staticmethod def after_all_players_arrive(group: Group): for p in group.get_players(): p.id_in_group = p.participant.past_id_in_group class Dictator_seller(Page): form_model = 'group' form_fields = ['pie_to_buyer'] @staticmethod def is_displayed(player): return player.id_in_group == 2 class Dictator_buyer(Page): @staticmethod def is_displayed(player): return player.id_in_group == 1 class WaitDictator_results(WaitPage): after_all_players_arrive = set_payoffs class Dictator_results(Page): @staticmethod def vars_for_template(player: Player): group = player.group return dict(offer= group.pie_to_buyer) class WaitForQuestionaire(WaitPage): @staticmethod def after_all_players_arrive(group: Group): for p in group.get_players(): participant = p.participant participant.app_payoffs['app_2_dictator'] = p.payoff class Questionnaire(Page): form_model = 'player' form_fields = ['gender', 'age', 'major', 'origin'] page_sequence = [ Wait, Dictator_seller, Dictator_buyer, WaitDictator_results, Dictator_results, WaitForQuestionaire, Questionnaire ]