from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import matplotlib.pyplot as plt from matplotlib.widgets import Slider author = 'Y.Yuminoke' doc = """ スライダーを指示されている所定の位置に動かしてください。制限時間は2分です。 時間内に正しい位置に動かすことのできたスライダーの数に応じて報酬が支払われます。 """ class Constants(BaseConstants): name_in_url = 'my_slider' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): def set_slider_goals(self): for i in range(1): n = i + 1 self.session.vars['slider_goals'+ str(n)] = [] for j in range(1): n = j + 1 for i in range(30): self.session.vars['slider_goals' + str(n)].append(random.randint(0, 100)) print("For round ", str(n), 'the slider goals are set to: ', self.session.vars['slider_goals' + str(n)], '\n') def ensure_random_goals(self): print('Running ensure_random_goals now', '\n') for p in range(len(self.get_players())): k = p+1 controller = self.get_player_by_id(k) n = 1 controller_slider_answers = [controller.in_round(n).slider1, controller.in_round(n).slider2, controller.in_round(n).slider3, controller.in_round(n).slider4, controller.in_round(n).slider5, controller.in_round(n).slider6, controller.in_round(n).slider7, controller.in_round(n).slider8, controller.in_round(n).slider9, controller.in_round(n).slider10, controller.in_round(n).slider11, controller.in_round(n).slider12, controller.in_round(n).slider13, controller.in_round(n).slider14, controller.in_round(n).slider15, controller.in_round(n).slider16, controller.in_round(n).slider17, controller.in_round(n).slider18, controller.in_round(n).slider19, controller.in_round(n).slider20, controller.in_round(n).slider21, controller.in_round(n).slider22, controller.in_round(n).slider23, controller.in_round(n).slider24, controller.in_round(n).slider25, controller.in_round(n).slider26, controller.in_round(n).slider27, controller.in_round(n).slider28, controller.in_round(n).slider29, controller.in_round(n).slider30] print("For round ", str(n), 'the orginal sliders are set to: ', controller_slider_answers) print("self.session.vars[slider_goals] are:", self.session.vars['slider_goals' + str(n)], '\n') for j in range(30): if self.session.vars['slider_goals' + str(n)][j] == controller_slider_answers[j]: if self.session.vars['slider_goals' + str(n)][j] > 95: self.session.vars['slider_goals' + str(n)][j] = (self.session.vars['slider_goals' + str(n)][j] - 5) print("Subtracted 5 for [", j, ']. controller_slider_answers was', controller_slider_answers[j], 'so we reset the goal to: ', self.session.vars['slider_goals' + str(n)][j], '\n') else: self.session.vars['slider_goals' + str(n)][j] = (self.session.vars['slider_goals' + str(n)][j] + 5) print("Added 5 for [", j, ']. controller_slider_answers was', controller_slider_answers[j], 'so we reset the goal to: ', self.session.vars['slider_goals' + str(n)][j], '\n') def check_slider_answers(self): print('\n\nFOR ROUND', self.round_number) for p in range(len(self.get_players())): k = p+1 controller = self.get_player_by_id(k) controller_slider_answers = [controller.slider1, controller.slider2, controller.slider3, controller.slider4, controller.slider5, controller.slider6, controller.slider7, controller.slider8, controller.slider9, controller.slider10, controller.slider11, controller.slider12, controller.slider13, controller.slider14, controller.slider15, controller.slider16, controller.slider17, controller.slider18, controller.slider19, controller.slider20, controller.slider21, controller.slider22, controller.slider23, controller.slider24, controller.slider25, controller.slider26, controller.slider27, controller.slider28, controller.slider29, controller.slider30] for i in range(30): if controller_slider_answers[i] == self.session.vars['slider_goals' + str(self.round_number)][i]: controller.total_sliders_correct += 1 controller.payoff += c(1) print('For slider', i + 1, 'slider was correct. Controller.total_sliders_correct is', controller.total_sliders_correct, 'and controller.payoff is', controller.payoff) print('slider_goals[', i, '] was', self.session.vars['slider_goals' + str(self.round_number)][i], 'and controller_slider_answers[', i, '] was', controller_slider_answers[i], '\n') else: print('For slider', i + 1, 'slider was incorrect. Controller.total_sliders_correct is still', controller.total_sliders_correct, 'and controller.payoff is still', controller.payoff) print('slider_goals[', i, '] was', self.session.vars['slider_goals' + str(self.round_number)][i], 'and controller_slider_answers[', i, '] was', controller_slider_answers[i], '\n') def score_in_stage1(self): for p in self.get_players(): p.participant.vars['score_in_stage1'] = p.total_sliders_correct class Player(BasePlayer): slider1 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider2 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider3 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider4 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider5 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider6 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider7 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider8 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider9 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider10 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider11 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider12 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider13 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider14 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider15 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider16 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider17 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider18 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider19 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider20 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider21 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider22 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider23 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider24 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider25 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider26 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider27 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider28 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider29 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") slider30 = models.IntegerField(widget=widgets.Slider, min=0, max=100, initial=random.randint(0, 100), label="") total_sliders_correct = models.IntegerField(initial=0)