from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants class introduction(Page): def before_next_page(self): self.player.set_gomi() #ごみの割り当て (models.py参照) def vars_for_template(self): balances = [p.payoff for p in self.player.in_previous_rounds()] balance = sum(balances) year = self.player.round_number//4 + 1 if self.player.round_number % 4 == 3: season = "秋" elif self.player.round_number % 4 == 2: season = "夏" elif self.player.round_number % 4 == 1: season = "春" elif self.player.round_number % 4 == 0: season = "冬" return dict( balance = Constants.initial - balance, season = season, year = year ) class Page1(Page): form_model = 'player' form_fields = ['normal'] #普通ごみの場合のみ表示 def is_displayed(self): return self.player.gomi != 1 def before_next_page(self): self.player.toxicgomi = 0 class Page2(Page): form_model = 'player' form_fields = ['toxicgomi'] #有害ごみの場合のみ表示 def is_displayed(self): return self.player.gomi == 1 def before_next_page(self): self.player.normal = 0 self.player.inspection = 0 class Page3(Page): form_model = 'player' form_fields = ['inspection'] #普通ごみの場合のみ表示 def is_displayed(self): return self.player.gomi != 1 class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.season() class Page4(Page): pass class Page5(Page): #4ピリオドに1回表示 def is_displayed(self): return self.player.round_number % 4 == 0 def vars_for_template(self): year_ild = [self.player.in_round(self.player.round_number - 3).group.group_detection, self.player.in_round(self.player.round_number - 2).group.group_detection, self.player.in_round(self.player.round_number - 1).group.group_detection, self.player.in_round(self.player.round_number - 0).group.group_detection] year_payoff = [self.player.in_round(self.player.round_number - 3).payoff, self.player.in_round(self.player.round_number - 2).payoff, self.player.in_round(self.player.round_number - 1).payoff, self.player.in_round(self.player.round_number - 0).payoff] year_cost = [self.player.in_round(self.player.round_number - 3).group.group_cost, self.player.in_round(self.player.round_number - 2).group.group_cost, self.player.in_round(self.player.round_number - 1).group.group_cost, self.player.in_round(self.player.round_number - 0).group.group_cost] spring = self.player.in_round(self.player.round_number - 3) summer = self.player.in_round(self.player.round_number - 2) autumn = self.player.in_round(self.player.round_number - 1) winter = self.player.in_round(self.player.round_number - 0) return dict( spring = spring, summer = summer, autumn = autumn, winter = winter, year_ild = sum(year_ild), year_payoff = sum(year_payoff), year_cost = sum(year_cost) ) #発覚しなかった不法投棄ごみを清算 def before_next_page(self): year_costs = [self.player.in_round(self.player.round_number - 3).group.group_cost, self.player.in_round(self.player.round_number - 2).group.group_cost, self.player.in_round(self.player.round_number - 1).group.group_cost, self.player.in_round(self.player.round_number - 0).group.group_cost] year_cost = sum(year_costs) self.player.in_round(self.player.round_number - 0).payoff = self.player.in_round(self.player.round_number - 0).payoff + year_cost class finish(Page): #ゲーム終了時のみ表示 def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): balances = [p.payoff for p in self.player.in_previous_rounds()] balance = sum(balances) return dict( balance=Constants.initial - balance ) page_sequence = [introduction,Page1,Page2,Page3,ResultsWaitPage,Page4,Page5,finish]