from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class PDInstructions(Page): timeout_seconds = 100 class PDWaitPage(WaitPage): pass class PD(Page): form_model = 'player' form_fields = ['decision'] #============================================================== # "vars_for_template" gives this page access to information # about the treatment conditions #============================================================== def vars_for_template(self): #players' treatment treatment = self.player.treatment #initializing payoffs both_cooperate_payoff = Constants.both_cooperate_payoff betrayed_payoff = Constants.betrayed_payoff betrayer_payoff = Constants.betrayer_payoff both_defect_payoff = Constants.both_defect_payoff return dict(both_cooperate_payoff = both_cooperate_payoff, betrayed_payoff = betrayed_payoff, betrayer_payoff = betrayer_payoff, both_defect_payoff = both_defect_payoff) class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' class ResultsPD(Page): def vars_for_template(self): me = self.player opponent = me.other_player() #payoffs based on decisions of both if (me.decision == 'Cooperate') & (me.decision == opponent.decision): ego_payoff = Constants.both_cooperate_payoff elif (me.decision == 'Defect') & (me.decision == opponent.decision): ego_payoff = Constants.both_defect_payoff elif (me.decision == 'Defect') & (opponent.decision == 'Cooperate'): ego_payoff = Constants.betrayer_payoff else: ego_payoff = Constants.betrayed_payoff return dict( my_decision=me.decision, opponent_decision=opponent.decision, same_choice=me.decision == opponent.decision, payoff=ego_payoff ) class Survey(Page): form_model = 'player' form_fields = ['gender','age','race'] class Results(Page): pass #the page order page_sequence = [PD, ResultsWaitPage, ResultsPD, Survey, Results]