from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'my_eleven_twenty_2' players_per_group = 2 num_rounds = 3 borninf=1 bornsup=10 Bonus=8 instructions_template = 'my_eleven_twenty_2/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): min_Choice_B = models.FloatField() max_Choice_B = models.FloatField() diff_Choice_B= models.FloatField() min_Position_2 = models.FloatField() max_Position_2= models.FloatField() diff_Position_2= models.FloatField() min_Position_3 = models.FloatField() max_Position_3 = models.FloatField() diff_Position_3 = models.FloatField() def set_payoffs(self): if self.round_number==1: self.min_Choice_B = min([p.Choice_B for p in self.get_players()]) self.max_Choice_B = max([p.Choice_B for p in self.get_players()]) self.diff_Choice_B = self.max_Choice_B - self.min_Choice_B for p in self.get_players(): if self.diff_Choice_B == 1 : p.gain_1= p.Choice_B + Constants.Bonus else: p.gain_1 = p.Choice_B elif self.round_number==2: for p in self.get_players(): if p.Choice_M == 4: p.Position_2 = 1 elif p.Choice_M == 3: p.Position_2 = 2 elif p.Choice_M == 2: p.Position_2 = 3 elif p.Choice_M == 1: p.Position_2 = 4 elif p.Choice_M == 9: p.Position_2 = 5 elif p.Choice_M == 8: p.Position_2 = 6 elif p.Choice_M == 7: p.Position_2 = 7 elif p.Choice_M == 6: p.Position_2 = 8 elif p.Choice_M == 5: p.Position_2 = 9 elif p.Choice_M == 10: p.Position_2 = 10 self.min_Position_2 = min([p.Position_2 for p in self.get_players()]) self.max_Position_2 = max([p.Position_2 for p in self.get_players()]) self.diff_Position_2= self.max_Position_2 - self.min_Position_2 for p in self.get_players(): if self.diff_Position_2 == 1: p.gain_2= p.Choice_M + Constants.Bonus else: p.gain_2 = p.Choice_M elif self.round_number==3: for p in self.get_players(): if p.Choice_E == 9: p.Position_3 = 1 elif p.Choice_E == 8: p.Position_3 = 2 elif p.Choice_E == 7: p.Position_3 = 3 elif p.Choice_E == 6: p.Position_3 = 4 elif p.Choice_E == 5: p.Position_3 = 5 elif p.Choice_E == 4: p.Position_3 = 6 elif p.Choice_E == 3: p.Position_3 = 7 elif p.Choice_E == 2: p.Position_3 = 8 elif p.Choice_E == 1: p.Position_3 = 9 elif p.Choice_E == 10: p.Position_3 = 10 self.min_Position_3 = min([p.Position_3 for p in self.get_players()]) self.max_Position_3= max([p.Position_3 for p in self.get_players()]) self.diff_Position_3 = self.max_Position_3 - self.min_Position_3 for p in self.get_players(): if self.diff_Position_3 == 1 : p.gain_3= p.Choice_E+ Constants.Bonus else: p.gain_3 = p.Choice_E class Player(BasePlayer): Choice_B = models.IntegerField( choices=[1,2,3,4,5,6,7,8,9,10], doc="""Contribution jeu 11-20""", widget=widgets.RadioSelectHorizontal ) Choice_M=models.IntegerField( choices=[4,3,2,1,9,8,7,6,5,10], doc="""Contribution jeu 11-20""", widget=widgets.RadioSelectHorizontal ) Choice_E = models.IntegerField( choices=[9, 8, 7, 6, 5, 4, 3, 2, 1, 10], doc="""Contribution jeu 11-20""", widget=widgets.RadioSelectHorizontal ) gain_1 = models.FloatField() gain_2 = models.FloatField() Position_2=models.FloatField() gain_3 = models.FloatField() Position_3 = models.FloatField() gain_final = models.FloatField() def other_player(self): return self.get_others_in_group()[0]