from otree.api import * import random import time doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'Encryption' players_per_group = None num_rounds = 2 ################################################# letter = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ] t = 7 # 制限時間(分) instructions_WEDR = 'Decision2/EncryptionInstructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): ans1 = models.IntegerField(min=100, max=999) ans2 = models.IntegerField(min=100, max=999) ans3 = models.IntegerField(min=100, max=999) # 正解 corr_ans1 = models.IntegerField(min=100, max=999) corr_ans2 = models.IntegerField(min=100, max=999) corr_ans3 = models.IntegerField(min=100, max=999) total_payoff = models.CurrencyField() #Page class Ready(Page): @staticmethod def is_displayed(player:Player): return player.round_number == 1 @staticmethod def before_next_page(player,timeout_happened): import time # user has 5 minutes to complete as many pages as possible player.participant.vars['expiry'] = time.time() + Constants.t * 60 # set a timer class Encryption(Page): timer_text = '残り時間:' @staticmethod def get_timeout_seconds(player): import time return player.participant.vars["expiry"] - time.time() @staticmethod def vars_for_template(player:Player): player.participant.vars['expiry'] - time.time() import random player.total_payoff = round(sum( [player.in_round(i).payoff for i in range(1, player.round_number+1)] ), 0) player.participant.vars['score'] = 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 に入れておかない処理 player.corr_ans1 = dict_letter[ problem[0] ] player.corr_ans2 = dict_letter[ problem[1] ] player.corr_ans3 = dict_letter[ problem[2] ] return dict( chars = shuffled_letter, codes = numbers, period = player.round_number, prob = problem ) form_model = 'player' form_fields = ['ans1', 'ans2', 'ans3'] @staticmethod def before_next_page(player:Player,timeout_happened): if player.corr_ans1 == player.ans1: player.payoff += 1 if player.corr_ans2 == player.ans2: player.payoff += 1 if player.corr_ans3 == player.ans3: player.payoff += 1 player.total_payoff = round(sum( [player.in_round(i).payoff for i in range(1, player.round_number+1)] ), 0) player.participant.vars['score'] = int(player.total_payoff) page_sequence = [Ready,Encryption]