from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Lorenzo Spadoni' doc = """ UG with strategy method """ class Constants(BaseConstants): name_in_url = 'ultimo' players_per_group = 2 num_rounds = 1 endowment = c(100) payoff_if_rejected = c(0) offer_increment = c(10) offer_choices = currency_range(0, endowment, offer_increment) offer_choices_count = len(offer_choices) class Subsession(BaseSubsession): def creating_session(self): self.group_randomly(fixed_id_in_group=True) class Player(BasePlayer): ult_payoff = models.IntegerField() sent_amount = models.CurrencyField(choices=Constants.offer_choices,label='Your offer:') accept_offer = models.CurrencyField(choices=Constants.offer_choices, label='You would accept an offer higher or equal to:') def role(self): if self.id_in_group == 1: return 'Proposer' if self.id_in_group == 2: return 'Receiver_u' def other_player(self): return self.get_others_in_group()[0] class Group(BaseGroup): def set_payoffs(self): proposer = self.get_player_by_role('Proposer') receiver_u = self.get_player_by_role('Receiver_u') if proposer.sent_amount >= receiver_u.accept_offer: proposer.payoff = Constants.endowment - proposer.sent_amount receiver_u.payoff = proposer.sent_amount else: proposer.payoff = Constants.payoff_if_rejected receiver_u.payoff = Constants.payoff_if_rejected