from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'stag_hunt_game' PLAYERS_PER_GROUP = 2 NUM_ROUNDS = 1 STAG = 100000 HARE = 50000 MISMATCH = 0 class Subsession(BaseSubsession): pass class Group(BaseGroup): def set_payoffs(self): h_1 = self.get_player_by_role('Hunter_1') h_2 = self.get_player_by_role('Hunter_2') if h_1.flag == 1 and h_2.flag == 1: h_1.payoff = C.STAG h_2.payoff = C.STAG elif h_1.flag == 0 and h_2.flag == 0: h_1.payoff = C.HARE h_2.payoff = C.HARE else: h_1.payoff = C.MISMATCH h_2.payoff = C.MISMATCH class Player(BasePlayer): flag = models.BooleanField(label='どちらに投資するかお答えください', choices=[[0,'B社'],[1,'A社']], widget=widgets.RadioSelect) def role(self): if self.id_in_group == 1: return 'Hunter_1' if self.id_in_group == 2: return 'Hunter_2' def other_player(self): return self.get_others_in_group()[0] age = models.IntegerField(label='あなたの年齢をお書きください') gender = models.IntegerField(label='あなたの性別を選択してください', choices = [[1,'男'],[2,'女'],[1,'その他'],], widget= widgets.RadioSelect) flag_2 = models.IntegerField(label='予想してください', choices = [[1,'A 社'],[2,'B 社']], widget= widgets.RadioSelect) faculty = models.IntegerField(label='あなたの学部を選択してください', choices = [[1,'文学部'],[2,'教育学部'],[3,'心理学部'],[4,'現代ビジネス学部'],[5,'家政学部'],[6,'薬学部'],[7,'看護学部']], widget = widgets.RadioSelect ) riskA = models.IntegerField( label='問1', choices=[[0,'1/10で300円か9/10で250円'],[1,'1/10で500円か9/10で50円']], widget=widgets.RadioSelect ) riskB = models.IntegerField( label='問2', choices=[[0,'2/10で300円か8/10で250円'],[1,'2/10で500円か8/10で50円']], widget=widgets.RadioSelect ) riskC = models.IntegerField( label='問3', choices=[[0,'3/10で300円か7/10で250円'],[1,'3/10で500円か7/10で50円']], widget=widgets.RadioSelect ) riskD = models.IntegerField( label='問4', choices=[[0,'4/10で300円か6/10で250円'],[1,'4/10で500円か7/10で50円']], widget=widgets.RadioSelect ) riskE = models.IntegerField( label='問5', choices=[[0,'5/10で300円か5/10で250円'],[1,'5/10で500円か5/10で50円']], widget=widgets.RadioSelect ) riskF = models.IntegerField( label='問6', choices=[[0,'6/10で300円か4/10で250円'],[1,'6/10で500円か4/10で50円']], widget=widgets.RadioSelect ) riskG = models.IntegerField( label='問7', choices=[[0,'7/10で300円か3/10で250円'],[1,'7/10で500円か3/10で50円']], widget=widgets.RadioSelect ) riskH = models.IntegerField( label='問8', choices=[[0,'8/10で300円か2/10で250円'],[1,'8/10で500円か2/10で50円']], widget=widgets.RadioSelect ) riskI = models.IntegerField( label='問9', choices=[[0,'9/10で300円か1/10で250円'],[1,'9/10で500円か1/10で50円']], widget=widgets.RadioSelect ) riskJ = models.IntegerField( label='問10', choices=[[0,'10/10で300円か0/10で250円'],[1,'10/10で500円か0/10で50円']], widget=widgets.RadioSelect ) emotion01_1 = models.BooleanField(blank=True) emotion02_1 = models.BooleanField(blank=True) emotion03_1 = models.BooleanField(blank=True) emotion04_1 = models.BooleanField(blank=True) emotion05_1 = models.BooleanField(blank=True) emotion06_1 = models.BooleanField(blank=True) emotion07_1 = models.BooleanField(blank=True) emotion08_1 = models.BooleanField(blank=True) emotion09_1 = models.BooleanField(blank=True) emotion10_1 = models.BooleanField(blank=True) emotion11_1 = models.BooleanField(blank=True) emotion12_1 = models.BooleanField(blank=True) emotion13_1 = models.BooleanField(blank=True) emotion14_1 = models.BooleanField(blank=True) emotion15_1 = models.BooleanField(blank=True) emotion16_1 = models.BooleanField(blank=True) emotion17_1 = models.BooleanField(blank=True) emotion18_1 = models.BooleanField(blank=True) emotion19_1 = models.BooleanField(blank=True) emotion20_1 = models.BooleanField(blank=True) emotion21_1 = models.BooleanField(blank=True) emotion22_1 = models.BooleanField(blank=True) emotion23_1 = models.BooleanField(blank=True) emotion24_1 = models.BooleanField(blank=True) emotion25_1 = models.BooleanField(blank=True) emotion26_1 = models.BooleanField(blank=True) emotion27_1 = models.BooleanField(blank=True) emotion28_1 = models.BooleanField(blank=True) emotion29_1 = models.BooleanField(blank=True) emotion30_1 = models.BooleanField(blank=True) emotion31_1 = models.BooleanField(blank=True) emotion32_1 = models.BooleanField(blank=True) emotion33_1 = models.BooleanField(blank=True) emotion34_1 = models.BooleanField(blank=True) emotion35_1 = models.BooleanField(blank=True) emotion36_1 = models.BooleanField(blank=True) emotion37_1 = models.BooleanField(blank=True) emotion38_1 = models.BooleanField(blank=True) emotion39_1 = models.BooleanField(blank=True) emotion40_1 = models.BooleanField(blank=True) emotion41_1 = models.BooleanField(blank=True) emotion42_1 = models.BooleanField(blank=True) emotion43_1 = models.BooleanField(blank=True) emotion44_1 = models.BooleanField(blank=True) emotion45_1 = models.BooleanField(blank=True) emotion46_1 = models.BooleanField(blank=True) emotion47_1 = models.BooleanField(blank=True) emotion48_1 = models.BooleanField(blank=True) emotion49_1 = models.BooleanField(blank=True) emotion50_1 = models.BooleanField(blank=True) emotion51_1 = models.BooleanField(blank=True) emotion52_1 = models.BooleanField(blank=True) emotion53_1 = models.BooleanField(blank=True) emotion54_1 = models.BooleanField(blank=True) emotion55_1 = models.BooleanField(blank=True) emotion56_1 = models.BooleanField(blank=True) emotion57_1 = models.BooleanField(blank=True) emotion58_1 = models.BooleanField(blank=True) emotion59_1 = models.BooleanField(blank=True) emotion60_1 = models.BooleanField(blank=True) emotion61_1 = models.BooleanField(blank=True) emotion62_1 = models.BooleanField(blank=True) emotion63_1 = models.BooleanField(blank=True) emotion64_1 = models.BooleanField(blank=True) emotion65_1 = models.BooleanField(blank=True) emotion66_1 = models.BooleanField(blank=True) emotion67_1 = models.BooleanField(blank=True) emotion68_1 = models.BooleanField(blank=True) emotion69_1 = models.BooleanField(blank=True) emotion70_1 = models.BooleanField(blank=True) emotion71_1 = models.BooleanField(blank=True) emotion72_1 = models.BooleanField(blank=True) emotion73_1 = models.BooleanField(blank=True) emotion74_1 = models.BooleanField(blank=True) emotion75_1 = models.BooleanField(blank=True) emotion76_1 = models.BooleanField(blank=True) emotion77_1 = models.BooleanField(blank=True) emotion78_1 = models.BooleanField(blank=True) emotion79_1 = models.BooleanField(blank=True) emotion80_1 = models.BooleanField(blank=True) emotion01_2 = models.BooleanField(blank=True) emotion02_2 = models.BooleanField(blank=True) emotion03_2 = models.BooleanField(blank=True) emotion04_2 = models.BooleanField(blank=True) emotion05_2 = models.BooleanField(blank=True) emotion06_2 = models.BooleanField(blank=True) emotion07_2 = models.BooleanField(blank=True) emotion08_2 = models.BooleanField(blank=True) emotion09_2 = models.BooleanField(blank=True) emotion10_2 = models.BooleanField(blank=True) emotion11_2 = models.BooleanField(blank=True) emotion12_2 = models.BooleanField(blank=True) emotion13_2 = models.BooleanField(blank=True) emotion14_2 = models.BooleanField(blank=True) emotion15_2 = models.BooleanField(blank=True) emotion16_2 = models.BooleanField(blank=True) emotion17_2 = models.BooleanField(blank=True) emotion18_2 = models.BooleanField(blank=True) emotion19_2 = models.BooleanField(blank=True) emotion20_2 = models.BooleanField(blank=True) emotion21_2 = models.BooleanField(blank=True) emotion22_2 = models.BooleanField(blank=True) emotion23_2 = models.BooleanField(blank=True) emotion24_2 = models.BooleanField(blank=True) emotion25_2 = models.BooleanField(blank=True) emotion26_2 = models.BooleanField(blank=True) emotion27_2 = models.BooleanField(blank=True) emotion28_2 = models.BooleanField(blank=True) emotion29_2 = models.BooleanField(blank=True) emotion30_2 = models.BooleanField(blank=True) emotion31_2 = models.BooleanField(blank=True) emotion32_2 = models.BooleanField(blank=True) emotion33_2 = models.BooleanField(blank=True) emotion34_2 = models.BooleanField(blank=True) emotion35_2 = models.BooleanField(blank=True) emotion36_2 = models.BooleanField(blank=True) emotion37_2 = models.BooleanField(blank=True) emotion38_2 = models.BooleanField(blank=True) emotion39_2 = models.BooleanField(blank=True) emotion40_2 = models.BooleanField(blank=True) emotion41_2 = models.BooleanField(blank=True) emotion42_2 = models.BooleanField(blank=True) emotion43_2 = models.BooleanField(blank=True) emotion44_2 = models.BooleanField(blank=True) emotion45_2 = models.BooleanField(blank=True) emotion46_2 = models.BooleanField(blank=True) emotion47_2 = models.BooleanField(blank=True) emotion48_2 = models.BooleanField(blank=True) emotion49_2 = models.BooleanField(blank=True) emotion50_2 = models.BooleanField(blank=True) emotion51_2 = models.BooleanField(blank=True) emotion52_2 = models.BooleanField(blank=True) emotion53_2 = models.BooleanField(blank=True) emotion54_2 = models.BooleanField(blank=True) emotion55_2 = models.BooleanField(blank=True) emotion56_2 = models.BooleanField(blank=True) emotion57_2 = models.BooleanField(blank=True) emotion58_2 = models.BooleanField(blank=True) emotion59_2 = models.BooleanField(blank=True) emotion60_2 = models.BooleanField(blank=True) emotion61_2 = models.BooleanField(blank=True) emotion62_2 = models.BooleanField(blank=True) emotion63_2 = models.BooleanField(blank=True) emotion64_2 = models.BooleanField(blank=True) emotion65_2 = models.BooleanField(blank=True) emotion66_2 = models.BooleanField(blank=True) emotion67_2 = models.BooleanField(blank=True) emotion68_2 = models.BooleanField(blank=True) emotion69_2 = models.BooleanField(blank=True) emotion70_2 = models.BooleanField(blank=True) emotion71_2 = models.BooleanField(blank=True) emotion72_2 = models.BooleanField(blank=True) emotion73_2 = models.BooleanField(blank=True) emotion74_2 = models.BooleanField(blank=True) emotion75_2 = models.BooleanField(blank=True) emotion76_2 = models.BooleanField(blank=True) emotion77_2 = models.BooleanField(blank=True) emotion78_2 = models.BooleanField(blank=True) emotion79_2 = models.BooleanField(blank=True) emotion80_2 = models.BooleanField(blank=True) description = models.StringField() description2 = models.StringField() def creating_session(subsession): subsession.group_randomly() # PAGES class FirstPage(Page): @staticmethod def is_displayed(player): return player.round_number == 1 class MyPage(Page): form_model='player' form_fields=['flag'] class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def vars_for_template(player): opponent = player.other_player() return dict( my_flag=player.flag, opponent_flag=opponent.flag, ) class ShuffleWaitPage(WaitPage): wait_for_all_groups = True class Finish(Page): @staticmethod def is_displayed(player): return player.round_number == C.NUM_ROUNDS class SecondPage(Page): pass class WaitPage1(WaitPage): pass class Risk(Page): form_model='player' form_fields=['riskA','riskB','riskC','riskD','riskE','riskF','riskG','riskH','riskI','riskJ'] class Emotion_1(Page): form_model='player' form_fields=['emotion01_1','emotion02_1','emotion03_1','emotion04_1','emotion05_1', 'emotion06_1','emotion07_1','emotion08_1','emotion09_1','emotion10_1', 'emotion11_1','emotion12_1','emotion13_1','emotion14_1','emotion15_1', 'emotion16_1','emotion17_1','emotion18_1','emotion19_1','emotion20_1', 'emotion21_1','emotion22_1','emotion23_1','emotion24_1','emotion25_1', 'emotion26_1','emotion27_1','emotion28_1','emotion29_1','emotion30_1', 'emotion31_1','emotion32_1','emotion33_1','emotion34_1','emotion35_1', 'emotion36_1','emotion37_1','emotion38_1','emotion39_1','emotion40_1', 'emotion41_1','emotion42_1','emotion43_1','emotion44_1','emotion45_1', 'emotion46_1','emotion47_1','emotion48_1','emotion49_1','emotion50_1', 'emotion51_1','emotion52_1','emotion53_1','emotion54_1','emotion55_1', 'emotion56_1','emotion57_1','emotion58_1','emotion59_1','emotion60_1', 'emotion61_1','emotion62_1','emotion63_1','emotion64_1','emotion65_1', 'emotion66_1','emotion67_1','emotion68_1','emotion69_1','emotion70_1', 'emotion71_1','emotion72_1','emotion73_1','emotion74_1','emotion75_1', 'emotion76_1','emotion77_1','emotion78_1','emotion79_1','emotion80_1','description'] class Emotion_2(Page): form_model='player' form_fields=['emotion01_2','emotion02_2','emotion03_2','emotion04_2','emotion05_2', 'emotion06_2','emotion07_2','emotion08_2','emotion09_2','emotion10_2', 'emotion11_2','emotion12_2','emotion13_2','emotion14_2','emotion15_2', 'emotion16_2','emotion17_2','emotion18_2','emotion19_2','emotion20_2', 'emotion21_2','emotion22_2','emotion23_2','emotion24_2','emotion25_2', 'emotion26_2','emotion27_2','emotion28_2','emotion29_2','emotion30_2', 'emotion31_2','emotion32_2','emotion33_2','emotion34_2','emotion35_2', 'emotion36_2','emotion37_2','emotion38_2','emotion39_2','emotion40_2', 'emotion41_2','emotion42_2','emotion43_2','emotion44_2','emotion45_2', 'emotion46_2','emotion47_2','emotion48_2','emotion49_2','emotion50_2', 'emotion51_2','emotion52_2','emotion53_2','emotion54_2','emotion55_2', 'emotion56_2','emotion57_2','emotion58_2','emotion59_2','emotion60_2', 'emotion61_2','emotion62_2','emotion63_2','emotion64_2','emotion65_2', 'emotion66_2','emotion67_2','emotion68_2','emotion69_2','emotion70_2', 'emotion71_2','emotion72_2','emotion73_2','emotion74_2','emotion75_2', 'emotion76_2','emotion77_2','emotion78_2','emotion79_2','emotion80_2','description2'] class Zokusei(Page): form_model='player' form_fields=['age','gender','faculty'] class Douisyo(Page): form_model='player' form_fields='' class Yosou(Page): form_model='player' form_fields=['flag_2'] class ThirdPage(Page): pass class WaitingPage2(Page): pass page_sequence = [Douisyo,Zokusei, Risk,SecondPage,WaitPage1,Emotion_1, FirstPage,ThirdPage,WaitPage1,Yosou,WaitPage1, MyPage, ResultsWaitPage, Results,WaitingPage2,Emotion_2,ShuffleWaitPage,Finish] ##