import random from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'intervallgame' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 epsilon = 0.05 #hier die Auszahlungen anpassen # 1. Eintrag wird nicht benutzt zahlungen = (0, 3, 6, 9, 7, 10, 18, 12, 20, 23) X1 = zahlungen[1] X2 = zahlungen[2] X3 = zahlungen[3] X4 = zahlungen[4] X5 = zahlungen[5] X6 = zahlungen[6] X7 = zahlungen[7] X8 = zahlungen[8] X9 = zahlungen[9] # Klassen class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): zahlung = models.FloatField(initial=0) alpha11 = models.IntegerField(min=0, max=100) alpha12 = models.IntegerField(min=0, max=100) alpha21 = models.IntegerField(min=0, max=100) alpha22 = models.IntegerField(min=0, max=100) alpha31 = models.IntegerField(min=0, max=100) alpha32 = models.IntegerField(min=0, max=100) alpha41 = models.IntegerField(min=0, max=100) alpha42 = models.IntegerField(min=0, max=100) alpha51 = models.IntegerField(min=0, max=100) alpha52 = models.IntegerField(min=0, max=100) alpha61 = models.IntegerField(min=0, max=100) alpha62 = models.IntegerField(min=0, max=100) alpha71 = models.IntegerField(min=0, max=100) alpha72 = models.IntegerField(min=0, max=100) alpha81 = models.IntegerField(min=0, max=100) alpha82 = models.IntegerField(min=0, max=100) alpha91 = models.IntegerField(min=0, max=100) alpha92 = models.IntegerField(min=0, max=100) lottery = models.IntegerField() roll1 = models.IntegerField() roll2 = models.IntegerField() roll1_cp = models.IntegerField() lower = models.IntegerField(min=0, max=1, initial=0) upper = models.IntegerField(min=0, max=1, initial=1) extra = models.BooleanField(initial=False) take = models.StringField(choices=["Lotterie 1","Lotterie 2"]) pos = models.StringField(initial="") Z1 = models.FloatField(initial=0) ZZ1= models.FloatField(initial=0) Z2 = models.FloatField(initial=0) ZZ2= models.FloatField(initial=0) Z3 = models.FloatField(initial=0) ZZ3= models.FloatField(initial=0) Typ = models.FloatField(initial=0) current = models.IntegerField(initial=1) game = models.IntegerField(initial=1) # Seiten class Begruessung(Page): pass class Erklaer(Page): form_model = 'player' def before_next_page(player, timeout_happened): player.lottery = random.randint(1, 9) # hier wird safe die Lotterie 1 am Ende gespielt # player.lottery = random.randint(6, 6) class Intro(Page): pass class S1(Page): form_model = 'player' form_fields = ['alpha11', 'alpha12'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha11'] > values['alpha12']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current+1 if player.lottery == 1: player.game = player.current-1 player.lower = player.alpha11 player.upper = player.alpha12 player.Z1 = C.zahlungen[1] player.ZZ1 = C.zahlungen[1]-C.epsilon player.Z2 = C.zahlungen[2] player.ZZ2 = C.zahlungen[2]-C.epsilon player.Z3 = C.zahlungen[3] player.ZZ3 = C.zahlungen[3]-C.epsilon player.Typ = 1 class S2(Page): form_model = 'player' form_fields = ['alpha21', 'alpha22'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha21'] > values['alpha22']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 2: player.game = player.current-1 player.lower = player.alpha21 player.upper = player.alpha22 player.Z1 = C.zahlungen[1] player.ZZ1 = C.zahlungen[1] - C.epsilon player.Z2 = C.zahlungen[2] player.ZZ2 = C.zahlungen[2] - C.epsilon player.Z3 = C.zahlungen[3] player.ZZ3 = C.zahlungen[3] - C.epsilon player.Typ = 2 class S3(Page): form_model = 'player' form_fields = ['alpha31', 'alpha32'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha31'] > values['alpha32']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 3: player.game = player.current-1 player.lower = player.alpha31 player.upper = player.alpha32 player.Z1 = C.zahlungen[1] player.ZZ1 = C.zahlungen[1] - C.epsilon player.Z2 = C.zahlungen[2] player.ZZ2 = C.zahlungen[2] - C.epsilon player.Z3 = C.zahlungen[3] player.ZZ3 = C.zahlungen[3] - C.epsilon player.Typ = 3 class S4(Page): form_model = 'player' form_fields = ['alpha41', 'alpha42'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha41'] > values['alpha42']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 4: player.game = player.current-1 player.lower = player.alpha41 player.upper = player.alpha42 player.Z1 = C.zahlungen[4] player.ZZ1 = C.zahlungen[4] - C.epsilon player.Z2 = C.zahlungen[5] player.ZZ2 = C.zahlungen[5] - C.epsilon player.Z3 = C.zahlungen[6] player.ZZ3 = C.zahlungen[6] - C.epsilon player.Typ = 1 class S5(Page): form_model = 'player' form_fields = ['alpha51', 'alpha52'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha51'] > values['alpha52']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 5: player.game = player.current-1 player.lower = player.alpha51 player.upper = player.alpha52 player.Z1 = C.zahlungen[4] player.ZZ1 = C.zahlungen[4] - C.epsilon player.Z2 = C.zahlungen[5] player.ZZ2 = C.zahlungen[5] - C.epsilon player.Z3 = C.zahlungen[6] player.ZZ3 = C.zahlungen[6] - C.epsilon player.Typ = 2 class S6(Page): form_model = 'player' form_fields = ['alpha61', 'alpha62'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha61'] > values['alpha62']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 6: player.game = player.current-1 player.lower = player.alpha61 player.upper = player.alpha62 player.Z1 = C.zahlungen[4] player.ZZ1 = C.zahlungen[4] - C.epsilon player.Z2 = C.zahlungen[5] player.ZZ2 = C.zahlungen[5] - C.epsilon player.Z3 = C.zahlungen[6] player.ZZ3 = C.zahlungen[6] - C.epsilon player.Typ = 3 class S7(Page): form_model = 'player' form_fields = ['alpha71', 'alpha72'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha71'] > values['alpha72']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 7: player.game = player.current-1 player.lower = player.alpha71 player.upper = player.alpha72 player.Z1 = C.zahlungen[7] player.ZZ1 = C.zahlungen[7] - C.epsilon player.Z2 = C.zahlungen[8] player.ZZ2 = C.zahlungen[8] - C.epsilon player.Z3 = C.zahlungen[9] player.ZZ3 = C.zahlungen[9] - C.epsilon player.Typ = 1 class S8(Page): form_model = 'player' form_fields = ['alpha81', 'alpha82'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha81'] > values['alpha82']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 8: player.game = player.current-1 player.lower = player.alpha81 player.upper = player.alpha82 player.Z1 = C.zahlungen[7] player.ZZ1 = C.zahlungen[7] - C.epsilon player.Z2 = C.zahlungen[8] player.ZZ2 = C.zahlungen[8] - C.epsilon player.Z3 = C.zahlungen[9] player.ZZ3 = C.zahlungen[9] - C.epsilon player.Typ = 2 class S9(Page): form_model = 'player' form_fields = ['alpha91', 'alpha92'] @staticmethod def error_message(player, values): print('values is', values) if values['alpha91'] > values['alpha92']: return 'Der erste Wert ist die obere Intervallgrenze. Der zweite Wert ist die untere Intervallgrenze.' @staticmethod def before_next_page(player, timeout_happened): player.current = player.current + 1 if player.lottery == 9: player.game = player.current-1 player.lower = player.alpha91 player.upper = player.alpha92 player.Z1 = C.zahlungen[7] player.ZZ1 = C.zahlungen[7] - C.epsilon player.Z2 = C.zahlungen[8] player.ZZ2 = C.zahlungen[8] - C.epsilon player.Z3 = C.zahlungen[9] player.ZZ3 = C.zahlungen[9] - C.epsilon player.Typ = 3 class wait(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): player.roll2 =random.randint(1, 100) player.roll1 =random.randint(1, 100) #hier stelle ich den Zufall aus und gebe genau die Werte ein, die ich bekommen will # player.roll2 =random.randint(55, 55) # player.roll1 =random.randint(70, 70) player.roll1_cp = 100-player.roll1 if player.roll1 >= player.lower: if player.roll1 <= player.upper: player.extra = True player.pos = "in" else: player.pos = "über" if player.lottery <= 3: if player.roll1 >= player.roll2: player.zahlung = C.zahlungen[3] else: player.zahlung = C.zahlungen[1] elif player.lottery <= 6: if player.roll1 >= player.roll2: player.zahlung = C.zahlungen[6] else: player.zahlung = C.zahlungen[4] else: if player.roll1 >= player.roll2: player.zahlung = C.zahlungen[9] else: player.zahlung = C.zahlungen[7] else: player.pos = "unter" if player.lottery == 1: player.zahlung = C.zahlungen[2] elif player.lottery == 4: player.zahlung = C.zahlungen[5] elif player.lottery == 7: player.zahlung = C.zahlungen[8] elif player.lottery == 2: if player.roll2 >= 51: player.zahlung = C.zahlungen[3] else: player.zahlung = C.zahlungen[2] elif player.lottery == 5: if player.roll2 >= 51: player.zahlung = C.zahlungen[6] else: player.zahlung = C.zahlungen[5] elif player.lottery == 8: if player.roll2 >= 51: player.zahlung = C.zahlungen[9] else: player.zahlung = C.zahlungen[8] elif player.lottery == 3: if player.roll2 >= 51: player.zahlung = C.zahlungen[2] else: player.zahlung = C.zahlungen[1] elif player.lottery == 6: if player.roll2 >= 51: player.zahlung = C.zahlungen[5] else: player.zahlung = C.zahlungen[4] else: if player.roll2 >= 51: player.zahlung = C.zahlungen[8] else: player.zahlung = C.zahlungen[7] #SpielerErgebnis informationsseite class I1(Page): @staticmethod def is_displayed(player): return player.Typ == 1 and not player.extra and not player.pos == "über" form_model = 'player' class I2(Page): @staticmethod def is_displayed(player): return player.Typ == 2 and not player.extra and not player.pos == "über" form_model = 'player' class I3(Page): @staticmethod def is_displayed(player): return player.Typ == 3 and not player.extra and not player.pos == "über" form_model = 'player' class I1h(Page): @staticmethod def is_displayed(player): return player.Typ == 1 and not player.extra and not player.pos == "unter" form_model = 'player' class I2h(Page): @staticmethod def is_displayed(player): return player.Typ == 2 and not player.extra and not player.pos == "unter" form_model = 'player' class I3h(Page): @staticmethod def is_displayed(player): return player.Typ == 3 and not player.extra and not player.pos == "unter" form_model = 'player' class IX1(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 1 form_model = 'player' class IX2(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 2 form_model = 'player' class IX3(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 3 form_model = 'player' class X1(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 1 form_model = 'player' form_fields = ['take'] @staticmethod def before_next_page(player, timeout_happened): player.Z1 = player.Z1 - C.epsilon player.Z2 = player.Z2 - C.epsilon player.Z3 = player.Z3 - C.epsilon if player.take == "Lotterie 2": if player.roll1 >= player.roll2: player.zahlung = player.Z3 else: player.zahlung = player.Z1 else: player.zahlung = player.Z2 class X2(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 2 form_model = 'player' form_fields = ['take'] @staticmethod def before_next_page(player, timeout_happened): player.Z1 = player.Z1 - C.epsilon player.Z2 = player.Z2 - C.epsilon player.Z3 = player.Z3 - C.epsilon if player.take == "Lotterie 2": if player.roll1 >= player.roll2: player.zahlung = player.Z3 else: player.zahlung = player.Z1 else: if player.roll2>51: player.zahlung = player.Z3 else: player.zahlung = player.Z2 class X3(Page): @staticmethod def is_displayed(player): return player.extra and player.Typ == 3 form_model = 'player' form_fields = ['take'] @staticmethod def before_next_page(player, timeout_happened): player.Z1 = player.Z1 - C.epsilon player.Z2 = player.Z2 - C.epsilon player.Z3 = player.Z3 - C.epsilon if player.take == "Lotterie 2": if player.roll1 >= player.roll2: player.zahlung = player.Z3 else: player.zahlung = player.Z1 else: if player.roll2>51: player.zahlung = player.Z2 else: player.zahlung = player.Z1 class R1(Page): @staticmethod def is_displayed(player): if player.field_maybe_none('take') is None: return player.pos == "über" else: return player.take == "Lotterie 2" form_model = 'player' class R2(Page): @staticmethod def is_displayed(player): if player.field_maybe_none('take') is None: return player.Typ == 1 and player.pos == "unter" else: return player.Typ == 1 and player.take == "Lotterie 1" form_model = 'player' class R3(Page): @staticmethod def is_displayed(player): if player.field_maybe_none('take') is None: return player.Typ == 2 and player.pos == "unter" else: return player.Typ == 2 and player.take =="Lotterie 1" form_model = 'player' class R4(Page): @staticmethod def is_displayed(player): if player.field_maybe_none('take') is None: return player.Typ == 3 and player.pos == "unter" else: return player.Typ == 3 and player.take == "Lotterie 1" form_model = 'player' class test(Page): pass page_sequence = [Begruessung, Erklaer, Intro, S5, S9, S2, S6, S7, S3, S4, S8, S1, wait, I1, I2, I3, I1h, I2h, I3h, IX1, IX2, IX3, X1, X2, X3, R1, R2, R3, R4] #page_sequence = [S7, S8, S9,wait, I1, I2, I3, IX1, IX2, IX3, X1, X2, X3, R1, R2, R3, R4]