from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class Ready(Page): def is_displayed(self): return self.round_number == 1 def before_next_page(self): import time # user has 5 minutes to complete as many pages as possible self.participant.vars['expiry'] = time.time() + Constants.t * 60 class Encryption(Page): timer_text = '残り時間:' def get_timeout_seconds(self): import time return self.participant.vars['expiry'] - time.time() def is_displayed(self): return self.get_timeout_seconds() > 2 def app_after_this_page(self, upcoming_apps): if self.get_timeout_seconds() < 0: return upcoming_apps[0] def vars_for_template(self): self.player.total_payoff = round(sum( [self.player.in_round(i).payoff for i in range(1, self.round_number+1)] ), 0) self.participant.vars['score'] = self.player.total_payoff shuffled_letter = random.sample(Constants.letter, len(Constants.letter)) numbers = [ random.randint(100, 999) for i in range(len(Constants.letter)) ] # problemをここ限りにする場合: set_problem で player.prob に入れておかない処理 problem = random.sample(Constants.letter, 3) dict_letter = dict( zip(shuffled_letter, numbers) ) # problemをここ限りにする場合: set_problem で player.prob に入れておかない処理 self.player.corr_ans1 = dict_letter[ problem[0] ] self.player.corr_ans2 = dict_letter[ problem[1] ] self.player.corr_ans3 = dict_letter[ problem[2] ] return dict( chars = shuffled_letter, codes = numbers, period = self.round_number, prob = problem ) form_model = 'player' form_fields = ['ans1', 'ans2', 'ans3'] def before_next_page(self): self.player.score_calc() page_sequence = [Ready, Encryption]