from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) doc = '.\n\nUn juego de bienes publicos (take-something)' class Constants(BaseConstants): name_in_url = 'ExtraccionSV3' players_per_group = 3 num_rounds = 3 endowment1 = c(12) endowment2 = c(9) endowment3 = c(6) ext = 5 RenA = 17 RenB = 5 admin_report_template = 'ExtraccionSV3/admin_report.html' instructiones_template = 'ExtraccionSV3/instructiones.html' class Subsession(BaseSubsession): def creating_session(self): if self.round_number ==1: self.group_randomly(fixed_id_in_group = True) else: self.group_like_round(1) class Group(BaseGroup): total_contribution = models.CurrencyField() individual_share = models.CurrencyField() contribution1 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas'], [7, '7 fichas'], [8, '8 fichas'], [9, '9 fichas'], [10, '10 fichas'], [11, '11 fichas'], [12, '12 fichas']], initial=Constants.endowment1, label='Fichas en la actividad extractiva:', max=Constants.endowment1, min=0) contribution2 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas'], [7, '7 fichas'], [8, '8 fichas'], [9, '9 fichas']], initial=Constants.endowment2, label='Fichas en la actividad extractiva:', max=Constants.endowment2, min=0) contribution3 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas']], initial=Constants.endowment3, label='Fichas en la actividad extractiva:', max=Constants.endowment3, min=0) def set_payoffs(self): self.total_contribution = sum([self.contribution1, self.contribution2, self.contribution3]) self.individual_share = (self.total_contribution * Constants.ext) p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p3 = self.get_player_by_id(3) p1.payoff = Constants.RenB*(Constants.endowment1 -self.contribution1) + (Constants.RenA*self.contribution1) - self.individual_share + 80 p2.payoff = Constants.RenB*(Constants.endowment2 - self.contribution2) + (Constants.RenA*self.contribution2) - self.individual_share + 80 p3.payoff = Constants.RenB*(Constants.endowment3 - self.contribution3) + (Constants.RenA*self.contribution3) - self.individual_share + 80 class Player(BasePlayer): payoff_app5 = models.LongStringField() def role(self): if self.id_in_group == 1: return "Jugador X" if self.id_in_group == 2: return "Jugador Y" if self.id_in_group == 3: return "Jugador Z" def payoff_app(self): return sum([self.in_round(self.round_number - 1).payoff]+[self.in_round(self.round_number-2).payoff]+[self.in_round(self.round_number).payoff])