from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'nmBid' players_per_group = 2 num_rounds = 1 endowment = 50 A_multiplier = 1 B_multiplier = 1 Prize = 0 class Subsession(BaseSubsession): def creating_session(self): self.group_randomly(fixed_id_in_group=True) class Group(BaseGroup): total_bid = models.FloatField() pwin_A = models.FloatField() pwin_B = models.FloatField() chance_A = models.FloatField() chance_B = models.FloatField() Winner_A = models.BooleanField() def set_payoffs(self): A = self.get_player_by_id(1) B = self.get_player_by_id(2) self.total_bid = A.bid + B.bid self.pwin_A = (A.bid / self.total_bid) self.pwin_B = (B.bid / self.total_bid) if random.random() < self.pwin_A: self.Winner_A = True if self.Winner_A: A.is_winner = True B.is_winner = False else: A.is_winner = False B.is_winner = True for player in [A, B]: player.payoff = 50 - player.bid class Player(BasePlayer): bid = models.FloatField( min=0, max=Constants.endowment, doc="""Bid in contest""" ) is_winner = models.BooleanField() def role(self): if self.id_in_group == 1: return 'A' if self.id_in_group == 2: return 'B' def other_player(self): return self.get_others_in_group()[0]