from ._builtin import Page, WaitPage from otree.api import Currency as c, currency_range from .models import Constants class Introduction(Page): def is_displayed(self): return self.round_number == 1 timeout_seconds = 600 def before_next_page(self): if self.timeout_happened: self.player.skip = True class Instruction(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['quiz1'] timeout_seconds = 600 def before_next_page(self): if self.timeout_happened: self.player.skip = True class ParticipantsWaitPage(WaitPage): wait_for_all_groups = True body_text = "全プレイヤーが集まるまでしばらくお待ちください。" class Game_contribute_P1(Page): def is_displayed(self): return self.group.treatment == 'Homo40' def vars_for_template(self): return dict( round_number=self.round_number ) form_model = 'player' form_fields = ['contribution1'] timeout_seconds = 20 def before_next_page(self): if self.timeout_happened: self.player.skip = True if self.round_number == 1: self.player.contribution1 = Constants.endowment_1 / 2 else: self.player.contribution1 = self.group.in_round(self.round_number - 1).contribution1_average_history class Game_contribute_P2(Page): def is_displayed(self): return self.group.treatment == 'Homo20' def vars_for_template(self): return dict( round_number=self.round_number ) form_model = 'player' form_fields = ['contribution2'] timeout_seconds = 20 def before_next_page(self): if self.timeout_happened: self.player.skip = True if self.round_number == 1: self.player.contribution2 = Constants.endowment_2 / 2 else: self.player.contribution2 = self.group.in_round(self.round_number - 1).contribution2_average_history class ResultsWaitPage(WaitPage): wait_for_all_groups = True def after_all_players_arrive(self): for g in self.subsession.get_groups(): g.set_payoffs() body_text = "相手の参加者が投資額を決定中です。" class Results(Page): def vars_for_template(self): me = self.player opponent = me.other_player() me.totalpayoff = sum([me.payoff for me in me.in_all_rounds()]) return dict( round_number=self.round_number, opponent_contribution1=opponent.contribution1, opponent_contribution2=opponent.contribution2, opponent_payoff=opponent.payoff ) timeout_seconds = 60 def before_next_page(self): self.group.contributions_average() if self.timeout_happened: self.player.skip = True class Pose(Page): def is_displayed(self): return self.round_number != 3 timeout_seconds = 10 class End(Page): def is_displayed(self): return self.round_number == 3 def vars_for_template(self): me = self.player me.totalpayoff = sum([me.payoff for me in me.in_all_rounds()]) return dict( totalpayoff=me.totalpayoff, money=me.totalpayoff * 4 ) timeout_seconds = 600 def before_next_page(self): if self.timeout_happened: self.player.skip = True page_sequence = [ Introduction, ParticipantsWaitPage, Game_contribute_P1, Game_contribute_P2, ResultsWaitPage, Results, Pose, End ]