from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class StartWait(WaitPage): def is_displayed(self): return self.session.vars["alive"]==True def after_all_players_arrive(self): self.group.set_condition() class First_round(Page): form_model = 'player' form_fields = ['action'] def is_displayed(self): return self.session.vars["alive"]==True def vars_for_template(self): record = [p.action for p in self.player.in_previous_rounds()] record_opponent = [p.action for p in self.player.other_player().in_previous_rounds()] record_condition = [p.condition_public for p in self.player.in_previous_rounds()] record_condition_opponent = [p.condition_public for p in self.player.other_player().in_previous_rounds()] record_punish = [p.punish for p in self.player.in_previous_rounds()] record_punish_opponent = [p.punish for p in self.player.other_player().in_previous_rounds()] record_punish_opponent[:] = ["Don't punish" if x=="nopunish" else "Punish" for x in record_punish_opponent] record_opponent_opponent = [p.action_opponent for p in self.player.other_player().in_previous_rounds()] #filter out cases where self was in private condition record = [record[i] for i in range(len(record)) if record_condition[i] == 'public'] record_punish = [record_punish[i] for i in range(len(record_punish)) if record_condition[i] == 'public'] #filter out cases where opponent was in private condition record_opponent = [record_opponent[i] for i in range(len(record_opponent)) if record_condition_opponent[i] == True] record_punish_opponent = [record_punish_opponent[i] for i in range(len(record_punish_opponent)) if record_condition_opponent[i] == True] record_opponent_opponent = [record_opponent_opponent[i] for i in range(len(record_opponent_opponent)) if record_condition_opponent[i] == True] record_display_opponent = zip(record_opponent, record_opponent_opponent, record_punish_opponent) return dict( record = record, record_punish = record_punish, record_display_opponent = record_display_opponent, condition_opponent = self.player.other_player().condition_public ) class MyWaitPage(WaitPage): def is_displayed(self): return self.session.vars["alive"]==True def after_all_players_arrive(self): self.group.set_payoffs1() class Second_round(Page): form_model = 'player' form_fields = ['punish'] def is_displayed(self): return self.session.vars["alive"]==True def vars_for_template(self): return dict( otheract = self.player.other_player().action, otherpay = self.player.other_player().payoff, condition_opponent = self.player.other_player().condition_public ) class MyWaitPage2(WaitPage): def is_displayed(self): return self.session.vars["alive"]==True def after_all_players_arrive(self): self.group.set_payoffs2() class Results(Page): form_model = 'player' def is_displayed(self): return self.session.vars["alive"]==True def vars_for_template(self): if self.player.punish=="nopunish": selfpun = "Don't punish" else: selfpun = "Punish" if self.player.other_player().punish=="nopunish": otherpun = "Don't punish" else: otherpun = "Punish" return dict( selfpun = selfpun, otherpun = otherpun, otherpay = self.player.other_player().payoff ) class ContinuationWaitPage(WaitPage): wait_for_all_groups = True def is_displayed(self): return self.session.vars["alive"]==True def after_all_players_arrive(self): self.subsession.random_continuation() class Continuation(Page): form_model = 'player' def is_displayed(self): return self.session.vars['alive']==True def vars_for_template(self): return dict(draw = self.session.vars['continuation_draw']) class NoContinutation(Page): form_model = 'player' def is_displayed(self): return self.session.vars['alive']==False & self.session.vars['show']==True def vars_for_template(self): return dict(draw = self.session.vars['continuation_draw']) class ShutdownPage(WaitPage): wait_for_all_groups = True def is_displayed(self): return self.session.vars['alive']==False & self.session.vars['show']==True def after_all_players_arrive(self): self.subsession.shutdown() page_sequence = [StartWait, First_round, MyWaitPage, Second_round, MyWaitPage2, Results, ContinuationWaitPage, Continuation, NoContinutation, ShutdownPage]