from otree.api import * c = cu doc = '\nThis is a one-shot "Prisoner\'s Dilemma". Two players are asked separately\nwhether they want to cooperate or defect. Their choices directly determine the\npayoffs.\n' class C(BaseConstants): NAME_IN_URL = 'dice' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 PAYOFF_A = cu(300) PAYOFF_B = cu(200) PAYOFF_C = cu(100) PAYOFF_D = cu(0) INSTRUCTIONS_TEMPLATE = 'dice/instructions.html' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def set_payoffs(group: Group): for player in group.get_players(): player.payoff = 0 class Player(BasePlayer): chose_number = models.IntegerField(label='Chose number', max=30, min=5) diced_number = models.IntegerField(initial=5, max=30, min=5) def other_player(player: Player): group = player.group return player.get_others_in_group()[0] def set_payoff(player: Player): pass class Introduction(Page): form_model = 'player' class Decision(Page): form_model = 'player' form_fields = ['chose_number', 'diced_number'] class ResultsWaitPage(WaitPage): after_all_players_arrive = set_payoffs class Results(Page): form_model = 'player' @staticmethod def vars_for_template(player: Player): opponent = other_player(player) return dict( opponent=opponent, won=player.chose_number > opponent.chose_number #same_choice=player.cooperate == opponent.cooperate, #my_decision=player.field_display('cooperate'), #opponent_decision=opponent.field_display('cooperate'), ) page_sequence = [Introduction, Decision, ResultsWaitPage, Results]