import random from otree.api import * doc = """ """ BLANK = ' ' class C(BaseConstants): NAME_IN_URL = 'Experiment' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 T2PERIODS = 2 T5PERIODS = 5 T10PERIODS = 10 class Subsession(BaseSubsession): pass class Group(BaseGroup): T2board_state = models.LongStringField(initial=BLANK * 16) T5board_state = models.LongStringField(initial=BLANK * 16) T10board_state = models.LongStringField(initial=BLANK * 16) class Player(BasePlayer): T2last_value = models.IntegerField(initial='0') T5last_value = models.IntegerField(initial='0') T10last_value = models.IntegerField(initial='0') T2symbol = models.StringField() T5symbol = models.StringField() T10symbol = models.StringField() T2period = models.IntegerField(initial='1') T5period = models.IntegerField(initial='1') T10period = models.IntegerField(initial='1') T2decisions_remaining = models.IntegerField(initial='2') T5decisions_remaining = models.IntegerField(initial='5') T10decisions_remaining = models.IntegerField(initial='10') T2final_period = models.BooleanField(initial=False) T5final_period = models.BooleanField(initial=False) T10final_period = models.BooleanField(initial=False) T2first_period = models.BooleanField(initial=True) T5first_period = models.BooleanField(initial=True) T10first_period = models.BooleanField(initial=True) prize0 = models.IntegerField(initial='0') prize1 = models.IntegerField(initial='0') prize2 = models.IntegerField(initial='0') prize3 = models.IntegerField(initial='0') prize4 = models.IntegerField(initial='0') prize5 = models.IntegerField(initial='0') prize6 = models.IntegerField(initial='0') prize7 = models.IntegerField(initial='0') prize8 = models.IntegerField(initial='0') prize9 = models.IntegerField(initial='0') prize10 = models.IntegerField(initial='0') prize11 = models.IntegerField(initial='0') prize12 = models.IntegerField(initial='0') prize13 = models.IntegerField(initial='0') prize14 = models.IntegerField(initial='0') prize15 = models.IntegerField(initial='0') T2prize0 = models.IntegerField(initial='0') T2prize1 = models.IntegerField(initial='0') T2prize2 = models.IntegerField(initial='0') T2prize3 = models.IntegerField(initial='0') T2prize4 = models.IntegerField(initial='0') T2prize5 = models.IntegerField(initial='0') T2prize6 = models.IntegerField(initial='0') T2prize7 = models.IntegerField(initial='0') T2prize8 = models.IntegerField(initial='0') T2prize9 = models.IntegerField(initial='0') T2prize10 = models.IntegerField(initial='0') T2prize11 = models.IntegerField(initial='0') T2prize12 = models.IntegerField(initial='0') T2prize13 = models.IntegerField(initial='0') T2prize14 = models.IntegerField(initial='0') T2prize15 = models.IntegerField(initial='0') T5prize0 = models.IntegerField(initial='0') T5prize1 = models.IntegerField(initial='0') T5prize2 = models.IntegerField(initial='0') T5prize3 = models.IntegerField(initial='0') T5prize4 = models.IntegerField(initial='0') T5prize5 = models.IntegerField(initial='0') T5prize6 = models.IntegerField(initial='0') T5prize7 = models.IntegerField(initial='0') T5prize8 = models.IntegerField(initial='0') T5prize9 = models.IntegerField(initial='0') T5prize10 = models.IntegerField(initial='0') T5prize11 = models.IntegerField(initial='0') T5prize12 = models.IntegerField(initial='0') T5prize13 = models.IntegerField(initial='0') T5prize14 = models.IntegerField(initial='0') T5prize15 = models.IntegerField(initial='0') T10prize0 = models.IntegerField(initial='0') T10prize1 = models.IntegerField(initial='0') T10prize2 = models.IntegerField(initial='0') T10prize3 = models.IntegerField(initial='0') T10prize4 = models.IntegerField(initial='0') T10prize5 = models.IntegerField(initial='0') T10prize6 = models.IntegerField(initial='0') T10prize7 = models.IntegerField(initial='0') T10prize8 = models.IntegerField(initial='0') T10prize9 = models.IntegerField(initial='0') T10prize10 = models.IntegerField(initial='0') T10prize11 = models.IntegerField(initial='0') T10prize12 = models.IntegerField(initial='0') T10prize13 = models.IntegerField(initial='0') T10prize14 = models.IntegerField(initial='0') T10prize15 = models.IntegerField(initial='0') def creating_session(subsession: Subsession): # treatments = itertools.cycle(['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']) for p in subsession.get_players(): # participant = p.participant # participant.treatment = next(treatments) p.T2symbol = {1: 'X'}[p.id_in_group] p.T5symbol = {1: 'X'}[p.id_in_group] p.T10symbol = {1: 'X'}[p.id_in_group] p.prize0 = random.randint(0, 100) p.prize1 = random.randint(0, 100) p.prize2 = random.randint(0, 100) p.prize3 = random.randint(0, 100) p.prize4 = random.randint(0, 100) p.prize5 = random.randint(0, 100) p.prize6 = random.randint(0, 100) p.prize7 = random.randint(0, 100) p.prize8 = random.randint(0, 100) p.prize9 = random.randint(0, 100) p.prize10 = random.randint(0, 100) p.prize11 = random.randint(0, 100) p.prize12 = random.randint(0, 100) p.prize13 = random.randint(0, 100) p.prize14 = random.randint(0, 100) p.prize15 = random.randint(0, 100) p.T2prize0 = random.randint(0, 100) p.T2prize1 = random.randint(0, 100) p.T2prize2 = random.randint(0, 100) p.T2prize3 = random.randint(0, 100) p.T2prize4 = random.randint(0, 100) p.T2prize5 = random.randint(0, 100) p.T2prize6 = random.randint(0, 100) p.T2prize7 = random.randint(0, 100) p.T2prize8 = random.randint(0, 100) p.T2prize9 = random.randint(0, 100) p.T2prize10 = random.randint(0, 100) p.T2prize11 = random.randint(0, 100) p.T2prize12 = random.randint(0, 100) p.T2prize13 = random.randint(0, 100) p.T2prize14 = random.randint(0, 100) p.T2prize15 = random.randint(0, 100) p.T5prize0 = random.randint(0, 100) p.T5prize1 = random.randint(0, 100) p.T5prize2 = random.randint(0, 100) p.T5prize3 = random.randint(0, 100) p.T5prize4 = random.randint(0, 100) p.T5prize5 = random.randint(0, 100) p.T5prize6 = random.randint(0, 100) p.T5prize7 = random.randint(0, 100) p.T5prize8 = random.randint(0, 100) p.T5prize9 = random.randint(0, 100) p.T5prize10 = random.randint(0, 100) p.T5prize11 = random.randint(0, 100) p.T5prize12 = random.randint(0, 100) p.T5prize13 = random.randint(0, 100) p.T5prize14 = random.randint(0, 100) p.T5prize15 = random.randint(0, 100) p.T10prize0 = random.randint(0, 100) p.T10prize1 = random.randint(0, 100) p.T10prize2 = random.randint(0, 100) p.T10prize3 = random.randint(0, 100) p.T10prize4 = random.randint(0, 100) p.T10prize5 = random.randint(0, 100) p.T10prize6 = random.randint(0, 100) p.T10prize7 = random.randint(0, 100) p.T10prize8 = random.randint(0, 100) p.T10prize9 = random.randint(0, 100) p.T10prize10 = random.randint(0, 100) p.T10prize11 = random.randint(0, 100) p.T10prize12 = random.randint(0, 100) p.T10prize13 = random.randint(0, 100) p.T10prize14 = random.randint(0, 100) p.T10prize15 = random.randint(0, 100) class Begin(Page): pass class Demo_1(Page): @staticmethod def js_vars(player): return dict( prize0=player.prize0, prize1=player.prize1, prize2=player.prize2, prize3=player.prize3, prize4=player.prize4, prize5=player.prize5, prize6=player.prize6, prize7=player.prize7, prize8=player.prize8, prize9=player.prize9, prize10=player.prize10, prize11=player.prize11, prize12=player.prize12, prize13=player.prize13, prize14=player.prize14, prize15=player.prize15, ) class Demo_2(Page): pass class Demo_3(Page): pass class Practice_T2(Page): @staticmethod def js_vars(player): return dict( T2symbol=player.T2symbol, T2prize0=player.T2prize0, T2prize1=player.T2prize1, T2prize2=player.T2prize2, T2prize3=player.T2prize3, T2prize4=player.T2prize4, T2prize5=player.T2prize5, T2prize6=player.T2prize6, T2prize7=player.T2prize7, T2prize8=player.T2prize8, T2prize9=player.T2prize9, T2prize10=player.T2prize10, T2prize11=player.T2prize11, T2prize12=player.T2prize12, T2prize13=player.T2prize13, T2prize14=player.T2prize14, T2prize15=player.T2prize15, ) @staticmethod def live_method(player: Player, data: dict): group = player.group board = list(group.T2board_state) broadcast = {} if 'move' in data: move = data['move'] if player.T2final_period == True: return player.T2period += 1 player.T2decisions_remaining = C.T2PERIODS - player.T2period + 1 board[move] = player.T2symbol group.T2board_state = ''.join(board) if player.T2period > C.T2PERIODS: player.T2final_period = True if player.T2period > 1: player.T2first_period = False if 'value' in data: value = data['value'] player.payoff += value player.T2last_value = value broadcast['T2board_state'] = board broadcast['T2period'] = player.T2period # broadcast['payoff'] = player.payoff broadcast['T2final_period'] = player.T2final_period broadcast['T2decisions_remaining'] = player.T2decisions_remaining broadcast['T2first_period'] = player.T2first_period broadcast['T2last_value'] = player.T2last_value return {0: broadcast} class Practice_T5(Page): @staticmethod def js_vars(player): return dict( T5symbol=player.T5symbol, T5prize0=player.T5prize0, T5prize1=player.T5prize1, T5prize2=player.T5prize2, T5prize3=player.T5prize3, T5prize4=player.T5prize4, T5prize5=player.T5prize5, T5prize6=player.T5prize6, T5prize7=player.T5prize7, T5prize8=player.T5prize8, T5prize9=player.T5prize9, T5prize10=player.T5prize10, T5prize11=player.T5prize11, T5prize12=player.T5prize12, T5prize13=player.T5prize13, T5prize14=player.T5prize14, T5prize15=player.T5prize15, ) @staticmethod def live_method(player: Player, data: dict): group = player.group board = list(group.T5board_state) broadcast = {} if 'move' in data: move = data['move'] if player.T5final_period == True: return player.T5period += 1 player.T5decisions_remaining = C.T5PERIODS - player.T5period + 1 board[move] = player.T5symbol group.T5board_state = ''.join(board) if player.T5period > C.T5PERIODS: player.T5final_period = True if player.T5period > 1: player.T5first_period = False if 'value' in data: value = data['value'] player.payoff += value player.T5last_value = value broadcast['T5board_state'] = board broadcast['T5period'] = player.T5period # broadcast['payoff'] = player.payoff broadcast['T5final_period'] = player.T5final_period broadcast['T5decisions_remaining'] = player.T5decisions_remaining broadcast['T5first_period'] = player.T5first_period broadcast['T5last_value'] = player.T5last_value return {0: broadcast} class Practice_T10(Page): @staticmethod def js_vars(player): return dict( T10symbol=player.T10symbol, T10prize0=player.T10prize0, T10prize1=player.T10prize1, T10prize2=player.T10prize2, T10prize3=player.T10prize3, T10prize4=player.T10prize4, T10prize5=player.T10prize5, T10prize6=player.T10prize6, T10prize7=player.T10prize7, T10prize8=player.T10prize8, T10prize9=player.T10prize9, T10prize10=player.T10prize10, T10prize11=player.T10prize11, T10prize12=player.T10prize12, T10prize13=player.T10prize13, T10prize14=player.T10prize14, T10prize15=player.T10prize15, ) @staticmethod def live_method(player: Player, data: dict): group = player.group board = list(group.T10board_state) broadcast = {} if 'move' in data: move = data['move'] if player.T10final_period == True: return player.T10period += 1 player.T10decisions_remaining = C.T10PERIODS - player.T10period + 1 board[move] = player.T10symbol group.T10board_state = ''.join(board) if player.T10period > C.T10PERIODS: player.T10final_period = True if player.T10period > 1: player.T10first_period = False if 'value' in data: value = data['value'] player.payoff += value player.T10last_value = value broadcast['T10board_state'] = board broadcast['T10period'] = player.T10period # broadcast['payoff'] = player.payoff broadcast['T10final_period'] = player.T10final_period broadcast['T10decisions_remaining'] = player.T10decisions_remaining broadcast['T10first_period'] = player.T10first_period broadcast['T10last_value'] = player.T10last_value return {0: broadcast} class End(Page): pass page_sequence = [Begin,Demo_1,Demo_2,Demo_3,Practice_T2,Practice_T5,Practice_T10,End]