import random as R from shared_out import * from otree.api import * author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'firstPrice_common' num_rounds = 5 players_per_group = 2 instructions_template = 'firstPrice_common/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): item_value = models.FloatField(initial=0) class Player(BasePlayer): win = models.BooleanField(initial=False) bid = models.FloatField(label='Personal Bid:') hint = 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.hint = round(R.random(), 3) group.item_value += player.hint group.item_value = round((group.item_value / 2), 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 = group.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]