from otree.api import Currency as c, currency_range, SubmissionMustFail from . import pages from ._builtin import Bot from .models import Constants class PlayerBot(Bot): cases = [ {'type': 'all_wrong', 'has_seen_final': False}, {'type': 'all_right', 'has_seen_final': False} ] def play_round(self): case = self.case solution = self.player.matrix_solution if not self.player.participant.vars['finished'] and not self.player.participant.vars['finished_too_many_wrong']: # Submissions don't fail; the person simply gets an increase in their wrong guesses count # yield SubmissionMustFail(pages.Task, {'solution_guess': solution - 1}) if case['type'] == 'all_right': assert self.player.participant.vars['finished'] == False yield (pages.Task, {'solution_guess': solution}) if case['type'] == 'all_wrong': assert self.player.participant.vars['finished'] == False yield (pages.Task, {'solution_guess': solution - 1}) total_tasks = self.session.config['total_tasks_per_session'] if self.player.correct_guesses == total_tasks and not case['has_seen_final']: yield (pages.FinalPage) case['has_seen_final'] = True assert self.player.participant.vars['finished'] == True # If total_tasks == 0, then one cannot submit wrong answers and must go on... if total_tasks > 0: assert case['type'] == 'all_right' if self.player.wrong_guesses > total_tasks and not case['has_seen_final']: yield (pages.FinalPage) case['has_seen_final'] = True assert self.player.participant.vars['finished_too_many_wrong'] == True assert case['type'] == 'all_wrong'