import itertools import time from datetime import datetime import schedule from otree.api import * c = Currency doc = """ Your app description """ # Store the following variables in an extra dictionary to see the visualization time_started = 0 time_list = [0] time_inc_action = [''] time_ent_action = [''] time_inc_payoff = [0] time_ent_payoff = [0] time_flag = [0] time_ent_invest_until_in = [60] job_idx = itertools.count() jobs = [] class Constants(BaseConstants): name_in_url = 'chain_store_live2.1' # 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): game_len_ges = models.IntegerField(label="Frage 1: Wie viele Sekunden beträgt ein Spiel, d.h. Phase 1 + Phase 2 (Zahl als Antwort)?") game_len_phase1a = models.IntegerField(label="Frage 2: Wie lange dauert Phase 1 in Sekunden, wenn der Entrant in Phase 1 seine Kapazität nicht vollständig aufgebaut hat " " (Zahl als Antwort)?") game_len_phase1b = models.IntegerField(label="Frage 3: Der Entrant hat für den Kapazitätsaufbau 100 Sekunden benötigt (--> 40s 'Nicht Investieren', 60s 'Investieren'). " "Wie lange dauert entsprechend Phase 2 in Sekunden (Zahl als Antwort)?") game_payoff = models.IntegerField(min=None, label="Frage 4: Wie hoch ist die Gesamtauszahlung des Entrants, wenn dieser nie die Strategie 'Investieren' wählen würde" " (Zahl als Antwort)?") game_payoff2 = models.IntegerField(label="Frage 5: Kann die Gesamtauszahlung des Entrants auch negativ werden (z.B. wenn der Monopolist" " das Investment erschwert)? D.h. kann es für den Entrant auch ein Nachteil sein, in Phase 1 zu investieren?", choices=[ [1, 'Ja'], [2, 'Nein'], ], widget=widgets.RadioSelect ) attention_check = models.StringField(label="Frage 6: Bitte wählen sie in den unten stehenden Optionen 'Vorteil für den Entrant' aus", choices=['Vorteil für den Monopolisten', 'Vorteil für den Entrant', 'Kein Vorteil'], widget=widgets.RadioSelect ) #Richtige Antwort Incumbent und Entrant right_answers = models.IntegerField(initial=0) class Instructions1(Page): pass #timeout_seconds = 300 class Instructions2(Page): def vars_for_template(player: Player): return dict( len_phase2 = Constants.len_total - Constants.len_phase_1 ) class Instructions3(Page): pass class Instructions4(Page): pass def set_GameNumber(subsession: Subsession): session = subsession.session session.GameNumber = 0 print(session.vars) class Instructions4_WaitPage(WaitPage): wait_for_all_groups = True after_all_players_arrive = set_GameNumber class Kontrollfragen(Page): form_model = 'player' form_fields = ['game_len_ges', 'game_len_phase1a', 'game_len_phase1b', 'game_payoff', 'game_payoff2', 'attention_check'] class Kontrollantworten(Page): @staticmethod def vars_for_template(player: Player): if player.game_len_ges == 300: player.right_answers = player.right_answers + 1 if player.game_len_phase1a == 180: player.right_answers = player.right_answers + 1 if player.game_len_phase1b == 200: player.right_answers = player.right_answers + 1 if player.game_payoff == 0 or player.game_payoff == 700: player.right_answers = player.right_answers + 1 if player.game_payoff2 == 1: player.right_answers = player.right_answers + 1 return dict( game_len_ges=player.game_len_ges, game_len_phase1a=player.game_len_phase1a, game_len_phase1b=player.game_len_phase1b, game_payoff=player.game_payoff, game_payoff2=trafo(player.game_payoff2), ) def trafo(variable): if variable == 1: return "Ja" else: return "Nein" class Instructions5(Page): pass class Instructions5_WaitPage(WaitPage): wait_for_all_groups = True page_sequence = [ Instructions1, Instructions2, Instructions3, Instructions4, Instructions4_WaitPage, Kontrollfragen, Kontrollantworten, Instructions5_WaitPage, ]