import itertools import time from otree.api import * class Constants(BaseConstants): name_in_url = "war_of_attrition_intro" players_per_group = None num_rounds = 1 len = 100 starting_money = 100 payout_stay = -1 payout_opp_quits = 80 commitment_len = 55 class Subsession(BaseSubsession): pass class Group(BaseGroup): p1_action = models.FloatField() p2_action = models.FloatField() flag = models.FloatField(initial=1) game_ended = models.BooleanField(initial=False) game_started = models.BooleanField(initial=False) game_started_at = models.StringField(initial=0) game_ended_at = models.StringField(initial=0) last_payout_update = models.StringField(initial="0") class Player(BasePlayer): # Necessary variables for Questions payoff_test = models.IntegerField( label="Wie hoch ist deine sekündliche Auszahlung, wenn beide Spieler im Spiel bleiben?") payoff_final = models.IntegerField( label="Wie hoch ist die einmalige Bonuszahlung, wenn du im Spiel bleibst und dein Gegner aussteigt?") len_test = models.IntegerField( label = "Wie viele Sekunden dauert eine Spielrunde maximal?") com_test = models.IntegerField( label = "Wie viele Sekunden dauert die Blockade der Austrittsoption an, wenn ein Spieler die Selbstbindung verwendet?" ) # Variable to examine the amount of right answers right_answers = models.IntegerField(initial=0) class Instructions1(Page): pass class Instructions2_1(Page): form_model = 'player' form_fields = ['payoff_test', 'payoff_final', 'len_test', 'com_test'] class Instructions2_2(Page): @staticmethod def vars_for_template(player: Player): return dict( payoff_test=player.payoff_test, payoff_final=player.payoff_final, len_test=player.len_test, com_test=player.com_test ) @staticmethod def vars_for_template(player: Player): if player.payoff_test == -1: player.right_answers = player.right_answers + 1 if player.payoff_final == 80: player.right_answers = player.right_answers + 1 if player.len_test == 100: player.right_answers = player.right_answers + 1 if player.com_test == 55: player.right_answers = player.right_answers + 1 def custom_export(players): # header row yield ['session', 'participant_code', 'id_in_group', "answer_q1", 'answer_q2', 'answer_q3', "answer_q4", "right_answers"] # for loop to get a row for each player for p in players: participant = p.participant session = p.session yield [session.code, participant.code, p.payoff_test, p.payoff_final, p.len_test, p.com_test, p.right_answers] page_sequence = [ Instructions1, Instructions2_1, Instructions2_2 ]