from otree.api import * import random import time doc = """ Tournament Round """ def problem_set(num, label, ans): for i in range(0, num): a = random.randint(10, 99) b = random.randint(10, 99) c = random.randint(10, 99) d = random.randint(10, 99) e = random.randint(10, 99) result = a + b + c + d + e string = '%2d + %2d + %2d + %2d + %2d= ? ' % (a, b, c, d, e) label.append(string) ans.append(result) return label, ans class C(BaseConstants): NAME_IN_URL = 'tour_round' PLAYERS_PER_GROUP = 10 label = [] ans = [] label, ans = problem_set(30, label, ans) NUM_ROUNDS = len(label) class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): current = subsession.round_number - 1 for p in subsession.get_players(): p.question = C.label[current] p.solution = C.ans[current] p.participant.tour_num_correct = 0 class Group(BaseGroup): pass class Player(BasePlayer): question = models.StringField() response = models.IntegerField(label='Please type in your solution:', min=50, max=500) solution = models.IntegerField() is_correct = models.BooleanField() def get_timeout_seconds1(player: Player): participant = player.participant if player.round_number == 1: # 这里之后得改过来 participant.expiry = time.time() + 175 return participant.expiry - time.time() def is_displayed1(player: Player): """only returns True if there is time left.""" return get_timeout_seconds1(player) > 0 # PAGES class MyPage(Page): form_model = "player" form_fields = ['response'] get_timeout_seconds = get_timeout_seconds1 is_displayed = is_displayed1 @staticmethod def before_next_page(player: Player, timeout_happened): participant = player.participant if player.response == player.solution: player.is_correct = True participant.tour_num_correct += 1 else: player.is_correct = False class Results(Page): @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS @staticmethod def vars_for_template(player: Player): return dict(round_players=player.in_all_rounds()) page_sequence = [MyPage, Results]