from otree.api import * c = cu doc = '\nKaushik Basu\'s famous traveler\'s dilemma (\n\n AER 1994\n).\nIt is a 2-player game. The game is framed as a traveler\'s dilemma and intended\nfor classroom/teaching use.\n' class Constants(BaseConstants): name_in_url = 'traveler_dilemma' players_per_group = 2 num_rounds = 10 adjustment_abs = cu(2) max_amount = cu(100) min_amount = cu(2) instructions_template = 'traveler_dilemma/instructions.html' def creating_session(subsession): session = subsession.session subsession.group_randomly() class Subsession(BaseSubsession): pass def set_payoffs(group): p1, p2 = group.get_players() if p1.claim == p2.claim: group.lower_claim = p1.claim for p in [p1, p2]: p.payoff = group.lower_claim p.adjustment = cu(0) else: if p1.claim < p2.claim: winner = p1 loser = p2 else: winner = p2 loser = p1 group.lower_claim = winner.claim winner.adjustment = Constants.adjustment_abs loser.adjustment = -Constants.adjustment_abs winner.payoff = group.lower_claim + winner.adjustment loser.payoff = group.lower_claim + loser.adjustment class Group(BaseGroup): lower_claim = models.CurrencyField() def other_player(player): group = player.group return player.get_others_in_group()[0] class Player(BasePlayer): claim = models.CurrencyField(doc='Each player s claim', label='How much will you claim for your antique', max=Constants.max_amount, min=Constants.min_amount) adjustment = models.CurrencyField() class Claim(Page): form_model = 'player' form_fields = ['claim'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): form_model = 'player' @staticmethod def vars_for_template(player): return dict(other_player_claim=other_player(player).claim) page_sequence = [Claim, ResultsWaitPage, Results]