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' players_per_group = 2 num_rounds = 3 borninf=11 bornsup=20 Bonus=20 instructions_template = 'my_eleven_twenty/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 == 14: p.Position_2 = 1 elif p.Choice_M == 13: p.Position_2 = 2 elif p.Choice_M == 12: p.Position_2 = 3 elif p.Choice_M == 11: p.Position_2 = 4 elif p.Choice_M == 19: p.Position_2 = 5 elif p.Choice_M == 18: p.Position_2 = 6 elif p.Choice_M == 17: p.Position_2 = 7 elif p.Choice_M == 16: p.Position_2 = 8 elif p.Choice_M == 15: p.Position_2 = 9 elif p.Choice_M == 20: 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 == 19: p.Position_3 = 1 elif p.Choice_E == 18: p.Position_3 = 2 elif p.Choice_E == 17: p.Position_3 = 3 elif p.Choice_E == 16: p.Position_3 = 4 elif p.Choice_E == 15: p.Position_3 = 5 elif p.Choice_E == 14: p.Position_3 = 6 elif p.Choice_E == 13: p.Position_3 = 7 elif p.Choice_E == 12: p.Position_3 = 8 elif p.Choice_E == 11: p.Position_3 = 9 elif p.Choice_E == 20: 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=[11,12,13,14,15,16,17,18,19,20], doc="""Contribution jeu 11-20""", widget=widgets.RadioSelectHorizontal ) Choice_M=models.IntegerField( choices=[14,13,12,11,19,18,17,16,15,20], doc="""Contribution jeu 11-20""", widget=widgets.RadioSelectHorizontal ) Choice_E = models.IntegerField( choices=[19, 18, 17, 16, 15, 14, 13, 12, 11, 20], 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]