from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'three_agent' PLAYERS_PER_GROUP = 3 NUM_ROUNDS = 6 ENDOWMENT = cu(1) # The {}_ROLE variables are all assign to an attribtue names 'role' in player ACTOR_ROLE = 'Actor' RECEIVER_1_ROLE = 'Receiver' RECEIVER_2_ROLE = 'Receiver' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): reward_player = models.IntegerField( label="Whom do you want to send to?", initial = 0) def reward_player_choices(player:Player): role_list = [1,2,3] return list(set(role_list) - set([player.id_in_group])) def creating_session(subsession: Subsession): if subsession.round_number == 1: player_list = subsession.get_players() for p in player_list: p.participant.role = p.role # PAGES class Send(Page): form_model = 'player' form_fields = ['reward_player'] @staticmethod def is_displayed(player): return player.participant.role == 'Actor' class ResultsWaitPage(WaitPage): @staticmethod def is_displayed(player): return player.participant.role == 'Receiver' after_all_players_arrive = 'set_payoffs' def set_payoffs(group): player_list = group.get_players() reward_player = 1 # get the reward player number for p in player_list: p.payoff = 0; if p.reward_player != 0: reward_player = p.reward_player # sync the reward_player information to all players for p in player_list: p.reward_player = reward_player player_list[reward_player-1].payoff = 1 class Results(Page): pass class ShufflePage(WaitPage): @staticmethod def after_all_players_arrive(group:Group): players = group.get_players() role_list = ['Actor','Receiver','Receiver'] random.shuffle(role_list) for p,r in zip(players,role_list): p.participant.role = r page_sequence = [ Send, ResultsWaitPage, Results, ShufflePage, ]