from otree.api import * import random import time doc = """ Juego de confianza con rondas de traición: HE2 """ def roundup(x): return round(float(x)/100)*100 class Constants(BaseConstants): name_in_url = 'trust_traicion_control' players_per_group = None num_rounds = 7 endowment = cu(10000) multiplication_factor = 4 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): id_experimental = models.IntegerField( label='Por favor introduzca su ID experimental:') sent_back_amount=models.CurrencyField() sent_amount = models.CurrencyField( min=0, max=Constants.endowment, label="¿Cuánto dinero quiere enviarle al receptor?" ) def set_payoffs(group): for p in group.get_players(): random_payment=random.uniform(p.sent_amount*Constants.multiplication_factor*0.4,p.sent_amount*Constants.multiplication_factor*0.6) p.sent_back_amount=roundup(random_payment) p.payoff=Constants.endowment-p.sent_amount+p.sent_back_amount p.payoff # PAGES class Intro(Page): @staticmethod def is_displayed(player): return player.round_number == 1 class Send(Page): form_model = 'player' form_fields = ['sent_amount'] timeout_seconds = 60 class WaitResults(WaitPage): after_all_players_arrive=set_payoffs class WaitDia(WaitPage): @staticmethod def is_displayed(player): return player.round_number == 1 class WaitInstrucciones(WaitPage): @staticmethod def is_displayed(player): return player.round_number == 1 class WaitRompecabezas(WaitPage): @staticmethod def is_displayed(player): return player.round_number == 3 class Results(Page): pass page_sequence = [ WaitDia, Intro, WaitInstrucciones, Send, WaitResults, Results ]