import random as R from otree.api import * author = 'Corey Scheinfeld' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'cooperative' players_per_group = 2 num_rounds = 2 instructions_template = 'cooperative/instructions.html' instructions_template2 = 'cooperative/part2.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): my_page_timeout_seconds = models.IntegerField(initial=300) offer_accepted = models.BooleanField() lottery_value = models.FloatField() chance = models.IntegerField() give = models.IntegerField(initial=0) keep = models.IntegerField(initial=0) # FUNCTIONS def creating_session(subsession: Subsession): subsession.group_randomly() groups = subsession.get_groups() for g in groups: players = g.get_players() for p in players: if p.id_in_group == 1: p.lottery_value = 1.25 if p.id_in_group == 2: p.lottery_value = 3.75 def live_auction(player: Player, data): id_in_group = player.id_in_group other = player.get_others_in_group()[0] if data == 'game_finished': player.keep = int(other.give) player.give = int(other.keep) return {0: data} d0 = int(data[0]) d1 = int(data[1]) if d0 + d1 != 100: return {id_in_group: 'error'} else: player.keep = d0 player.give = d1 return {3 - id_in_group: data} def set_payoffs(group: Group): players = group.get_players() for p in players: p.chance = R.randint(1, 100) if p.chance <= p.keep: p.payoff = p.lottery_value else: p.payoff = 0 # PAGES class Introduction(Page): pass class auction_wait(WaitPage): @staticmethod def after_all_players_arrive(group: Group): pass class auction(Page): live_method = live_auction @staticmethod def get_timeout_seconds(player: Player): return player.my_page_timeout_seconds class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): pass page_sequence = [Introduction, auction_wait, auction, ResultsWaitPage, Results]