from otree.api import * """ Sim for "Traveler's Dilemma" game. Each player chooses a price and wins or loses money dependent on their partner's choice. """ class Constants(BaseConstants): name_in_url = 'traveler' players_per_group = 2 num_rounds = 10 instructions_template = 'traveler/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): claim = models.IntegerField( min=80, max=200, label="Please enter a claim between 80 and 200 cents." ) # FUNCTIONS def creating_session(subsession: Subsession): subsession.group_randomly() def other_player(player: Player): return player.get_others_in_group()[0] def set_payoff(player: Player): other_claim = other_player(player).claim claim = player.claim if claim == other_claim: payoff = claim elif claim > other_claim: payoff = other_claim - 10 else: payoff = claim + 10 player.payoff = payoff # PAGES class Introduction(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Main(Page): form_model = 'player' form_fields = ['claim'] class ResultsWaitPage(WaitPage): @staticmethod def after_all_players_arrive(group: Group): for p in group.get_players(): p.set_payoff() class Results(Page): @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return { 'player_payoff': int(player.payoff), 'opponent_claim': opponent.claim, 'opponent_payoff': int(opponent.payoff), } class Final(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 10 @staticmethod def vars_for_template(player: Player): return {'my_payoff': int(player.participant.payoff)} page_sequence = [Introduction, Main, ResultsWaitPage, Results, Final]