from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants #class Introduction(Page): #timeout_seconds = 100 class DecisionWait(WaitPage): wait_for_all_groups = True class DecisionGuess(Page): def is_displayed(self): return self.round_number in [1, 5] form_model = 'player' form_fields = ['decision_guess'] def before_next_page(self): if self.round_number == 1: self.participant.vars['decision_guess_task1_r1'] = self.player.decision_guess self.player.decision_guess_task1_r1 = str(self.participant.vars['decision_guess_task1_r1']) elif self.round_number == 5: self.participant.vars['decision_guess_task1_r5'] = self.player.decision_guess self.player.decision_guess_task1_r5 = str(self.participant.vars['decision_guess_task1_r5']) else: pass class Decision(Page): form_model = 'player' form_fields = ['decision'] def before_next_page(self): if self.round_number == 1: if self.player.decision == 1: self.participant.vars['decision_task1_r1'] = int(1) self.participant.vars['decision_task1_type_r1'] = str("X") else: self.participant.vars['decision_task1_r1'] = int(0) self.participant.vars['decision_task1_type_r1'] = str("Y") self.player.decision_task1_r1 = int(self.participant.vars['decision_task1_r1']) self.player.decision_type = str(self.participant.vars['decision_task1_type_r1']) print(self.participant.vars) elif self.round_number == 2: if self.player.decision == 1: self.participant.vars['decision_task1_r2'] = int(1) self.participant.vars['decision_task1_type_r2'] = str("X") else: self.participant.vars['decision_task1_r2'] = int(0) self.participant.vars['decision_task1_type_r2'] = str("Y") self.player.decision_task1_r2 = int(self.participant.vars['decision_task1_r2']) self.player.decision_type = str(self.participant.vars['decision_task1_type_r2']) elif self.round_number == 3: if self.player.decision == 1: self.participant.vars['decision_task1_r3'] = int(1) self.participant.vars['decision_task1_type_r3'] = str("X") else: self.participant.vars['decision_task1_r3'] = int(0) self.participant.vars['decision_task1_type_r3'] = str("Y") self.player.decision_task1_r3 = int(self.participant.vars['decision_task1_r3']) self.player.decision_type = str(self.participant.vars['decision_task1_type_r3']) elif self.round_number == 4: if self.player.decision == 1: self.participant.vars['decision_task1_r4'] = int(1) self.participant.vars['decision_task1_type_r4'] = str("X") else: self.participant.vars['decision_task1_r4'] = int(0) self.participant.vars['decision_task1_type_r4'] = str("Y") self.player.decision_task1_r4 = int(self.participant.vars['decision_task1_r4']) self.player.decision_type = str(self.participant.vars['decision_task1_type_r4']) else: if self.player.decision == 1: self.participant.vars['decision_task1_r5'] = int(1) self.participant.vars['decision_task1_type_r5'] = str("X") else: self.participant.vars['decision_task1_r5'] = int(0) self.participant.vars['decision_task1_type_r5'] = str("Y") self.player.decision_task1_r5 = int(self.participant.vars['decision_task1_r5']) self.player.decision_type = str(self.participant.vars['decision_task1_type_r5']) # class ResultsWaitPage2(WaitPage): # after_all_players_arrive = 'set_cooprates' class ResultsWaitPage1(WaitPage): wait_for_all_groups = True class ResultsWaitPage2(WaitPage): after_all_players_arrive = 'set_payoffs' class Results(Page): def vars_for_template(self): me = self.player opponent = me.other_player() return dict( my_decision=me.decision_type, opponent_decision=opponent.decision_type, same_choice=me.decision_type == opponent.decision_type, ) def before_next_page(self): if self.round_number == 1: self.player.participant.vars['payoff_task1_r1_int'] = int(self.player.payoff_int) self.player.total_coop_s1 = sum([p.decision for p in self.subsession.get_players() if p.role() == '1']) self.player.total_coop_s2 = sum([p.decision for p in self.subsession.get_players() if p.role() == '2']) self.player.total_coop_s3 = sum([p.decision for p in self.subsession.get_players() if p.role() == '3']) self.player.total_coop_s4 = sum([p.decision for p in self.subsession.get_players() if p.role() == '4']) self.player.coop_rate_s1 = int(self.player.total_coop_s1/Constants.players_per_supergroup*100) self.player.coop_rate_s2 = int(self.player.total_coop_s2/Constants.players_per_supergroup*100) self.player.coop_rate_s3 = int(self.player.total_coop_s3/Constants.players_per_supergroup*100) self.player.coop_rate_s4 = int(self.player.total_coop_s4/Constants.players_per_supergroup*100) if self.player.supergroup_task1 == '1': self.participant.vars['total_coop_r1'] = self.player.total_coop_s1 self.player.participant.vars['cooprate_task1_r1'] = self.player.coop_rate_s1 elif self.player.supergroup_task1 == '2': self.player.participant.vars['cooprate_task1_r1'] = self.player.coop_rate_s2 self.participant.vars['total_coop_r1'] = self.player.total_coop_s2 elif self.player.supergroup_task1 == '3': self.player.participant.vars['cooprate_task1_r1'] = self.player.coop_rate_s3 self.participant.vars['total_coop_r1'] = self.player.total_coop_s3 else: self.player.participant.vars['cooprate_task1_r1'] = self.player.coop_rate_s4 self.participant.vars['total_coop_r1'] = self.player.total_coop_s4 self.player.cooprate_task1_r1 = self.player.participant.vars['cooprate_task1_r1'] print(self.participant.vars) elif self.round_number == 2: self.player.participant.vars['payoff_task1_r2_int'] = int(self.player.payoff_int) self.player.total_coop_s1 = sum([p.decision for p in self.subsession.get_players() if p.role() == '1']) self.player.total_coop_s2 = sum([p.decision for p in self.subsession.get_players() if p.role() == '2']) self.player.total_coop_s3 = sum([p.decision for p in self.subsession.get_players() if p.role() == '3']) self.player.total_coop_s4 = sum([p.decision for p in self.subsession.get_players() if p.role() == '4']) self.player.coop_rate_s1 = int(self.player.total_coop_s1 / Constants.players_per_supergroup * 100) self.player.coop_rate_s2 = int(self.player.total_coop_s2 / Constants.players_per_supergroup * 100) self.player.coop_rate_s3 = int(self.player.total_coop_s3 / Constants.players_per_supergroup * 100) self.player.coop_rate_s4 = int(self.player.total_coop_s4 / Constants.players_per_supergroup * 100) if self.player.supergroup_task1 == '1': self.participant.vars['total_coop_r2'] = self.player.total_coop_s1 self.player.participant.vars['cooprate_task1_r2'] = self.player.coop_rate_s1 elif self.player.supergroup_task1 == '2': self.player.participant.vars['cooprate_task1_r2'] = self.player.coop_rate_s2 self.participant.vars['total_coop_r2'] = self.player.total_coop_s2 elif self.player.supergroup_task1 == '3': self.player.participant.vars['cooprate_task1_r2'] = self.player.coop_rate_s3 self.participant.vars['total_coop_r2'] = self.player.total_coop_s3 else: self.player.participant.vars['cooprate_task1_r2'] = self.player.coop_rate_s4 self.participant.vars['total_coop_r2'] = self.player.total_coop_s4 self.player.cooprate_task1_r2 = self.player.participant.vars['cooprate_task1_r2'] elif self.round_number == 3: self.player.participant.vars['payoff_task1_r3_int'] = int(self.player.payoff_int) self.player.total_coop_s1 = sum([p.decision for p in self.subsession.get_players() if p.role() == '1']) self.player.total_coop_s2 = sum([p.decision for p in self.subsession.get_players() if p.role() == '2']) self.player.total_coop_s3 = sum([p.decision for p in self.subsession.get_players() if p.role() == '3']) self.player.total_coop_s4 = sum([p.decision for p in self.subsession.get_players() if p.role() == '4']) self.player.coop_rate_s1 = int(self.player.total_coop_s1 / Constants.players_per_supergroup * 100) self.player.coop_rate_s2 = int(self.player.total_coop_s2 / Constants.players_per_supergroup * 100) self.player.coop_rate_s3 = int(self.player.total_coop_s3 / Constants.players_per_supergroup * 100) self.player.coop_rate_s4 = int(self.player.total_coop_s4 / Constants.players_per_supergroup * 100) if self.player.supergroup_task1 == '1': self.participant.vars['total_coop_r3'] = self.player.total_coop_s1 self.player.participant.vars['cooprate_task1_r3'] = self.player.coop_rate_s1 elif self.player.supergroup_task1 == '2': self.player.participant.vars['cooprate_task1_r3'] = self.player.coop_rate_s2 self.participant.vars['total_coop_r3'] = self.player.total_coop_s2 elif self.player.supergroup_task1 == '3': self.player.participant.vars['cooprate_task1_r3'] = self.player.coop_rate_s3 self.participant.vars['total_coop_r3'] = self.player.total_coop_s3 else: self.player.participant.vars['cooprate_task1_r3'] = self.player.coop_rate_s4 self.participant.vars['total_coop_r3'] = self.player.total_coop_s4 self.player.cooprate_task1_r3 = self.player.participant.vars['cooprate_task1_r3'] elif self.round_number == 4: self.player.participant.vars['payoff_task1_r4_int'] = int(self.player.payoff_int) self.player.total_coop_s1 = sum([p.decision for p in self.subsession.get_players() if p.role() == '1']) self.player.total_coop_s2 = sum([p.decision for p in self.subsession.get_players() if p.role() == '2']) self.player.total_coop_s3 = sum([p.decision for p in self.subsession.get_players() if p.role() == '3']) self.player.total_coop_s4 = sum([p.decision for p in self.subsession.get_players() if p.role() == '4']) self.player.coop_rate_s1 = int(self.player.total_coop_s1 / Constants.players_per_supergroup * 100) self.player.coop_rate_s2 = int(self.player.total_coop_s2 / Constants.players_per_supergroup * 100) self.player.coop_rate_s3 = int(self.player.total_coop_s3 / Constants.players_per_supergroup * 100) self.player.coop_rate_s4 = int(self.player.total_coop_s4 / Constants.players_per_supergroup * 100) if self.player.supergroup_task1 == '1': self.participant.vars['total_coop_r4'] = self.player.total_coop_s1 self.player.participant.vars['cooprate_task1_r4'] = self.player.coop_rate_s1 elif self.player.supergroup_task1 == '2': self.player.participant.vars['cooprate_task1_r4'] = self.player.coop_rate_s2 self.participant.vars['total_coop_r4'] = self.player.total_coop_s2 elif self.player.supergroup_task1 == '3': self.player.participant.vars['cooprate_task1_r4'] = self.player.coop_rate_s3 self.participant.vars['total_coop_r4'] = self.player.total_coop_s3 else: self.player.participant.vars['cooprate_task1_r4'] = self.player.coop_rate_s4 self.participant.vars['total_coop_r4'] = self.player.total_coop_s4 self.player.cooprate_task1_r4 = self.player.participant.vars['cooprate_task1_r4'] else: self.player.participant.vars['payoff_task1_r5_int'] = int(self.player.payoff_int) self.player.total_coop_s1 = sum([p.decision for p in self.subsession.get_players() if p.role() == '1']) self.player.total_coop_s2 = sum([p.decision for p in self.subsession.get_players() if p.role() == '2']) self.player.total_coop_s3 = sum([p.decision for p in self.subsession.get_players() if p.role() == '3']) self.player.total_coop_s4 = sum([p.decision for p in self.subsession.get_players() if p.role() == '4']) self.player.coop_rate_s1 = int(self.player.total_coop_s1 / Constants.players_per_supergroup * 100) self.player.coop_rate_s2 = int(self.player.total_coop_s2 / Constants.players_per_supergroup * 100) self.player.coop_rate_s3 = int(self.player.total_coop_s3 / Constants.players_per_supergroup * 100) self.player.coop_rate_s4 = int(self.player.total_coop_s4 / Constants.players_per_supergroup * 100) if self.player.supergroup_task1 == '1': self.participant.vars['total_coop_r5'] = self.player.total_coop_s1 self.player.participant.vars['cooprate_task1_r5'] = self.player.coop_rate_s1 elif self.player.supergroup_task1 == '2': self.player.participant.vars['cooprate_task1_r5'] = self.player.coop_rate_s2 self.participant.vars['total_coop_r5'] = self.player.total_coop_s2 elif self.player.supergroup_task1 == '3': self.player.participant.vars['cooprate_task1_r5'] = self.player.coop_rate_s3 self.participant.vars['total_coop_r5'] = self.player.total_coop_s3 else: self.player.participant.vars['cooprate_task1_r5'] = self.player.coop_rate_s4 self.participant.vars['total_coop_r5'] = self.player.total_coop_s4 self.player.cooprate_task1_r5 = self.player.participant.vars['cooprate_task1_r5'] print(self.participant.vars) page_sequence = [ DecisionWait, DecisionGuess, Decision, ResultsWaitPage1, ResultsWaitPage2, Results ]