from otree.api import * import random doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 's1_1' players_per_group = 3 num_rounds = 1 pago = { 0: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 0, 'P3': 0}}, 1: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 1, 'P3': 1}}, 2: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 2, 'P3': 2}}, 3: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 3, 'P3': 3}}, 4: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 4, 'P3': 4}}, 5: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 5, 'P3': 5}}, 6: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 6, 'P3': 6}}, 7: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 7, 'P3': 7}}, 8: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 8, 'P3': 8}}, 9: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 9, 'P3': 9}}, 10: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 10, 'P3': 10}}, 11: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 11, 'P3': 11}}, 12: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 12, 'P3': 12}}, 13: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 13, 'P3': 13}}, 14: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 14, 'P3': 14}}, 15: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 15, 'P3': 15}}, 16: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 16, 'P3': 16}}, 17: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 17, 'P3': 17}}, 18: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 18, 'P3': 18}}, 19: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 19, 'P3': 19}}, 20: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 20, 'P3': 20}}, 21: {1: {'P2': 20, 'P3': 0}, 2: {'P2': 21, 'P3': 21}} } vars_table_1 = [ {'name': 's1t100', 'values': [20, 0, 0, 0]}, {'name': 's1t101', 'values': [20, 0, 1, 1]}, {'name': 's1t102', 'values': [20, 0, 2, 2]}, {'name': 's1t103', 'values': [20, 0, 3, 3]}, {'name': 's1t104', 'values': [20, 0, 4, 4]}, {'name': 's1t105', 'values': [20, 0, 5, 5]}, {'name': 's1t106', 'values': [20, 0, 6, 6]}, {'name': 's1t107', 'values': [20, 0, 7, 7]}, {'name': 's1t108', 'values': [20, 0, 8, 8]}, {'name': 's1t109', 'values': [20, 0, 9, 9]}, {'name': 's1t110', 'values': [20, 0, 10, 10]}, {'name': 's1t111', 'values': [20, 0, 11, 11]}, {'name': 's1t112', 'values': [20, 0, 12, 12]}, {'name': 's1t113', 'values': [20, 0, 13, 13]}, {'name': 's1t114', 'values': [20, 0, 14, 14]}, {'name': 's1t115', 'values': [20, 0, 15, 15]}, {'name': 's1t116', 'values': [20, 0, 16, 16]}, {'name': 's1t117', 'values': [20, 0, 17, 17]}, {'name': 's1t118', 'values': [20, 0, 18, 18]}, {'name': 's1t119', 'values': [20, 0, 19, 19]}, {'name': 's1t120', 'values': [20, 0, 20, 20]}, {'name': 's1t121', 'values': [20, 0, 21, 21]} ] P1_ROLE = 'P1' P2_ROLE = 'P2' P3_ROLE = 'P3' class Subsession(BaseSubsession): pregunta_pago = models.IntegerField() @staticmethod def creating_session(subsession): subsession.pregunta_pago = random.randint(0,21) for p in subsession.get_players(): p.participant.vars['fila_s1_1'] = subsession.pregunta_pago p.participant.role_s1_1 = p.role p.participant.app_order = subsession.session.config['order'] class Group(BaseGroup): pass @staticmethod def get_payment(group): # save roles p1 = group.get_player_by_role('P1') p2 = group.get_player_by_role('P2') p3 = group.get_player_by_role('P3') subsession = group.subsession p1.participant.vars['payoff_1'] = 10 if subsession.pregunta_pago > 9: p1_dec_p2 = getattr(p1, 's1t1' + str(subsession.pregunta_pago)) else: p1_dec_p2 = getattr(p1, 's1t10' + str(subsession.pregunta_pago)) if subsession.pregunta_pago > 9: p1_dec_p3 = getattr(p1, 's1t1' + str(subsession.pregunta_pago)) else: p1_dec_p3 = getattr(p1, 's1t10' + str(subsession.pregunta_pago)) p2.participant.vars['payoff_1'] = Constants.pago[subsession.pregunta_pago][p1_dec_p2][p2.role] p3.participant.vars['payoff_1'] = Constants.pago[subsession.pregunta_pago][p1_dec_p3][p3.role] class Player(BasePlayer): s1t100 = models.IntegerField() s1t101 = models.IntegerField() s1t102 = models.IntegerField() s1t103 = models.IntegerField() s1t104 = models.IntegerField() s1t105 = models.IntegerField() s1t106 = models.IntegerField() s1t107 = models.IntegerField() s1t108 = models.IntegerField() s1t109 = models.IntegerField() s1t110 = models.IntegerField() s1t111 = models.IntegerField() s1t112 = models.IntegerField() s1t113 = models.IntegerField() s1t114 = models.IntegerField() s1t115 = models.IntegerField() s1t116 = models.IntegerField() s1t117 = models.IntegerField() s1t118 = models.IntegerField() s1t119 = models.IntegerField() s1t120 = models.IntegerField() s1t121 = models.IntegerField() # PAGES class Instrucciones(Page): pass class ins_table1(Page): pass class table1(Page): pass class Pago(Page): def vars_for_template(self): group = self.group get_payment(group) return { 'pago': self.participant.payoff_1 } class table1(Page): form_model = 'player' form_fields = ['s1t100', 's1t101', 's1t102', 's1t103', 's1t104', 's1t105', 's1t106', 's1t107', 's1t108', 's1t109', 's1t110', 's1t111', 's1t112', 's1t113', 's1t114', 's1t115', 's1t116', 's1t117', 's1t118', 's1t119', 's1t120', 's1t121'] def vars_for_template(self): return { "vars_table": [ {'name': 's1t100', 'vals': [20, 0, 0, 0]}, {'name': 's1t101', 'vals': [20, 0, 1, 1]}, {'name': 's1t102', 'vals': [20, 0, 2, 2]}, {'name': 's1t103', 'vals': [20, 0, 3, 3]}, {'name': 's1t104', 'vals': [20, 0, 4, 4]}, {'name': 's1t105', 'vals': [20, 0, 5, 5]}, {'name': 's1t106', 'vals': [20, 0, 6, 6]}, {'name': 's1t107', 'vals': [20, 0, 7, 7]}, {'name': 's1t108', 'vals': [20, 0, 8, 8]}, {'name': 's1t109', 'vals': [20, 0, 9, 9]}, {'name': 's1t110', 'vals': [20, 0, 10, 10]}, {'name': 's1t111', 'vals': [20, 0, 11, 11]}, {'name': 's1t112', 'vals': [20, 0, 12, 12]}, {'name': 's1t113', 'vals': [20, 0, 13, 13]}, {'name': 's1t114', 'vals': [20, 0, 14, 14]}, {'name': 's1t115', 'vals': [20, 0, 15, 15]}, {'name': 's1t116', 'vals': [20, 0, 16, 16]}, {'name': 's1t117', 'vals': [20, 0, 17, 17]}, {'name': 's1t118', 'vals': [20, 0, 18, 18]}, {'name': 's1t119', 'vals': [20, 0, 19, 19]}, {'name': 's1t120', 'vals': [20, 0, 20, 20]}, {'name': 's1t121', 'vals': [20, 0, 21, 21]} ] } class FinalWait(WaitPage): @staticmethod def after_all_players_arrive(group: Group): get_payment(group) page_sequence = [Instrucciones, ins_table1, table1, FinalWait]