from otree.api import * from otree.api import models, Page, WaitPage import time doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'demo_two_dimensional_dictator_game' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): TaskAllocation = models.IntegerField( choices=list(range(11)), # choices=list(range(11)), widget=widgets.RadioSelect ) MoneyAllocation = models.IntegerField( choices=list(range(0, 1100, 100)), widget=widgets.RadioSelect ) payoff_Part1 = models.IntegerField(default = 0) payoff_Part2 = models.IntegerField(default = 500) Count = models.IntegerField(default=0) TaskQuota = models.IntegerField(default=5) Start_0 = models.FloatField(blank=True) Finish_0 = models.FloatField(blank=True) Time_0 = models.FloatField(blank=True, default=0) # PAGES class Slider(Page): template_name = 'two_dimensional_dictator_game/Slider.html' form_model = 'player' class DemoDictator(Page): form_model = 'player' form_fields = ['TaskAllocation', 'MoneyAllocation'] @staticmethod def is_displayed(player): return player.session.config["treatment"] == 999 class DemoResults(Page): template_name = 'two_dimensional_dictator_game/Results.html' @staticmethod def vars_for_template(player: Player): return dict( payoff12 = player.payoff_Part2, payoff123 = player.payoff_Part2 + 1200, RivalTasks = 10 - player.TaskQuota, RivalMoney = 1000 - player.payoff_Part2 ) @staticmethod def is_displayed(player): return player.session.config["treatment"] == 999 class DemoTask(Slider): form_fields = ['Finish_0'] @staticmethod def is_displayed(player): return player.session.config["treatment"] == 999 tasks = [] for i in range(1, 11): task_class = type('Task{}'.format(i), (Slider,), {'form_fields': ['Finish_{}'.format(i)]}) tasks.append(task_class) page_sequence = [ DemoDictator, DemoResults, DemoTask]