from otree.api import * c = cu doc = '\nThis is a dice game with two players\n' class C(BaseConstants): NAME_IN_URL = 'dice' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 INSTRUCTIONS_TEMPLATE = 'dice/instructions.html' class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): session = subsession.session flip = False; for group in subsession.get_groups(): group.penalty_group = flip; for player in group.get_players(): player.penalty_group = flip; flip = not flip; class Group(BaseGroup): penalty_group = models.BooleanField(initial=False) class Player(BasePlayer): chose_number = models.IntegerField(label='Chose number', max=30, min=5) diced_number = models.IntegerField(initial=5, max=30, min=5) penalty_group = models.BooleanField(initial=False) email = models.StringField() def other_player(player: Player): group = player.group return player.get_others_in_group()[0] class Introduction(Page): form_model = 'player' class Decision(Page): form_model = 'player' form_fields = ['chose_number', 'diced_number'] @staticmethod def vars_for_template(player: Player): group = player.group return dict( panelty_group = player.penalty_group ) class ResultsWaitPage(WaitPage): pass class Results(Page): form_model = 'player' form_fields = ['email'] @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return dict( opponent=opponent, won=player.chose_number > opponent.chose_number, draw=player.chose_number == opponent.chose_number ) page_sequence = [Introduction, Decision, ResultsWaitPage, Results]