from random import randrange from otree.api import * import random,json from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Page, Currency as c, currency_range, ) doc = """ EXPERIENCE """ class C(BaseConstants): NAME_IN_URL = 'test1' PLAYERS_PER_GROUP = 5 NUM_ROUNDS = 50 COLOR_DISPLAYED_DURATION = 1.5 COLOR_CHOICES_DURATION = 30 TOTAL_ROUND_DURATION = COLOR_DISPLAYED_DURATION + COLOR_CHOICES_DURATION COLORS = ['#000000', '#808080', '#C0C0C0', '#FFFFFF', '#800000', '#FF0000', '#808000', '#FFFF00', '#008000', '#00FF00', '#008080', '#00FFFF', '#000080', '#0000FF', '#800080', '#FF00FF', '#F0F8FF', '#FAEBD7', '#00FFFF', '#7FFFD4', '#F0FFFF', '#F5F5DC', '#FFE4C4', '#000000', '#FFEBCD', '#0000FF', '#8A2BE2', '#A52A2A', '#DEB887', '#5F9EA0', '#7FFF00', '#D2691E', '#FF7F50', '#6495ED', '#FFF8DC', '#DC143C', '#00FFFF', '#00008B', '#008B8B', '#B8860B', '#A9A9A9', '#006400', '#BDB76B', '#8B008B', '#556B2F', '#FF8C00', '#9932CC', '#8B0000', '#E9967A', '#8FBC8F', '#483D8B', '#2F4F4F', '#00CED1', '#9400D3', '#FF1493', '#00BFFF', '#696969', '#1E90FF', '#B22222', '#FFFAF0', '#228B22', '#FF00FF', '#DCDCDC', '#F8F8FF', '#FFD700', '#DAA520', '#808080', '#008000', '#ADFF2F', '#F0FFF0', '#FF69B4', '#CD5C5C', '#4B0082', '#FFFFF0', '#F0E68C', '#E6E6FA', '#FFF0F5', '#7CFC00', '#FFFACD', '#ADD8E6', '#F08080', '#E0FFFF', '#FAFAD2', '#90EE90', '#D3D3D3', '#FFB6C1', '#FFA07A', '#20B2AA', '#87CEFA', '#778899', '#B0C4DE', '#FFFFE0', '#00FF00', '#32CD32', '#FAF0E6', '#FF00FF', '#800000', '#66CDAA', '#0000CD', '#BA55D3', '#9370DB', '#3CB371', '#7B68EE', '#00FA9A', '#48D1CC', '#C71585', '#191970', '#F5FFFA', '#FFE4E1', '#FFE4B5', '#FFDEAD', '#000080', '#FDF5E6', '#808000', '#6B8E23', '#FFA500', '#FF4500', '#DA70D6', '#EEE8AA', '#98FB98', '#AFEEEE', '#DB7093', '#FFEFD5', '#FFDAB9', '#CD853F', '#FFC0CB', '#DDA0DD', '#B0E0E6', '#800080', '#FF0000', '#BC8F8F', '#416'] def creating_session(self): if self.round_number == 1: # On mélange les joueurs pour qu'ils soient regroupés de manière aléatoire self.group_randomly() for g in self.get_groups(): # Choix de couleur à présenter brièvement previous_color = random.choice(C.COLORS) color_choices = random.sample(C.COLORS, 4) color_choices.append(previous_color) random.shuffle(color_choices) # Attribution de la liste de couleurs à ce groupe g.set_color_list(color_choices) def after_all_players_arrive(self): for p in self.get_players(): # Récupération de la couleur à présenter brièvement p.previous_color = p.group.color_choices[-1] # Récupération des 4 couleurs de choix pour ce joueur for i in range(4): setattr(p, 'color{}'.format(i + 1), p.group.color_choices[i]) # Envoi des couleurs et des durées de présentation aux pages des joueurs previous_color = p.group.color_choices[-1] choices = p.group.color_choices[:-1] p.participant.vars['color_displayed'] = previous_color p.participant.vars['time_displayed'] = C.COLOR_DISPLAYED_DURATION for i in range(4): p.participant.vars['color{}'.format(i + 1)] = choices[i] p.participant.vars['time{}'.format(i + 1)] = C.COLOR_CHOICES_DURATION class Subsession(BaseSubsession): pass class ColorChoice1(Page): timeout_seconds = C.COLOR_CHOICES_DURATION form_model = 'player' form_fields = ['color_choice'] class Group(BaseGroup): # ... Autres méthodes et attributs de la classe ... color_list = models.LongStringField() #color_choices = models.LongStringField() method = models.StringField() def set_color_list(self, color_list): self.color_list = ','.join(color_list) def generate_color_list(self): return self.color_list def color_choice_choices(player): #print(player.session.config['treatment']) colors=player.group.color_list.split(',') return [[i+1,h] for (i,h) in enumerate(colors[:-1])] class Player(BasePlayer): color_choice=models.IntegerField(label='Choisissez la ou les couleurs') # PAGES class ColorDisplayed(Page): timeout_seconds = C.COLOR_DISPLAYED_DURATION def vars_for_template(player): colors = player.group.color_list.split(',') return { 'previous_color': colors[-1], } # Déterminer la page suivante en fonction de la méthode de vote choisie page_sequence = [ ColorDisplayed, ColorChoice1, ]