from otree.api import * c = cu class Constants(BaseConstants): name_in_url = 'trust' players_per_group = 2 num_rounds = 1 endowment = cu(100) multiplier = 3 Rules_template = 'trust/Rules.html' class Subsession(BaseSubsession): pass def sent_back_amount_max(group): return group.sent_amount * Constants.multiplier def set_payoffs(group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) p1.payoff = Constants.endowment - group.sent_amount + group.sent_back_amount p2.payoff = group.sent_amount * Constants.multiplier - group.sent_back_amount class Group(BaseGroup): sent_amount = models.CurrencyField(doc='Amount sent by P1', label='Пожалуйста, введите сумму от 0 до 100', max=Constants.endowment, min=0) sent_back_amount = models.CurrencyField(doc='Amount sent back by P2', min=0) name1 = models.StringField(label="Ваше имя:") gr1 = models.StringField(label="Ваша группа (если Вы не учитесь в НИУ ВШЭ, поставьте прочерк):") sex1 = models.IntegerField(label="Ваш пол:", choices=[ [1, 'М'], [0, 'Ж'] ]) know1 = models.IntegerField(label="Вы знакомы со своим оппонентом?:", choices=[ [1, 'Да'], [0, 'Нет'] ]) age1 = models.IntegerField(label="Ваш возраст:", min=0, max=100) name2 = models.StringField(label="Ваше имя:") gr2 = models.StringField(label="Ваша группа:") sex2 = models.IntegerField(label="Ваш пол:", choices=[ [1, 'М'], [0, 'Ж'] ]) know2 = models.IntegerField(label="Вы знакомы со своим оппонентом?:", choices=[ [1, 'Да'], [0, 'Нет'] ]) age2 = models.IntegerField(label="Ваш возраст:", min=0, max=100) class Player(BasePlayer): pass class Introduction1(Page): form_model = 'group' form_fields = ['name1', 'gr1', 'sex1', 'age1'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 1 class Introduction2(Page): form_model = 'group' form_fields = ['name2', 'gr2', 'sex2', 'age2'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 2 class Send(Page): form_model = 'group' form_fields = ['know1','sent_amount'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 1 class NameWaitPage(WaitPage): pass class SendWaitPage(WaitPage): pass class SendBack(Page): form_model = 'group' form_fields = ['know2', 'sent_back_amount'] @staticmethod def is_displayed(player): group = player.group return player.id_in_group == 2 @staticmethod def vars_for_template(player): group = player.group triple = group.sent_amount * Constants.multiplier mid = Constants.endowment - group.sent_amount return dict( triple = triple, mid = mid ) class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' class Results(Page): form_model = 'player' @staticmethod def vars_for_template(player): group = player.group return dict(triple=group.sent_amount * Constants.multiplier) page_sequence = [Introduction1, Introduction2, NameWaitPage, Send, SendWaitPage, SendBack, ResultsWaitPage, Results]