from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants # 実験の説明をする処理 class Introduction(Page): # ラウンド1の時だけ表示する def is_displayed(self): return self.round_number == 1 # 実験参加者が全員参加するのを待つ class EnterWaitPage(WaitPage): after_all_players_arrive = 'setdata' # マスクの購入をする処理 class Send(Page): # フォームに使う内容 # マスクの購入枚数 form_model = 'player' form_fields = ['sent_amount'] # マスクの購入枚数入力がおわった後にする処理 # 購入できたかランダムに決めるとか,感染がどうとか class SendBackWaitPage(WaitPage): after_all_players_arrive = 'purchase' # マスクが購入できた人に対して,マスクを使用するのかどうか尋ねる class SendBack(Page): # ここからはフォームに使う内容 # マスクを使用するか否か form_model = 'player' form_fields = ['sent_back_amount'] #ここで購入決定者にのみ表示するように設定(ここ) def is_displayed(self): # buyer リストの中身がマスクを購入できた人のID buyer = [] for each_player in self.group.get_players() : if each_player.new_mask_num > 0 : buyer.append( each_player.id_in_group ) # 購入できた人にだけマスクを使うのか問う return self.player.id_in_group in buyer # 全員訪ね終わったら,決算とかして色々処理 class ResultsWaitPage(WaitPage): # ここで各試行の最終集計 after_all_players_arrive = 'set_payoffs' # 最終的に,1回の試行での結果を表示 class Results(Page): # 最終ラウンドの時にいらない文字列を表示しないようにするため def vars_for_template(self): show_page = 0 if self.round_number != Constants.num_rounds : show_page = 1 return dict( show_page = show_page ) # 全員訪ね終わったら,最終決算処理 class SummaryWaitPage(WaitPage): after_all_players_arrive = 'summary' def is_displayed(self): return self.round_number == Constants.num_rounds #最終的な決算結果を表示 class Summary(Page): def is_displayed(self): return self.round_number == Constants.num_rounds # page の遷移の流れ (1回の試行) # Introduction : 実験概要 # Send,SendBackWaitPage : マスクの購入処理 # (購入可能だったかどうかで表示するかしないか変更) # SendBack,ResultsWaitPage : マスクを使用するかしないかを確認 # Results : 各試行ごとでの結果を表示 # ResultsSummary : ここで結果を表示する page_sequence = [ Introduction, EnterWaitPage, Send, SendBackWaitPage, SendBack, ResultsWaitPage, Results, SummaryWaitPage, Summary, ]