from otree.api import Currency as c, currency_range from . import models, myfunctions as mf from ._builtin import Page, WaitPage from .models import Constants import random,datetime class MyPage(Page): pass class StartWaitPage(WaitPage): def after_all_players_arrive(self): if self.subsession.round_number == 1: for p in self.group.get_players(): p.participant.vars['start_time'] = datetime.datetime.now() def is_displayed(self): return self.subsession.round_number == 1 class Introduction(Page): def vars_for_template(self): return { 'after_intro': False, 'labels': mf.listToStr(Constants.games_list[self.group.game_played]["labels"], last_sep=" y ") } def is_displayed(self): return self.subsession.round_number == 1 def before_next_page(self): if self.subsession.round_number == 1: self.player.participant.vars['start_time'] = datetime.datetime.now() class Guess(Page): form_model = models.Player form_fields = ['guess_value'] def vars_for_template(self): features = self.group.get_game_features() time_rem = self.player.participant.vars['time_rem'] return { 'stage': self.group.stage, 'decision_num': self.group.decision_num, 'is_final_stg': int(self.group.stage == Constants.num_stages), 'time_rem': time_rem['time'] - Constants.time_gap, # 'is_gap': time_rem['is_gap'], 'player_in_previous_rounds': self.player.in_previous_rounds(), 'player_label': features["labels"][self.player.id_in_group - 1], 'features': features, 'image_path': "BCNets/" + features['image_path'], } def is_displayed(self): time_rem = self.player.time_remaining() self.player.participant.vars['time_rem'] = time_rem return ((time_rem['stage'] == self.group.stage) and (time_rem['time'] > Constants.time_gap)) # return True class BtwStages(Page): form_model = models.Player def is_displayed(self): time_rem = self.player.time_remaining() self.player.participant.vars['time_rem'] = time_rem return ((time_rem['stage'] == self.group.stage) and (self.group.decision_num == Constants.rounds_per_stage)) #and (time_rem['time'] > 0)) def vars_for_template(self): features = self.group.get_game_features() time_rem = self.player.participant.vars['time_rem'] return { 'stage': self.group.stage, 'time_stage': time_rem['stage'], 'time_rem': time_rem['time'], 'player_in_previous_rounds': self.player.in_previous_rounds(), 'player_label': features["labels"][self.player.id_in_group - 1] } class ResultsWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == Constants.num_rounds def after_all_players_arrive(self): for player in self.group.get_players(): for stage in range(1, Constants.num_stages + 1): selfs = player.in_rounds(Constants.rounds_per_stage * (stage - 1) + 1, Constants.rounds_per_stage * stage) guess = False for p in selfs: if p.guess_value: guess = p.guess_value my_rand = random.uniform(Constants.min_guess, Constants.max_guess) p = selfs[Constants.rounds_per_stage - 1] if not guess: p.chosen_by_otree = True if stage == 1: p.stage_guess = my_rand else: p.stage_guess = prev_choice else: p.stage_guess = guess prev_choice = p.stage_guess self.group.set_payoffs() class ResultsSummary(Page): def is_displayed(self): return self.subsession.round_number == Constants.num_rounds def vars_for_template(self): pay_stage_num = self.group.get_players()[0].participant.vars['pay_stage_num'] features = self.group.get_game_features() return{ 'is_winner': self.player.is_winner, 'pay_stage_num': pay_stage_num, 'player_in_sel_rou': self.player.in_round(pay_stage_num * Constants.rounds_per_stage), 'features': features, 'image_path': "BCNets/" + features['image_path'], } class Results(Page): pass page_sequence = [Introduction, #StartWaitPage, Guess, BtwStages, ResultsWaitPage, ResultsSummary]