from otree.api import * author = 'Matthieu COSTA' doc = """ Video games """ class Constants(BaseConstants): name_in_url = 'demographics' players_per_group = 100 num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): gender = models.IntegerField( choices=[[0, 'Male / Homme'], [1, 'Female / Femme'], [2, 'Other / Autre'], [3, 'I do not wish to answer this question / Je ne souhaite pas répondre à cette question']], label='Gender / Genre', widget=widgets.RadioSelect) age = models.StringField(label='Age', choices=[('-17', '-17'), ('18-25', '18-25'), ('26-34', '26-34'), ('35-44', '35-44'), ('45-54', '45-54'), ('55+', '55+')], widget=widgets.RadioSelect) marital_status = models.StringField( choices=[(i, e) for i, e in enumerate(['Single / Célibataire', 'In a couple / En couple', 'Engaged or married / Fiancé(e) ou marié(e)', 'Divorced / Divorcé(e)', 'Widowed / Veuf(ve)', 'Other / Autre', 'I do not wish to answer this question / Je ne souhaite pas répondre à cette question'])], label='Marital status / État civil') Occupation = models.StringField( label='Occupation / Situation professionelle', choices=[(i, e) for i, e in enumerate(['Student / Étudiant(e)', 'Employed / Employé(e)', 'Unemployed / Au chômage', 'House husband (wife) / Homme (ou femme) à la maison', 'Retired / Retraité(e)', 'Other / Autre'])]) level_of_study = models.StringField( label='Level of study / Niveau d\u2019étude', choices=[(i, e) for i, e in enumerate(['Bac', 'Licence', 'Master', 'Phd / Doctorat', 'Other / Autre'])]) field_of_study = models.StringField( label='Current field of study or work / Domaine actuel d\u2019étude ou d\u2019emploi', choices=[(i, e) for i, e in enumerate( ['Education / Éducation', 'Sciences', 'Engineering / Ingénieurie', 'Law and Political Science / Droit et sciences politiques', 'Agriculture and Food / Agriculture', 'Health / Santé', 'Business, Economics and Management / Commerce, Économie, Gestion et Management', 'Art and humanities / Art et sciences humaines', 'Computer Science and IT / Informatique', 'Other / Autre'])]) videogames_frequency = models.StringField( label='How often do you play video games? À quelle fréquence jouez-vous aux jeux-vidéos?', choices=[('Non', 'Never / Jamais'), ('<1 mois', 'Less than once a month / Moins d\u2019une fois par mois'), ('1-2 mois', 'Once or twice a month / Une ou deux fois par mois'), ('1-2 semaine', 'Once or twice a week / Une ou deux fois par semaine'), ('3-4 semaine', 'Three or four times a week / Trois ou quatre fois par semaine'), ('5-6 semaine', 'Five or six times a week / Cinq ou six fois par semaine'), ('Toujours', 'Everyday / Tous les jours')]) videogames_duration = models.StringField( label='How many hours per week do you typically spend playing video games? Combien d\u2019heures par semaine passez-vous à jouer aux jeux vidéos', choices=[('Non', 'None / Aucune'), ('<1', 'Less than one / Moins d\u2019une'), ('1-3', 'From 1 to 3 / De 1 à 3'), ('4-6', 'From 4 to 6 / De 4 à 6'), ('7-9', 'From 7 to 9 / De 7 à 9'), ('10+', '10 or more / 10 ou plus')]) single_multiplayer = models.StringField( label='Do you play single-player or multiplayer games? Jouez-vous à des jeux solo ou multijoueur?', choices=[('Solo', 'Single / Solo'), ('Ligne', 'Multiplayer / Multijoueur'), ('Les 2', 'Both / Les deux'), ('Aucun', 'None of them / Aucun des deux')]) freemium_videogames_frequency = models.StringField( label='How often do you play freemium video games? À quelle fréquence jouez-vous aux jeux-vidéos freemium?', choices=[('Non', 'Never / Jamais'), ('<1 mois', 'Less than once a month / Moins d\u2019une fois par mois'), ('1-2 mois', 'Once or twice a month / Une ou deux fois par mois'), ('1-2 semaine', 'Once or twice a week / Une ou deux fois par semaine'), ('3-4 semaine', 'Three or four times a week / Trois ou quatre fois par semaine'), ('5-6 semaine', 'Five or six times a week / Cinq ou six fois par semaine'), ('Toujours', 'Everyday / Tous les jours')]) freemium_videogames_duration = models.StringField( label='How many hours per week do you typically spend playing freemium video games? Combien d\u2019heures par semaine passez-vous à jouer aux jeux vidéos freemium?', choices=[('Non', 'None / Aucune'), ('<1', 'Less than 1 / Moins d\u2019une'), ('1-3', 'From 1 to 3 / De 1 à 3'), ('4-6', 'From 4 to 6 / De 4 à 6'), ('7-9', 'From 7 to 9 / De 7 à 9'), ('10+', '10 or more / 10 ou plus')]) likelyWTP = models.StringField( label='How likely are you to spend money on in-game purchases in freemium games? Quelle est la probabilité pour que vous dépensiez de l\u2019argent pour du contenu additionnel dans des jeux freemium?', choices=[('Très basse', 'Very unlikely / Très basse'), ('Basse', 'Unlikely / Basse'), ('Neutre', 'Neutral / Neutre'), ('Haute', 'Likely / Haute'), ('Très haute', 'Very likely / Très haute'), ('Je ne sais pas', 'Not sure / Je ne sais pas')]) max_amount_WTP = models.StringField( label='What is the maximum amount (euro) you are willing to spend on a single in-game purchase? Quel montant maximum (euro) êtes-vous prêt à dépenser pour un seul contenu additionnel dans un jeu freemium?', choices=[('0', '0'), ('<10', 'Less than 10 / Moins de 10'), ('10-20', 'From 10 to 20 / De 10 à 20'), ('20-30', 'From 20 to 30 / De 20 à 30'), ('30-40', 'From 30 to 40 / De 30 à 40'), ('40-50', 'From 40 to 50 / De 40 à 50'), ('50+', '50 or more / 50 ou plus')]) game_experience = models.IntegerField( label='On a scale of 1 to 10, how would you rate the overall gameplay experience? Sur une échelle de 1 à 10, comment noteriez-vous votre expérience avec le jeu Snake?', min=1, max=10) popupornot = models.BooleanField( label='Have a pop-up appeared on your screen while you were playing? Un pop-up est-il apparu sur votre écran pendant que vous jouiez?' ) popup_message = models.StringField( label='If yes, what was the content of the pop-up? Si oui, qu\u2019est-ce qui était écrit?', blank=True ) likelyWTP2 = models.StringField( label='How likely are you to spend money on in-game purchases in the game? Quelle est la probabilité pour que vous dépensiez de l\u2019argent pour du contenu additionnel dans le jeu?', choices=[('Très basse', 'Very unlikely / Très basse'), ('Basse', 'Unlikely / Basse'), ('Neutre', 'Neutral / Neutre'), ('Haute', 'Likely / Haute'), ('Très haute', 'Very likely / Très haute'), ('Je ne sais pas', 'Not sure / Je ne sais pas')]) max_amount_WTP2 = models.StringField( label='What is the maximum amount (euro) you are willing to spend on a single in-game purchase in this game? Quel montant maximum (euro) êtes-vous prêt à dépenser pour un seul contenu additionnel dans le jeu?', choices=[('0', '0'), ('<1', 'Less than 1 / Moins de 1'), ('1-2', 'From 1 to 2 / De 1 à 2'), ('2-3', 'From 2 to 3 / De 2 à 3'), ('3-4', 'From 3 to 4 / De 3 à 4'), ('4-5', 'From 4 to 5 / De 4 à 5'), ('5+', '5 or more / 5 ou plus')]) # PAGES class MyPage(Page): form_model = 'player' form_fields = ['gender', 'age', 'marital_status', 'Occupation', 'level_of_study', 'field_of_study'] class videogames_habits(Page): form_model = 'player' form_fields = ['videogames_frequency', 'videogames_duration', 'single_multiplayer', 'freemium_videogames_frequency', 'freemium_videogames_duration', 'likelyWTP', 'max_amount_WTP'] class SnakeGameInstructionsPage(Page): template_name = 'snake_game_instructions.html' class test(Page): timeout_seconds = 60 timer_text = "Time left to play / Temps restant pour jouer: " def is_displayed(player: Player): return player.id_in_group % 2 == 1 class test2(Page): timeout_seconds = 60 timer_text = "Time left to play / Temps restant pour jouer: " def is_displayed(player: Player): return player.id_in_group % 2 == 0 class Results(Page): form_model = 'player' form_fields = ['game_experience', 'popupornot', 'popup_message', 'likelyWTP2', 'max_amount_WTP2'] page_sequence = [MyPage, videogames_habits, SnakeGameInstructionsPage, test, test2, Results]