from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) 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 = 2 adjustment_abs = c(2) max_amount = c(100) min_amount = c(2) instructions_template = 'traveler_dilemma/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): lower_claim = models.CurrencyField() def set_payoffs(self): p1, p2 = self.get_players() if p1.claim == p2.claim: self.lower_claim = p1.claim for p in [p1, p2]: p.payoff = self.lower_claim p.adjustment = c(0) else: if p1.claim < p2.claim: winner = p1 loser = p2 else: winner = p2 loser = p1 self.lower_claim = winner.claim winner.adjustment = Constants.adjustment_abs loser.adjustment = -Constants.adjustment_abs winner.payoff = self.lower_claim + winner.adjustment loser.payoff = self.lower_claim + loser.adjustment class Player(BasePlayer): claim = models.CurrencyField(doc='Each player s claim', max=Constants.max_amount, min=Constants.min_amount) adjustment = models.CurrencyField() def other_player(self): return self.get_others_in_group()[0]