import random as R from otree.api import * author = 'Corey Scheinfeld' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'condorcet' players_per_group = 3 num_rounds = 10 instructions_template1 = 'condorcet/instructions1.html' instructions_template2 = 'condorcet/instructions2.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): blue_votes = models.IntegerField(initial=0) red_votes = models.IntegerField(initial=0) jar_type = models.BooleanField() is_blue = models.BooleanField() class Player(BasePlayer): is_blue = models.StringField() signal = models.StringField(initial='silver') # FUNCTIONS def creating_session(subsession: Subsession): subsession.group_randomly() def create_jar(group: Group): group.jar_type = R.choice([False, True]) def count_votes(group: Group): players = group.get_players() for p in players: if p.is_blue: group.blue_votes += 1 else: group.red_votes += 1 def set_payoffs(group: Group): players = group.get_players() for p in players: if group.is_blue == group.jar_type: p.payoff = 100 else: p.payoff = 10 # PAGES class Introduction(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 or player.round_number == 6 class setJar(WaitPage): after_all_players_arrive = create_jar class Main(Page): form_model = 'player' form_fields = ['is_blue', 'signal'] class ResultsWaitPage(WaitPage): @staticmethod def after_all_players_arrive(group: Group): count_votes(group) if group.round_number <= 5: group.is_blue = group.blue_votes > group.red_votes else: group.is_blue = group.blue_votes > 0 set_payoffs(group) class Results(Page): pass page_sequence = [Introduction, setJar, Main, ResultsWaitPage, Results]