import itertools import time from datetime import datetime import schedule from otree.api import * c = Currency doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'questions_Continuous' # instructions_template = 'livepages/Introduction.html' players_per_group = 2 num_rounds = 1 # Zeitangaben Spiel len_total = 5*60 len_phase_1 = 3*60 time_investment = 60 # Payout Phase 1 Incumbent tolerates payout_entrant_invest_tolerate_1 = -5 payout_entrant_ninvest_tolerate_1 = 0 payout_incumbent_invest_tolerate_1 = 3 payout_incumbent_ninvest_tolerate_1 = 3 # Payout Phase 1 Incumbent fights payout_entrant_invest_fight_1 = -9 payout_entrant_ninvest_fight_1 = 0 payout_incumbent_invest_fight_1 = 1 payout_incumbent_ninvest_fight_1 = 2 # Payout Phase 2 payout_incumbent_invest_2 = 2 payout_incumbent_n_invest_2 = 3 payout_entrant_invest_2 = 2 payout_entrant_n_invest_2 = 0 class Subsession(BaseSubsession): pass # Variables for the whole group # Those variables are transferred into Excel by default class Group(BaseGroup): pass class Player(BasePlayer): # Necessary variables for Questions for Entrant payoff_E = models.IntegerField(min=None, label="Sie wählen die Strategie 'Investieren'. Der Monopolist wählt die Strategie" " 'Investment Erschweren'. Wie hoch ist Ihre Auszahlung pro Sekunde?") length_E1 = models.IntegerField(label="Wie lange müssen Sie die Strategie 'Investieren' in Sekunden wählen, um " "einen vollständigen Kapazitätsaufbau zu realisieren? (Antwort in Sekunden)") #Fragen für erste Position strategy_E = models.IntegerField( label="Sie haben für die ersten 150 Sekunden die Strategie 'Nicht Investieren' gewählt. Können Sie den Markteintritt noch realisieren?", choices=[ [1, 'Ja'], [2, 'Nein'], ]) reputation_E = models.IntegerField( label="Ist Ihre Auszahlung insgesamt höher, wenn 1. Der Monopolist erschwert und Sie treten in den Markt ein ODER 2. Sie treten nicht in den Markt ein?", choices=[ [1, '1. Der Monopolist erschwert und Sie treten in den Markt ein'], [2, '2. Sie treten nicht in den Markt ein'], ]) # Necessary variables for Questions for Entrant payoff_I = models.IntegerField(min=None, label="Der Entrant hat die Strategie 'Investieren' gewählt. Sie wählen die Strategie" " 'Investment Erschweren'. Wie hoch ist Ihre Auszahlung pro Sekunde?") length_I1 = models.IntegerField(label="Wie lange muss der Entrant die Strategie 'Investieren' wählen, um " "einen vollständigen Kapazitätsaufbau zu realisieren? (Antwort in Sekunden)") #Fragen für erste Position strategy_I = models.IntegerField( label="Der Entrant hat für die ersten 150 Sekunden die Strategie 'Nicht Investieren' gewählt. Kann der Entrant den Markteintritt noch realisieren?", choices=[ [1, 'Ja'], [2, 'Nein'], ] ) reputation_I = models.IntegerField( label="Ist Ihre Auszahlung insgesamt höher, wenn 1. Sie Erschweren und der Entrant tritt nicht in den Markt ein ODER 2. Sie Dulden und der Entrant tritt in den Markt ein?", choices=[ [1, '1. Sie Erschweren und der Entrant tritt nicht in den Markt ein'], [2, '2. Sie Dulden und der Entrant tritt in den Markt ein'], ]) #Richtige Antwort Incumbent und Entrant right_answers = models.IntegerField(initial=0) class Introduction(Page): def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1 ) class Questions_E(Page): @staticmethod def is_displayed(player): return player.id_in_group == 1 form_model = 'player' form_fields = ['payoff_E', 'length_E1', 'strategy_E', 'reputation_E'] def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1 ) class Questions_I(Page): @staticmethod def is_displayed(player): return player.id_in_group == 2 form_model = 'player' form_fields = ['payoff_I', 'length_I1', 'strategy_I', 'reputation_I'] def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1 ) class Results_E(Page): @staticmethod def is_displayed(player): return player.id_in_group == 1 @staticmethod def vars_for_template(player: Player): if player.payoff_E == -9: player.right_answers = player.right_answers + 1 if player.length_E1 == 60: player.right_answers = player.right_answers + 1 if player.strategy_E == 2: player.right_answers = player.right_answers + 1 if player.reputation_E == 1: player.right_answers = player.right_answers + 1 return dict( payoff_E=player.payoff_E, length_E1=player.length_E1, strategy_E=trafo(player.strategy_E), reputation_E=player.reputation_E, GameNumber=player.session.GameNumber + 1 ) class Results_I(Page): @staticmethod def is_displayed(player): return player.id_in_group == 2 @staticmethod def vars_for_template(player: Player): if player.payoff_I == 1: player.right_answers = player.right_answers + 1 if player.length_I1 == 60: player.right_answers = player.right_answers + 1 if player.strategy_I == 2: player.right_answers = player.right_answers + 1 if player.reputation_I == 1: player.right_answers = player.right_answers + 1 return dict( payoff_I=player.payoff_I, length_I1=player.length_I1, reputation_I=player.reputation_I, strategy_I=trafo(player.strategy_I), GameNumber=player.session.GameNumber + 1 ) def trafo(variable): if variable == 1: return "Ja" else: return "Nein" def get_GameNumber(subsession: Subsession): session = subsession.session return session.GameNumber def set_GameNumber(subsession: Subsession): session = subsession.session session.GameNumber = session.GameNumber + 1 print(session.vars) class Ending(Page): def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1 ) class Ending_WaitPage(WaitPage): wait_for_all_groups = True after_all_players_arrive = set_GameNumber page_sequence = [ Introduction, Questions_E, Questions_I, Results_I, Results_E, Ending, Ending_WaitPage ]