from otree.api import * import random doc = """ Slider with live updating label """ class C(BaseConstants): NAME_IN_URL = 'slider_live_label' PLAYERS_PER_GROUP = None NUM_ROUNDS = 3 ENDOWMENT = 100 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): slider1 = models.IntegerField(min=-1, max=100) slider2 = models.IntegerField(min=-1, max=100) slider3 = models.IntegerField(min=-1, max=100) slider4 = models.IntegerField(min=-1, max=100) slider5 = models.IntegerField(min=-1, max=100) slider6 = models.IntegerField(min=-1, max=100) slider7 = models.IntegerField(min=-1, max=100) slider8 = models.IntegerField(min=-1, max=100) slider9 = models.IntegerField(min=-1, max=100) slider10 = models.IntegerField(min=-1, max=100) slider11 = models.IntegerField(min=-1, max=100) slider12 = models.IntegerField(min=-1, max=100) slider13 = models.IntegerField(min=-1, max=100) slider14 = models.IntegerField(min=-1, max=100) slider15 = models.IntegerField(min=-1, max=100) slider16 = models.IntegerField(min=-1, max=100) slider17 = models.IntegerField(min=-1, max=100) slider18 = models.IntegerField(min=-1, max=100) slider19 = models.IntegerField(min=-1, max=100) slider20 = models.IntegerField(min=-1, max=100) slider21 = models.IntegerField(min=-1, max=100) slider22 = models.IntegerField(min=-1, max=100) slider23 = models.IntegerField(min=-1, max=100) slider24 = models.IntegerField(min=-1, max=100) slider25 = models.IntegerField(min=-1, max=100) slider26 = models.IntegerField(min=-1, max=100) slider27 = models.IntegerField(min=-1, max=100) slider28 = models.IntegerField(min=-1, max=100) slider29 = models.IntegerField(min=-1, max=100) slider30 = models.IntegerField(min=-1, max=100) slider31 = models.IntegerField(min=-1, max=100) slider32 = models.IntegerField(min=-1, max=100) slider33 = models.IntegerField(min=-1, max=100) slider34 = models.IntegerField(min=-1, max=100) slider35 = models.IntegerField(min=-1, max=100) slider36 = models.IntegerField(min=-1, max=100) slider37 = models.IntegerField(min=-1, max=100) slider38 = models.IntegerField(min=-1, max=100) slider39 = models.IntegerField(min=-1, max=100) slider40 = models.IntegerField(min=-1, max=100) slider41 = models.IntegerField(min=-1, max=100) slider42 = models.IntegerField(min=-1, max=100) slider43 = models.IntegerField(min=-1, max=100) slider44 = models.IntegerField(min=-1, max=100) slider45 = models.IntegerField(min=-1, max=100) slider46 = models.IntegerField(min=-1, max=100) slider47 = models.IntegerField(min=-1, max=100) slider48 = models.IntegerField(min=-1, max=100) slider49 = models.IntegerField(min=-1, max=100) slider50 = models.IntegerField(min=-1, max=100) slider51 = models.IntegerField(min=-1, max=100) slider52 = models.IntegerField(min=-1, max=100) slider53 = models.IntegerField(min=-1, max=100) slider54 = models.IntegerField(min=-1, max=100) slider55 = models.IntegerField(min=-1, max=100) slider56 = models.IntegerField(min=-1, max=100) slider57 = models.IntegerField(min=-1, max=100) slider58 = models.IntegerField(min=-1, max=100) slider59 = models.IntegerField(min=-1, max=100) slider60 = models.IntegerField(min=-1, max=100) slider61 = models.IntegerField(min=-1, max=100) slider62 = models.IntegerField(min=-1, max=100) slider63 = models.IntegerField(min=-1, max=100) slider64 = models.IntegerField(min=-1, max=100) x = models.IntegerField(initial=0) y = models.IntegerField(initial=0) z = models.IntegerField(initial=0) quantity = models.IntegerField(initial=0) quality = models.FloatField(initial=0) profit = models.FloatField(initial=0) q_round1 = models.IntegerField(initial=-1) q_round2 = models.IntegerField(initial=-1) q_round3 = models.IntegerField(initial=-1) qua_round1 = models.FloatField(initial=-1) qua_round2 = models.FloatField(initial=-1) qua_round3 = models.FloatField(initial=-1) p_round1 = models.FloatField(initial=-1) p_round2 = models.FloatField(initial=-1) p_round3 = models.FloatField(initial=-1) player_random = models.IntegerField() profit_part1 = models.FloatField() class Welcome(Page): @staticmethod def is_displayed(player: Player): if player.round_number == 1: return player.id_in_group == player.id_in_group class instructions_for_slider(Page): @staticmethod def is_displayed(player: Player): if player.round_number == 1: return player.id_in_group == player.id_in_group class Slider1(Page): form_model = 'player' form_fields = ['slider1', 'slider2', 'slider3', 'slider4', 'slider5', 'slider6', 'slider7', 'slider8', 'slider9', 'slider10', 'slider11', 'slider12', 'slider13', 'slider14', 'slider15', 'slider16', 'slider17', 'slider18', 'slider19', 'slider20', 'slider21', 'slider22', 'slider23', 'slider24', 'slider25','slider26', 'slider27', 'slider28', 'slider29', 'slider30', 'slider31', 'slider32', 'slider33', 'slider34', 'slider35', 'slider36' , 'slider37', 'slider38', 'slider39', 'slider40', 'slider41', 'slider42', 'slider43', 'slider44', 'slider45' , 'slider46', 'slider47', 'slider48', 'slider49', 'slider50', 'slider51', 'slider52', 'slider53', 'slider54' , 'slider55', 'slider56', 'slider57', 'slider58', 'slider59', 'slider60', 'slider61', 'slider62', 'slider63' , 'slider64'] timeout_seconds = 60 @staticmethod def js_vars(player: Player): return dict(endowment=C.ENDOWMENT) @staticmethod def app_after_this_page(player: Player, upcoming_apps): slider = [player.slider1, player.slider2, player.slider3, player.slider4, player.slider5, player.slider6, player.slider7, player.slider8, player.slider9, player.slider10, player.slider11, player.slider12, player.slider13, player.slider14, player.slider15, player.slider16, player.slider17, player.slider18, player.slider19, player.slider20, player.slider21, player.slider22, player.slider23, player.slider24, player.slider25, player.slider26, player.slider27, player.slider28, player.slider29, player.slider30, player.slider31, player.slider32, player.slider33, player.slider34, player.slider35, player.slider36, player.slider37, player.slider38, player.slider39, player.slider40, player.slider41, player.slider42, player.slider43, player.slider44, player.slider45, player.slider46, player.slider47, player.slider48, player.slider49, player.slider50, player.slider51, player.slider52, player.slider53, player.slider54, player.slider55, player.slider56, player.slider57, player.slider58, player.slider59, player.slider60, player.slider61, player.slider62, player.slider63, player.slider64,] for s in slider: if s == -1: player.x = player.x player.y = player.y player.z = player.z elif s == 50: player.x = player.x + 1 player.y = player.y player.z = player.z elif s >= 0 and s < 25: player.x = player.x player.y = player.y + 1 player.z = player.z elif s >= 25 and s < 50: player.x = player.x player.y = player.y player.z = player.z + 1 elif s > 50 and s <= 75: player.x = player.x player.y = player.y player.z = player.z + 1 elif s > 75 and s <= 100: player.x = player.x player.y = player.y + 1 player.z = player.z player.quantity = player.x + player.y + player.z if player.quantity > 0: player.quality = round((player.x * 1.0 + player.y * 0.1 + player.z * 0.5) / (player.x + player.y + player.z), 2) player.profit = player.x * 1.0 + player.y * 0.1 + player.z * 0.5 elif player.quantity == 0: player.quality = 0 player.profit = 0 class Display_information1(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 1: return player.id_in_group == player.id_in_group class Display_information2(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 2: player_round1 = player.in_round(player.round_number - 1) player.q_round1 = player_round1.quantity player.qua_round1 = player_round1.quality player.p_round1 = player_round1.profit return player.id_in_group == player.id_in_group class Display_information3(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 3: player_round1 = player.in_round(player.round_number - 2) player_round2 = player.in_round(player.round_number - 1) player.q_round1 = player_round1.quantity player.qua_round1 = player_round1.quality player.p_round1 = player_round1.profit player.q_round2 = player_round2.quantity player.qua_round2 = player_round2.quality player.p_round2 = player_round2.profit return player.id_in_group == player.id_in_group class Result(Page): form_model = 'player' @staticmethod def is_displayed(player: Player): if player.round_number == 3: return player.id_in_group == player.id_in_group @staticmethod def app_after_this_page(player: Player, upcoming_apps): player_round1 = player.in_round(player.round_number - 2) player_round2 = player.in_round(player.round_number - 1) player.player_random = int(random.random() * 3 + 1) if player.player_random == 0: player.profit_part1 = player_round1.profit elif player.player_random == 4: player.profit_part1 = player.profit if player.player_random == 1: player.profit_part1 = player_round1.profit elif player.player_random == 2: player.profit_part1 = player_round2.profit elif player.player_random == 3: player.profit_part1 = player.profit player.participant.payment_part1 = player.profit_part1 page_sequence = [Welcome, instructions_for_slider, Slider1, Display_information1, Display_information2, Display_information3, Result]