from otree.api import Currency as c, currency_range from ._builtin import Page from .models import Constants import datetime, json, time import random import math import numpy as np class Instructions(Page): form_model = 'player' # timeout_seconds = 120 def vars_for_template(player): if player.participant.vars['treatment_order'][0] == 2 and player.participant.vars['treatment_order'][1] == 3 and player.participant.vars['treatment_order'][2] == 1: player.participant.vars['round'] = 3 player.participant.vars['nonogram'] = player.participant.vars['round3_nonogram'] player.participant.vars['nonogram_sol'] = player.participant.vars['round3_nonogram_sol'] player.participant.vars['nonogram_green'] = player.participant.vars['round3_nonogram_green'] player.participant.vars['nonogram_gray'] = player.participant.vars['round3_nonogram_gray'] player.participant.vars['adding_numbers'] = player.participant.vars['round3_adding_numbers'] if player.participant.vars['treatment_order'][0] == 2 and player.participant.vars['treatment_order'][1] == 1 and player.participant.vars['treatment_order'][2] == 3: player.participant.vars['round'] = 2 player.participant.vars['nonogram'] = player.participant.vars['round2_nonogram'] player.participant.vars['nonogram_sol'] = player.participant.vars['round2_nonogram_sol'] player.participant.vars['nonogram_green'] = player.participant.vars['round2_nonogram_green'] player.participant.vars['nonogram_gray'] = player.participant.vars['round2_nonogram_gray'] player.participant.vars['adding_numbers'] = player.participant.vars['round2_adding_numbers'] if player.participant.vars['treatment_order'][0] == 3 and player.participant.vars['treatment_order'][1] == 2 and player.participant.vars['treatment_order'][2] == 1: player.participant.vars['round'] = 3 player.participant.vars['nonogram'] = player.participant.vars['round3_nonogram'] player.participant.vars['nonogram_sol'] = player.participant.vars['round3_nonogram_sol'] player.participant.vars['nonogram_green'] = player.participant.vars['round3_nonogram_green'] player.participant.vars['nonogram_gray'] = player.participant.vars['round3_nonogram_gray'] player.participant.vars['adding_numbers'] = player.participant.vars['round3_adding_numbers'] if player.participant.vars['treatment_order'][0] == 3 and player.participant.vars['treatment_order'][1] == 1 and player.participant.vars['treatment_order'][2] == 2: player.participant.vars['round'] = 2 player.participant.vars['nonogram'] = player.participant.vars['round2_nonogram'] player.participant.vars['nonogram_sol'] = player.participant.vars['round2_nonogram_sol'] player.participant.vars['nonogram_green'] = player.participant.vars['round2_nonogram_green'] player.participant.vars['nonogram_gray'] = player.participant.vars['round2_nonogram_gray'] player.participant.vars['adding_numbers'] = player.participant.vars['round2_adding_numbers'] return dict( round=player.participant.vars['round'], ) def js_vars(self): return { 'round': self.participant.vars['round'], } def before_next_page(self): self.participant.vars['no_distraction_sssss'] = time.time() def is_displayed(self): return self.round_number == 1 def get_timeout_seconds(player): if player.round_number == 1: return 600 if player.round_number != 1: return 600 - player.participant.vars['no_distraction_time_spent'] class Game1(Page): form_model = 'player' form_fields = ['no_distraction_points', 'no_distraction_total_wrong', 'no_distraction_total_right', 'no_distraction_wrong_green', 'no_distraction_wrong_gray', 'no_distraction_right_green', 'no_distraction_right_gray', 'no_distraction_time_between_moves', 'no_distraction_board_history', 'no_distraction_solve_order', 'no_distraction_score_on_display', 'no_distraction_game_finished'] get_timeout_seconds = get_timeout_seconds def is_displayed(player): return get_timeout_seconds(player) > 0 def vars_for_template(player): for i in range(1, 4): if player.round_number == i: player.participant.vars['game_number'] = i player.participant.vars['row'] = player.participant.vars['nonogram'][i - 1][0] player.participant.vars['column'] = player.participant.vars['nonogram'][i - 1][1] player.participant.vars['solution_0'] = player.participant.vars['nonogram_sol'][i - 1][0] player.participant.vars['solution_1'] = player.participant.vars['nonogram_sol'][i - 1][1] player.participant.vars['solution_2'] = player.participant.vars['nonogram_sol'][i - 1][2] player.participant.vars['solution_3'] = player.participant.vars['nonogram_sol'][i - 1][3] player.participant.vars['solution_4'] = player.participant.vars['nonogram_sol'][i - 1][4] player.participant.vars['solution_5'] = player.participant.vars['nonogram_sol'][i - 1][5] player.participant.vars['solution_6'] = player.participant.vars['nonogram_sol'][i - 1][6] player.participant.vars['solution_7'] = player.participant.vars['nonogram_sol'][i - 1][7] player.participant.vars['solution_8'] = player.participant.vars['nonogram_sol'][i - 1][8] player.participant.vars['solution_9'] = player.participant.vars['nonogram_sol'][i - 1][9] return dict( game_number=player.participant.vars['game_number'], r=[player.participant.vars['row'][h] for h in range(0, 10)], c=[player.participant.vars['column'][h] for h in range(0, 10)], sol_0=[player.participant.vars['solution_0'][h] for h in range(0, 10)], sol_1=[player.participant.vars['solution_1'][h] for h in range(0, 10)], sol_2=[player.participant.vars['solution_2'][h] for h in range(0, 10)], sol_3=[player.participant.vars['solution_3'][h] for h in range(0, 10)], sol_4=[player.participant.vars['solution_4'][h] for h in range(0, 10)], sol_5=[player.participant.vars['solution_5'][h] for h in range(0, 10)], sol_6=[player.participant.vars['solution_6'][h] for h in range(0, 10)], sol_7=[player.participant.vars['solution_7'][h] for h in range(0, 10)], sol_8=[player.participant.vars['solution_8'][h] for h in range(0, 10)], sol_9=[player.participant.vars['solution_9'][h] for h in range(0, 10)], ) def js_vars(self): if self.round_number == 1: return { 'no_distraction_score': 0, } if self.round_number != 1: return { 'no_distraction_score': self.participant.vars['no_distraction_points'], } def before_next_page(self): self.participant.vars['no_distraction_points'] = self.player.no_distraction_score_on_display self.player.no_distraction_time_spent = math.floor(time.time() - self.participant.vars['no_distraction_sssss']) self.participant.vars['no_distraction_time_spent'] = self.player.no_distraction_time_spent for i in range(1, 4): if self.player.round_number == i: self.player.no_distraction_total_green = self.participant.vars['nonogram_green'][i-1] self.player.no_distraction_total_gray = self.participant.vars['nonogram_gray'][i-1] class blank(Page): form_model = 'player' timeout_seconds = 0.01 def is_displayed(player): return player.round_number != 3 class adding_numbers_instructions(Page): form_model = 'player' timeout_seconds = 1 def is_displayed(player): return player.round_number == 3 def before_next_page(self): self.participant.vars['add1_start'] = time.time() class Adding_numbers1(Page): form_model = 'player' form_fields = ['no_distraction_adding_numbers1_correct'] timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['add1'] = self.participant.vars['adding_numbers'][0] return dict( n=[self.participant.vars['add1'][h] for h in range(0, 10)], ) def before_next_page(self): self.player.no_distraction_adding_numbers1_time_spent = math.floor(time.time() - self.participant.vars['add1_start']) self.participant.vars['add2_start'] = time.time() def js_vars(self): return { 'n': [self.participant.vars['add1'][h] for h in range(0, 10)], } class Adding_numbers2(Page): form_model = 'player' form_fields = ['no_distraction_adding_numbers2_correct'] timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['add2'] = self.participant.vars['adding_numbers'][1] return dict( n=[self.participant.vars['add2'][h] for h in range(0, 10)], ) def before_next_page(self): self.player.no_distraction_adding_numbers2_time_spent = math.floor(time.time() - self.participant.vars['add2_start']) self.participant.vars['add3_start'] = time.time() def js_vars(self): return { 'n': [self.participant.vars['add2'][h] for h in range(0, 10)], } class Adding_numbers3(Page): form_model = 'player' form_fields = ['no_distraction_adding_numbers3_correct'] timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['add3'] = self.participant.vars['adding_numbers'][2] return dict( n=[self.participant.vars['add3'][h] for h in range(0, 10)], ) def before_next_page(self): self.player.no_distraction_adding_numbers3_time_spent = math.floor(time.time() - self.participant.vars['add3_start']) self.participant.vars['add4_start'] = time.time() def js_vars(self): return { 'n': [self.participant.vars['add3'][h] for h in range(0, 10)], } class Adding_numbers4(Page): form_model = 'player' form_fields = ['no_distraction_adding_numbers4_correct'] timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['add4'] = self.participant.vars['adding_numbers'][3] return dict( n=[self.participant.vars['add4'][h] for h in range(0, 10)], ) def before_next_page(self): self.player.no_distraction_adding_numbers4_time_spent = math.floor(time.time() - self.participant.vars['add4_start']) self.participant.vars['add5_start'] = time.time() def js_vars(self): return { 'n': [self.participant.vars['add4'][h] for h in range(0, 10)], } class Adding_numbers5(Page): form_model = 'player' form_fields = ['no_distraction_adding_numbers5_correct'] timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['add5'] = self.participant.vars['adding_numbers'][4] return dict( n=[self.participant.vars['add5'][h] for h in range(0, 10)], ) def before_next_page(self): self.player.no_distraction_adding_numbers5_time_spent = math.floor(time.time() - self.participant.vars['add5_start']) def js_vars(self): return { 'n': [self.participant.vars['add5'][h] for h in range(0, 10)], } class results(Page): form_model = 'player' #timeout_seconds = 60 def is_displayed(player): return player.round_number == 3 def vars_for_template(self): self.participant.vars['nonogram_points_no_distraction'] = self.participant.vars['no_distraction_points'] if self.player.no_distraction_adding_numbers1_correct == 1: self.participant.vars['add1_correct'] = 1 else: self.participant.vars['add1_correct'] = 0 if self.player.no_distraction_adding_numbers2_correct == 1: self.participant.vars['add2_correct'] = 1 else: self.participant.vars['add2_correct'] = 0 if self.player.no_distraction_adding_numbers3_correct == 1: self.participant.vars['add3_correct'] = 1 else: self.participant.vars['add3_correct'] = 0 if self.player.no_distraction_adding_numbers4_correct == 1: self.participant.vars['add4_correct'] = 1 else: self.participant.vars['add4_correct'] = 0 if self.player.no_distraction_adding_numbers5_correct == 1: self.participant.vars['add5_correct'] = 1 else: self.participant.vars['add5_correct'] = 0 self.participant.vars['total_correct_adding_no_distraction'] = self.participant.vars['add1_correct'] + self.participant.vars['add2_correct'] \ + self.participant.vars['add3_correct'] + self.participant.vars['add4_correct'] + self.participant.vars['add5_correct'] self.player.total_wrong_adding_no_distraction = 5 - self.participant.vars['total_correct_adding_no_distraction'] self.participant.vars['total_wrong_adding_no_distraction'] = self.player.total_wrong_adding_no_distraction self.participant.vars['point_deduction_adding_no_distraction'] = 5*self.participant.vars['total_wrong_adding_no_distraction'] self.participant.vars['final_points_no_distraction'] = self.participant.vars['no_distraction_points'] - 5 * (5-self.participant.vars['total_correct_adding_no_distraction']) if self.participant.vars['final_points_no_distraction'] > 0: self.player.final_payoff_no_distraction = self.participant.vars['final_points_no_distraction'] / 10 if self.participant.vars['final_points_no_distraction'] <= 0: self.player.final_payoff_no_distraction = 0 self.participant.vars['final_payoff_no_distraction'] = self.player.final_payoff_no_distraction return dict( nonogram_points_no_distraction=self.participant.vars['nonogram_points_no_distraction'], point_deduction_adding_no_distraction=self.participant.vars['point_deduction_adding_no_distraction'], final_points_no_distraction=self.participant.vars['final_points_no_distraction'], total_correct_adding_no_distraction = self.participant.vars['total_correct_adding_no_distraction'], final_payoff_no_distraction = self.participant.vars['final_payoff_no_distraction'], ) def js_vars(self): for i in range(1, 4): if self.round_number == i: return { 'nonogram_points_no_distraction': self.participant.vars['nonogram_points_no_distraction'], 'point_deduction_adding_no_distraction': self.participant.vars['point_deduction_adding_no_distraction'], 'final_points_no_distraction': self.participant.vars['final_points_no_distraction'], 'total_correct_adding_no_distraction': self.participant.vars['total_correct_adding_no_distraction'], 'final_payoff_no_distraction': self.participant.vars['final_payoff_no_distraction'], } class survey(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6'] def is_displayed(player): return player.round_number == 3 def app_after_this_page(self, upcoming_apps): if self.participant.vars['treatment_order'][0] == 2 and self.participant.vars['treatment_order'][1] == 3 and self.participant.vars['treatment_order'][2] == 1: return 'multitasking_choice_ver2' #return 'multitasking_final_survey' if self.participant.vars['treatment_order'][0] == 2 and self.participant.vars['treatment_order'][1] == 1 and self.participant.vars['treatment_order'][2] == 3: return 'multitasking_interruption_forced_a' if self.participant.vars['treatment_order'][0] == 3 and self.participant.vars['treatment_order'][1] == 2 and self.participant.vars['treatment_order'][2] == 1: return 'multitasking_choice_ver2' #return 'multitasking_final_survey' if self.participant.vars['treatment_order'][0] == 3 and self.participant.vars['treatment_order'][1] == 1 and self.participant.vars['treatment_order'][2] == 2: return 'multitasking_podcast_b' page_sequence = [ Instructions, Game1, blank, adding_numbers_instructions, Adding_numbers1, Adding_numbers2, Adding_numbers3, Adding_numbers4, Adding_numbers5, results, survey, ]