from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random class FirstWaitPage(WaitPage): wait_for_all_groups = True template_name = 'Coordination_Structure_6/MyWaitPage.html' def is_displayed(self): return self.round_number == 1 body_text = "請等待其他受試者完成練習回合。" class StrategyMethodInitial(Page): def is_displayed(self): return self.round_number == 1 form_model = 'player' form_fields = ['Message1', 'Message2', 'Message3'] def vars_for_template(self): if self.player.group.id_in_subsession == 1: s = 2 else: s = 6 return dict( image_path='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(s) ) def before_next_page(self): if self.player.State_ball == 1: self.player.Message = self.player.Message1 elif self.player.State_ball == 3: self.player.Message = self.player.Message3 else: self.player.Message = self.player.Message2 class StrategyMethod(Page): def is_displayed(self): return self.round_number != 1 form_model = 'player' form_fields = ['Message1', 'Message2', 'Message3'] def vars_for_template(self): if self.player.group.id_in_subsession == 1: s = 2 else: s = 6 return dict( image_path='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(s) ) def js_vars(self): return dict( Message1=self.player.Message1, Message2=self.player.Message2, Message3=self.player.Message3 ) def before_next_page(self): if self.player.State_ball == 1: self.player.Message = self.player.Message1 elif self.player.State_ball == 3: self.player.Message = self.player.Message3 else: self.player.Message = self.player.Message2 class SendMessage(Page): form_model = 'player' form_fields = ['Message'] def vars_for_template(self): return dict( image_path_ball='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.State_ball) ) def js_vars(self): return dict( Message=self.player.Message, ) class MessagesWaitPage(WaitPage): body_text = "請等待其他組員發送訊息。" template_name = 'Coordination_Structure_6/MyWaitPage.html' class ReceiveMessage(Page): form_model = 'player' form_fields = ['Action_ball_1', 'Action_ball_2'] def vars_for_template(self): if self.player.group.id_in_subsession == 1: s = 2 else: s = 6 return dict( image_path='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(s), ) def js_vars(self): if self.player.group.id_in_subsession == 1: s = 2 else: s = 6 return dict( action=s ) class ResultsWaitPage(WaitPage): template_name = 'Coordination_Structure_6/ResultsWaitPage.html' after_all_players_arrive = 'set_payoffs' body_text = "請等待其他組員做出猜測,與此同時,你可以先查看你猜測的結果。" def vars_for_template(self): if self.player.id_in_group == 1: p1 = 2 p2 = 3 elif self.player.id_in_group == 2: p1 = 1 p2 = 3 else: p1 = 1 p2 = 2 return dict( image_path_text_M_A1='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.Action_ball_1), image_path_text_M_A2='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.Action_ball_2), image_path_ball_S1='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p1).State_ball), image_path_ball_S2='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p2).State_ball), ) class Results(Page): # timeout_seconds = 30 def before_next_page(self): if self.round_number == 3: # carry over messages if self.player.group.id_in_subsession == 1: self.participant.vars['Message1'] = self.player.Message1 self.participant.vars['Message2'] = self.player.Message2 self.participant.vars['Message3'] = self.player.Message3 self.participant.vars['Message4'] = "" self.participant.vars['Message5'] = "" self.participant.vars['Message6'] = "" else: self.participant.vars['Message1'] = self.player.Message1 self.participant.vars['Message6'] = self.player.Message2 self.participant.vars['Message3'] = self.player.Message3 self.participant.vars['Message4'] = "" self.participant.vars['Message5'] = "" self.participant.vars['Message2'] = "" def vars_for_template(self): match_payoff = self.player.Match * 4 if self.player.id_in_group == 1: p1 = 2 p2 = 3 elif self.player.id_in_group == 2: p1 = 1 p2 = 3 else: p1 = 1 p2 = 2 if self.player.Action_ball_1 == self.group.get_player_by_id(p1).State_ball: first_action_match = 2 else: first_action_match = 0 if self.player.Action_ball_2 == self.group.get_player_by_id(p2).State_ball: second_action_match = 2 else: second_action_match = 0 if self.player.id_in_group == 3: if self.group.get_player_by_id(p1).Action_ball_2 == self.player.State_ball: first_state_match = 2 else: first_state_match = 0 else: if self.group.get_player_by_id(p1).Action_ball_1 == self.player.State_ball: first_state_match = 2 else: first_state_match = 0 if self.player.id_in_group == 1: if self.group.get_player_by_id(p2).Action_ball_1 == self.player.State_ball: second_state_match = 2 else: second_state_match = 0 else: if self.group.get_player_by_id(p2).Action_ball_2 == self.player.State_ball: second_state_match = 2 else: second_state_match = 0 return dict( image_path_ball_M_S='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.State_ball), image_path_text_M_A1='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.Action_ball_1), image_path_text_M_A2='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format(self.player.Action_ball_2), image_path_ball_S1='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p1).State_ball), image_path_ball_S2='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p2).State_ball), image_path_ball_A1='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p1).Action_ball_2 if self.player.id_in_group == 3 else self.group.get_player_by_id(p1).Action_ball_1), image_path_ball_A2='Coordination_Structure_6/Pic/Symbol_{}.jpg'.format( self.group.get_player_by_id(p2).Action_ball_1 if self.player.id_in_group == 1 else self.group.get_player_by_id(p2).Action_ball_2), first_action_match=first_action_match, second_action_match=second_action_match, first_state_match=first_state_match, second_state_match=second_state_match, match_payoff=match_payoff ) page_sequence = [FirstWaitPage, StrategyMethodInitial, StrategyMethod, SendMessage, MessagesWaitPage, ReceiveMessage, ResultsWaitPage, Results]