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_IncFM' # instructions_template = 'livepages/Introduction.html' players_per_group = 2 num_rounds = 1 # Zeitangaben Spiel len_total = 5 len_phase_1 = 40 time_investment = 1 round_num = 3 * time_investment # Payout Phase 1 Incumbent tolerates payout_entrant_invest_tolerate_1 = -300 payout_entrant_ninvest_tolerate_1 = 0 payout_incumbent_invest_tolerate_1 = 180 payout_incumbent_ninvest_tolerate_1 = 180 # Payout Phase 1 Incumbent fights payout_entrant_invest_fight_1 = -540 payout_entrant_ninvest_fight_1 = 0 payout_incumbent_invest_fight_1 = 60 payout_incumbent_ninvest_fight_1 = 120 # Payout Phase 2 payout_incumbent_invest_2 = 120 payout_incumbent_n_invest_2 = 180 payout_entrant_invest_2 = 120 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="Der Monopolist wählt die Strategie 'Investment Erschweren'. Sie wählen " "daraufhin die Strategie 'Investieren'. Wie hoch ist Ihre Auszahlung pro 60 Sekunden?") length_E1 = models.IntegerField(label="Für wie viele Runden müssen Sie die Strategie 'Investieren' wählen, um " "einen vollständigen Kapazitätsaufbau zu realisieren? (Zahl als Antwort)") #Fragen für erste Position strategy_E = models.IntegerField( label="Ihre Strategie als Antwort auf den Monopolisten in den ersten zwei Spielrunden war 'Nicht Investieren'. Können Sie den Markteintritt noch realisieren?", choices=[ [1, 'Ja'], [2, 'Nein'], ] ) # Necessary variables for Questions for Entrant payoff_I = models.IntegerField(min=None, label="Sie wählen die Strategie 'Investment Erschweren'. Daraufhin wählt der " "Entrant die Strategie 'Investieren'. Wie hoch ist Ihre Auszahlung pro 60 Sekunden?") length_I1 = models.IntegerField(label="Für wie viele Runden muss der Entrant die Strategie 'Investieren' wählen, um " "einen vollständigen Kapazitätsaufbau zu realisieren? (Zahl als Antwort)") #Fragen für erste Position strategy_I = models.IntegerField( label="Der Entrant hat für die ersten zwei Spielrunden die Strategie 'Nicht Investieren' gewählt. Kann der Entrant den Markteintritt noch realisieren?", choices=[ [1, 'Ja'], [2, 'Nein'], ] ) #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, FirstMover=player.session.FirstMover ) class Questions_E(Page): @staticmethod def is_displayed(player): if player.session.FirstMover == 1: return False else: return player.id_in_group == 1 form_model = 'player' form_fields = ['payoff_E', 'length_E1', 'strategy_E'] def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1, FirstMover=player.session.FirstMover ) class Questions_I(Page): @staticmethod def is_displayed(player): if player.session.FirstMover == 1: return False else: return player.id_in_group == 2 form_model = 'player' form_fields = ['payoff_I', 'length_I1', 'strategy_I'] def vars_for_template(player: Player): return dict( GameNumber=player.session.GameNumber + 1, FirstMover=player.session.FirstMover ) class Results_E(Page): @staticmethod def is_displayed(player): if player.session.FirstMover == 1: return False else: return player.id_in_group == 1 @staticmethod def vars_for_template(player: Player): if player.payoff_E == -540: player.right_answers = player.right_answers + 1 if player.length_E1 == 1: player.right_answers = player.right_answers + 1 if player.strategy_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), GameNumber=player.session.GameNumber + 1 ) class Results_I(Page): @staticmethod def is_displayed(player): if player.session.FirstMover == 1: return False else: return player.id_in_group == 2 @staticmethod def vars_for_template(player: Player): if player.payoff_I == 60: player.right_answers = player.right_answers + 1 if player.length_I1 == 1: player.right_answers = player.right_answers + 1 if player.strategy_I == 1: player.right_answers = player.right_answers + 1 return dict( payoff_I=player.payoff_I, length_I1=player.length_I1, strategy_I=trafo(player.strategy_I), GameNumber=player.session.GameNumber + 1 ) def trafo(variable): if variable == 1: return "Ja" else: return "Nein" 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 def after_all_players_arrive(subsession: Subsession): session = subsession.session session.GameNumber = session.GameNumber + 1 session.FirstMover = session.FirstMover + 1 page_sequence = [ Introduction, Questions_E, Questions_I, Results_I, Results_E, Ending, Ending_WaitPage ]