from ssl import RAND_add from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'zikken2' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): Choice1 = models.IntegerField( choices =[ [1, 'A'], [2, 'B'], ], label="選択肢", ) Choice2 = models.IntegerField( choices =[ [1, 'A'], [2, 'B'], ], label="選択肢", ) Choice3 = models.IntegerField( choices =[ [1, 'A'], [2, 'B'], ], label="選択肢", ) Choice4 = models.IntegerField( choices =[ [1, 'A'], [2, 'B'], ], label="選択肢", ) Choice5 = models.IntegerField( choices =[ [1, 'A'], [2, 'B'], ], label="選択肢", ) KOUKAI1 = models.BooleanField() KOUKAI2 = models.BooleanField() KOUKAI3 = models.BooleanField() KOUKAI4 = models.BooleanField() KOUKAI5 = models.BooleanField() groupA = models.IntegerField() Hit = models.IntegerField() A1= models.FloatField() B1 = models.FloatField() A2= models.FloatField() B2 = models.FloatField() A3= models.FloatField() B3 = models.FloatField() A4= models.FloatField() B4 = models.FloatField() A5= models.FloatField() B5 = models.FloatField() points1 = models.IntegerField() points2 = models.IntegerField() points3 = models.IntegerField() points4 = models.IntegerField() points5 = models.IntegerField() counterfactual1 = models.IntegerField() counterfactual2 = models.IntegerField() counterfactual3 = models.IntegerField() counterfactual4 = models.IntegerField() counterfactual5 = models.IntegerField() POINT1 = models.IntegerField() POINT2 = models.IntegerField() POINT3 = models.IntegerField() POINT4 = models.IntegerField() POINT5 = models.IntegerField() SHIPPAI= models.BooleanField() #FANCTION def creating_session(subsession: Subsession): for p in subsession.get_players(): import random p.A1 = random.uniform(0,1) p.B1 = random.uniform(0,1) p.A2 = random.uniform(0,1) p.B2 = random.uniform(0,1) p.A3 = random.uniform(0,1) p.B3 = random.uniform(0,1) p.A4 = random.uniform(0,1) p.B4 = random.uniform(0,1) p.A5 = random.uniform(0,1) p.B5 = random.uniform(0,1) def hit1(player: Player): if player.A1 < 0.5: if player.Choice1 == 1: player.points1 = 700 else: player.counterfactual1 = 700 else: if player.Choice1 == 1: player.points1 = 300 else: player.counterfactual1 = 300 if player.B1 < 0.375: if player.Choice1 == 1: player.counterfactual1 = 1000 else: player.points1 = 1000 else: if player.Choice1 == 1: player.counterfactual1 = 200 else: player.points1 = 200 def WAO1(player: Player): player.KOUKAI1 = bool(player.points1 < player.counterfactual1) player.KOUKAI2 = bool(player.points2 < player.counterfactual2) player.KOUKAI3 = bool(player.points3 < player.counterfactual3) player.KOUKAI4 = bool(player.points4 < player.counterfactual4) player.KOUKAI5 = bool(player.points5 < player.counterfactual5) if player.KOUKAI1 + player.KOUKAI2 + player.KOUKAI3 + player.KOUKAI4 + player.KOUKAI5 >= 3: player.SHIPPAI = 1 else: player.SHIPPAI = 0 def hit2(player: Player): if player.A2 < 0.4: if player.Choice2 == 1: player.points2 = 800 else: player.counterfactual2 = 800 else : if player.Choice2 == 1: player.points2 = 300 else: player.counterfactual2 = 300 if player.B2 < 0.25: if player.Choice2 == 1: player.counterfactual2 = 1000 else: player.points2 = 1000 elif player.B2 >= 0.25 and player.B2 <= 0.5: if player.Choice2 == 1: player.counterfactual2 = 600 else: player.points2 = 600 else : if player.Choice2 == 1: player.counterfactual2 = 200 else: player.points2 = 200 def hit3(player: Player): if player.A3 < 0.5: if player.Choice3 == 1: player.points3 = 800 else: player.counterfactual3 = 800 else : if player.Choice3 == 1: player.points3 = 600 else: player.counterfactual3 = 600 if player.B3 < 0.2: if player.Choice3 == 1: player.counterfactual3 = 2000 else: player.points3 = 2000 else : if player.Choice3 == 1: player.counterfactual3 = 375 else: player.points3 = 375 def hit4(player: Player): if player.A4 < 0.4: if player.Choice4 == 1: player.points4 = 1100 else: player.counterfactual4 = 1100 else : if player.Choice4 == 1: player.points4 = 600 else: player.counterfactual4 = 600 if player.B4 < 0.125: if player.Choice4 == 1: player.counterfactual4 = 2400 else: player.points4 = 2400 elif player.B4 >= 0.125 and player.B4 <= 0.625: if player.Choice4 == 1: player.counterfactual4 = 800 else: player.points4 = 800 else : if player.Choice4 == 1: player.counterfactual4 = 480 else: player.points4 = 480 def hit5(player: Player): if player.A5 < 0.4: if player.Choice5 == 1: player.points5 = 1000 else: player.counterfactual5 = 1000 else : if player.Choice5 == 1: player.points5 = 500 else: player.counterfactual5 = 500 if player.B5 < 0.1: if player.Choice5 == 1: player.counterfactual5 = 2500 else: player.points5 = 2500 elif player.B5 >= 0.2 and player.B5 <= 0.8: if player.Choice5 == 1: player.counterfactual5 = 2000 else: player.points5 = 2000 else : if player.Choice5 == 1: player.counterfactual5 = 200 else: player.points5 = 200 def calc_points(player: Player): player.POINT1 = player.points1 player.POINT2 = player.points1 + player.points2 player.POINT3 = player.points1 + player.points2 + player.points3 player.POINT4 = player.points1 + player.points2 + player.points3 + player.points4 player.POINT5 = player.points1 + player.points2 + player.points3 + player.points4 + player.points5 # PAGES class setsumei(Page): pass class Selection1(Page): form_model = 'player' form_fields = ['Choice1'] @staticmethod def before_next_page(player,timeout_happened): hit1(player) class Selection2(Page): form_model = 'player' form_fields = ['Choice2'] @staticmethod def before_next_page(player,timeout_happened): hit2(player) class Selection3(Page): form_model = 'player' form_fields = ['Choice3'] @staticmethod def before_next_page(player,timeout_happened): hit3(player) class Selection4(Page): form_model = 'player' form_fields = ['Choice4'] @staticmethod def before_next_page(player,timeout_happened): hit4(player) class Selection5(Page): form_model = 'player' form_fields = ['Choice5'] @staticmethod def before_next_page(player,timeout_happened): hit5(player) class beforeResults(Page): @staticmethod def before_next_page(player,timeout_happened): calc_points(player) class Results1(Page): @staticmethod def before_next_page(player,timeout_happened): WAO1(player) class Results2(Page): pass class Results3(Page): pass class Results4(Page): pass class Results5(Page): pass class finalpage(Page): pass page_sequence = [setsumei,Selection1,Selection2,Selection3,Selection4,Selection5,beforeResults,Results1,Results2,Results3,Results4,Results5,finalpage]