import random as R from otree.api import * from shared_out import * author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'firstPrice' num_rounds = 5 players_per_group = 2 instructions_template = 'firstPrice/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): win = models.BooleanField(initial=False) bid = models.FloatField(label='Personal Bid:') item_value = models.FloatField() # FUNCTIONS def creating_session(subsession: Subsession): set_players_per_group(subsession) def set_values(group: Group): for player in group.get_players(): player.item_value = round(R.random(), 3) def set_payoffs(group: Group): highest = 0 for player in group.get_players(): if player.bid > highest: highest = player.bid for player in group.get_players(): if player.bid == highest: player.win = True player.payoff = player.item_value - player.bid # PAGES class Introduction(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class AuctionWait(WaitPage): after_all_players_arrive = set_values class Main(Page): form_model = 'player' form_fields = ['bid'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): pass page_sequence = [Introduction, AuctionWait, Main, ResultsWaitPage, Results]