from otree.api import * c = cu doc = '' class C(BaseConstants): NAME_IN_URL = 'Equal' PLAYERS_PER_GROUP = 3 NUM_ROUNDS = 3 EQUAL = (0.333, 0.333, 0.333) E = 20 W = 120 PROD = (6, 3, 2) class Subsession(BaseSubsession): pass class Group(BaseGroup): total_aporte = models.IntegerField() water_available = models.FloatField() high = models.FloatField() med = models.FloatField() low = models.FloatField() def S2calculation(group: Group): group = group players = group.get_players() group.total_aporte = sum([p.aporte for p in players]) if group.total_aporte == 0 : group.water_available = 0 if group.total_aporte == 5 : group.water_available = 2 if group.total_aporte == 10 : group.water_available = 4 if group.total_aporte == 15 : group.water_available = 6 if group.total_aporte == 20 : group.water_available = 8 if group.total_aporte == 25 : group.water_available = 35 if group.total_aporte == 30 : group.water_available = 40 if group.total_aporte == 35 : group.water_available = 45 if group.total_aporte == 40 : group.water_available = 50 if group.total_aporte == 45 : group.water_available = 105 if group.total_aporte == 50 : group.water_available = 110 if group.total_aporte == 55 : group.water_available = 115 if group.total_aporte == 60 : group.water_available = 120 for p in players : if group.round_number != 1 : p.acumulated = p.participant.vars["local"] for p in players : p.acumulated_global = p.participant.vars["global1"] p.water_share = round(group.water_available*C.PROD[p.type-1]*C.EQUAL[p.type-1]) p.left = C.E-p.aporte p.benefits = round(p.left+p.water_share) p.acumulated = round(p.acumulated + p.benefits) p.acumulated_global = round(p.acumulated_global + p.benefits) p.participant.vars["global1"] = round(p.acumulated_global) p.participant.vars["local"] = round(p.acumulated) p.participant.etapa1 = p.participant.vars["global1"] if p.type == 1 : group.high = round(p.benefits) elif p.type == 2 : group.med = round(p.benefits) elif p.type == 3 : group.low = round(p.benefits) def S2(group: Group): group = group players = group.get_players() for p in players : p.type = p.participant.vars["type"] p.type2 = p.participant.vars["type2"] p.participant.etapa1 = 0 Group.S2calculation = S2calculation Group.S2 = S2 class Player(BasePlayer): aporte = models.IntegerField(choices=[[0, '0'], [5, '5'], [10, '10'], [15, '15'], [20, '20']], initial=0, label='Su aporte', max=C.E, min=0) type = models.IntegerField() type2 = models.StringField() left = models.IntegerField() benefits = models.FloatField() acumulated = models.FloatField(initial=0) water_share = models.FloatField() acumulated_global = models.FloatField() class Stage1(WaitPage): after_all_players_arrive = S2 class Stage1intro(Page): form_model = 'player' form_fields = ['aporte'] class Stage1calculation(WaitPage): after_all_players_arrive = S2calculation class Stage1results(Page): form_model = 'player' page_sequence = [Stage1, Stage1intro, Stage1calculation, Stage1results]