from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'math_challenge' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 payment_per_correct_answer = cu(1) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): score = models.IntegerField() sum_guessed1 = models.IntegerField() actual_sum1 = models.IntegerField() sum_guessed2 = models.IntegerField() actual_sum2 = models.IntegerField() sum_guessed3 = models.IntegerField() actual_sum3 = models.IntegerField() sum_guessed4 = models.IntegerField() actual_sum4 = models.IntegerField() sum_guessed5 = models.IntegerField() actual_sum5 = models.IntegerField() sum_guessed6 = models.IntegerField() actual_sum6 = models.IntegerField() sum_guessed7 = models.IntegerField() actual_sum7 = models.IntegerField() sum_guessed8 = models.IntegerField() actual_sum8 = models.IntegerField() sum_guessed9 = models.IntegerField() actual_sum9 = models.IntegerField() sum_guessed10 = models.IntegerField() actual_sum10 = models.IntegerField() sum_guessed11 = models.IntegerField() actual_sum11 = models.IntegerField() sum_guessed12 = models.IntegerField() actual_sum12 = models.IntegerField() sum_guessed13 = models.IntegerField() actual_sum13 = models.IntegerField() sum_guessed14 = models.IntegerField() actual_sum14 = models.IntegerField() sum_guessed15 = models.IntegerField() actual_sum15 = models.IntegerField() sum_guessed16 = models.IntegerField() actual_sum16 = models.IntegerField() sum_guessed17 = models.IntegerField() actual_sum17 = models.IntegerField() sum_guessed18 = models.IntegerField() actual_sum18 = models.IntegerField() sum_guessed19 = models.IntegerField() actual_sum19 = models.IntegerField() sum_guessed20 = models.IntegerField() actual_sum20 = models.IntegerField() sum_guessed21 = models.IntegerField() actual_sum21 = models.IntegerField() sum_guessed22 = models.IntegerField() actual_sum22 = models.IntegerField() sum_guessed23 = models.IntegerField() actual_sum23 = models.IntegerField() sum_guessed24 = models.IntegerField() actual_sum24 = models.IntegerField() sum_guessed25 = models.IntegerField() actual_sum25 = models.IntegerField() sum_guessed26 = models.IntegerField() actual_sum26 = models.IntegerField() sum_guessed27 = models.IntegerField() actual_sum27 = models.IntegerField() sum_guessed28 = models.IntegerField() actual_sum28 = models.IntegerField() sum_guessed29 = models.IntegerField() actual_sum29 = models.IntegerField() sum_guessed30 = models.IntegerField() actual_sum30 = models.IntegerField() totalScore = models.IntegerField() # PAGES class Home(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class AddNumbers(Page): timeout_seconds = 300 form_model = "player" form_fields = ["sum_guessed1", "sum_guessed2", "sum_guessed3", "sum_guessed4", "sum_guessed5", "sum_guessed6", "sum_guessed7", "sum_guessed8", "sum_guessed9", "sum_guessed10", "sum_guessed11", "sum_guessed12", "sum_guessed13", "sum_guessed14", "sum_guessed15", "sum_guessed16", "sum_guessed17", "sum_guessed18", "sum_guessed19", "sum_guessed20", "sum_guessed21", "sum_guessed22", "sum_guessed23", "sum_guessed24", "sum_guessed25", "sum_guessed26", "sum_guessed27", "sum_guessed28", "sum_guessed29", "sum_guessed30"] @staticmethod def vars_for_template(player: Player): number_1 = random.randint(1,20) number_2 = random.randint(1,20) number_3 = random.randint(1,20) number_4 = random.randint(1,20) number_5 = random.randint(1,20) number_6 = random.randint(1,20) number_7 = random.randint(1,20) number_8 = random.randint(1,20) number_9 = random.randint(1,20) number_10 = random.randint(1,20) number_11 = random.randint(1,20) number_12 = random.randint(1,20) number_13 = random.randint(1,20) number_14 = random.randint(1,20) number_15 = random.randint(1,20) number_16 = random.randint(1,20) number_17 = random.randint(1,20) number_18 = random.randint(1,20) number_19 = random.randint(1,20) number_20 = random.randint(1,20) number_21 = random.randint(1,20) number_22 = random.randint(1,20) number_23 = random.randint(1,20) number_24 = random.randint(1,20) number_25 = random.randint(1,20) number_26 = random.randint(1,20) number_27 = random.randint(1,20) number_28 = random.randint(1,20) number_29 = random.randint(1,20) number_30 = random.randint(1,20) number_31 = random.randint(1,20) number_32 = random.randint(1,20) number_33 = random.randint(1,20) number_34 = random.randint(1,20) number_35 = random.randint(1,20) number_36 = random.randint(1,20) number_37 = random.randint(1,20) number_38 = random.randint(1,20) number_39 = random.randint(1,20) number_40 = random.randint(1,20) number_41 = random.randint(1,20) number_42 = random.randint(1,20) number_43 = random.randint(1,20) number_44 = random.randint(1,20) number_45 = random.randint(1,20) number_46 = random.randint(1, 20) number_47 = random.randint(1, 20) number_48 = random.randint(1, 20) number_49 = random.randint(1, 20) number_50 = random.randint(1, 20) number_51 = random.randint(1, 20) number_52 = random.randint(1, 20) number_53 = random.randint(1, 20) number_54 = random.randint(1, 20) number_55 = random.randint(1, 20) number_56 = random.randint(1, 20) number_57 = random.randint(1, 20) number_58 = random.randint(1, 20) number_59 = random.randint(1, 20) number_60 = random.randint(1, 20) number_61 = random.randint(1, 20) number_62 = random.randint(1, 20) number_63 = random.randint(1, 20) number_64 = random.randint(1, 20) number_65 = random.randint(1, 20) number_66 = random.randint(1, 20) number_67 = random.randint(1, 20) number_68 = random.randint(1, 20) number_69 = random.randint(1, 20) number_70 = random.randint(1, 20) player.actual_sum1 = number_1 + number_2 + number_3 + number_46 + number_47 player.actual_sum2 = number_4 + number_5 + number_6 + number_48 + number_49 player.actual_sum3 = number_7 + number_8 + number_9 + number_50 + number_51 player.actual_sum4 = number_10 + number_11 + number_12 + number_52 + number_53 player.actual_sum5 = number_13 + number_14 + number_15 + number_54 + number_55 player.actual_sum6 = number_16 + number_17 + number_18 + number_56 + number_57 player.actual_sum7 = number_19 + number_20 + number_21 + number_58 + number_59 player.actual_sum8 = number_22 + number_23 + number_24 + number_60 + number_61 player.actual_sum9 = number_25 + number_26 + number_27 + number_62 + number_63 player.actual_sum10 = number_28 + number_29 + number_30 + number_64 + number_65 player.actual_sum11 = number_31 + number_32 + number_33 + number_66 + number_67 player.actual_sum12 = number_34 + number_35 + number_36 + number_68 + number_69 player.actual_sum13 = number_37 + number_38 + number_39 + number_70 + number_1 player.actual_sum14 = number_40 + number_41 + number_42 + number_2 + number_3 player.actual_sum15 = number_43 + number_44 + number_45 + number_4 + number_5 player.actual_sum16 = number_2 + number_4 + number_6 + number_45 + number_44 player.actual_sum17 = number_8 + number_10 + number_12 + number_43 + number_42 player.actual_sum18 = number_14 + number_16 + number_18 + number_41 + number_40 player.actual_sum19 = number_20 + number_22 + number_24 + number_39 + number_38 player.actual_sum20 = number_26 + number_28 + number_30 + number_37 + number_36 player.actual_sum21 = number_32 + number_34 + number_36 + number_1 + number_2 player.actual_sum22 = number_38 + number_40 + number_42 + number_3 + number_4 player.actual_sum23 = number_44 + number_1 + number_3 + number_10 + number_11 player.actual_sum24 = number_5 + number_7 + number_9 + number_12 + number_13 player.actual_sum25 = number_11 + number_13 + number_15 + number_46 + number_48 player.actual_sum26 = number_17 + number_19 + number_21 + number_49 + number_51 player.actual_sum27 = number_23 + number_25 + number_27 + number_53 + number_55 player.actual_sum28 = number_29 + number_31 + number_33 + number_57 + number_59 player.actual_sum29 = number_35 + number_37 + number_39 + number_61 + number_63 player.actual_sum30 = number_41 + number_43 + number_45 + number_67 + number_70 return { "number_1": number_1, "number_2": number_2, "number_3": number_3, "number_4": number_4, "number_5": number_5, "number_6": number_6, "number_7": number_7, "number_8": number_8, "number_9": number_9, "number_10": number_10, "number_11": number_11, "number_12": number_12, "number_13": number_13, "number_14": number_14, "number_15": number_15, "number_16": number_16, "number_17": number_17, "number_18": number_18, "number_19": number_19, "number_20": number_20, "number_21": number_21, "number_22": number_22, "number_23": number_23, "number_24": number_24, "number_25": number_25, "number_26": number_26, "number_27": number_27, "number_28": number_28, "number_29": number_29, "number_30": number_30, "number_31": number_31, "number_32": number_32, "number_33": number_33, "number_34": number_34, "number_35": number_35, "number_36": number_36, "number_37": number_37, "number_38": number_38, "number_39": number_39, "number_40": number_40, "number_41": number_41, "number_42": number_42, "number_43": number_43, "number_44": number_44, "number_45": number_45, "number_46": number_46, "number_47": number_47, "number_48": number_48, "number_49": number_49, "number_50": number_50, "number_51": number_51, "number_52": number_52, "number_53": number_53, "number_54": number_54, "number_55": number_55, "number_56": number_56, "number_57": number_57, "number_58": number_58, "number_59": number_59, "number_60": number_60, "number_61": number_61, "number_62": number_62, "number_63": number_63, "number_64": number_64, "number_65": number_65, "number_66": number_66, "number_67": number_67, "number_68": number_68, "number_69": number_69, "number_70": number_70, } @staticmethod def before_next_page(player: Player, timeout_happened): player.score = 0 if player.actual_sum1 == player.sum_guessed1: player.payoff = C.payment_per_correct_answer player.score = player.score + 1 if player.actual_sum2 == player.sum_guessed2: player.payoff = C.payment_per_correct_answer + 1 player.score = player.score + 1 if player.actual_sum3 == player.sum_guessed3: player.payoff = C.payment_per_correct_answer + 2 player.score = player.score + 1 if player.actual_sum4 == player.sum_guessed4: player.payoff = C.payment_per_correct_answer + 3 player.score = player.score + 1 if player.actual_sum5 == player.sum_guessed5: player.payoff = C.payment_per_correct_answer + 4 player.score = player.score + 1 if player.actual_sum6 == player.sum_guessed6: player.payoff = C.payment_per_correct_answer + 5 player.score = player.score + 1 if player.actual_sum7 == player.sum_guessed7: player.payoff = C.payment_per_correct_answer + 6 player.score = player.score + 1 if player.actual_sum8 == player.sum_guessed8: player.payoff = C.payment_per_correct_answer + 7 player.score = player.score + 1 if player.actual_sum9 == player.sum_guessed9: player.payoff = C.payment_per_correct_answer + 8 player.score = player.score + 1 if player.actual_sum10 == player.sum_guessed10: player.payoff = C.payment_per_correct_answer + 9 player.score = player.score + 1 if player.actual_sum11 == player.sum_guessed11: player.payoff = C.payment_per_correct_answer + 10 player.score = player.score + 1 if player.actual_sum12 == player.sum_guessed12: player.payoff = C.payment_per_correct_answer + 11 player.score = player.score + 1 if player.actual_sum13 == player.sum_guessed13: player.payoff = C.payment_per_correct_answer + 12 player.score = player.score + 1 if player.actual_sum14 == player.sum_guessed14: player.payoff = C.payment_per_correct_answer + 13 player.score = player.score + 1 if player.actual_sum15 == player.sum_guessed15: player.payoff = C.payment_per_correct_answer + 14 player.score = player.score + 1 if player.actual_sum16 == player.sum_guessed16: player.payoff = C.payment_per_correct_answer + 15 player.score = player.score + 1 if player.actual_sum17 == player.sum_guessed17: player.payoff = C.payment_per_correct_answer + 16 player.score = player.score + 1 if player.actual_sum18 == player.sum_guessed18: player.payoff = C.payment_per_correct_answer + 17 player.score = player.score + 1 if player.actual_sum19 == player.sum_guessed19: player.payoff = C.payment_per_correct_answer + 18 player.score = player.score + 1 if player.actual_sum20 == player.sum_guessed20: player.payoff = C.payment_per_correct_answer + 19 player.score = player.score + 1 if player.actual_sum21 == player.sum_guessed21: player.payoff = C.payment_per_correct_answer + 20 player.score = player.score + 1 if player.actual_sum22 == player.sum_guessed22: player.payoff = C.payment_per_correct_answer + 21 player.score = player.score + 1 if player.actual_sum23 == player.sum_guessed23: player.payoff = C.payment_per_correct_answer + 22 player.score = player.score + 1 if player.actual_sum24 == player.sum_guessed24: player.payoff = C.payment_per_correct_answer + 23 player.score = player.score + 1 if player.actual_sum25 == player.sum_guessed25: player.payoff = C.payment_per_correct_answer + 24 player.score = player.score + 1 if player.actual_sum26 == player.sum_guessed26: player.payoff = C.payment_per_correct_answer + 25 player.score = player.score + 1 if player.actual_sum27 == player.sum_guessed27: player.payoff = C.payment_per_correct_answer + 26 player.score = player.score + 1 if player.actual_sum28 == player.sum_guessed28: player.payoff = C.payment_per_correct_answer + 27 player.score = player.score + 1 if player.actual_sum29 == player.sum_guessed29: player.payoff = C.payment_per_correct_answer + 28 player.score = player.score + 1 if player.actual_sum30 == player.sum_guessed30: player.payoff = C.payment_per_correct_answer + 29 player.score = player.score + 1 class Results(Page): pass class CombinedResults(Page): @staticmethod def is_displayed(player: Player): return player.round_number == C.NUM_ROUNDS @staticmethod def vars_for_template(player: Player): all_players = player.in_all_rounds() combined_payoff = 0 for temp_player in all_players: combined_payoff += temp_player.payoff return { "combined_payoff": combined_payoff, "score": player.score } # totalScore = score page_sequence = [Home, AddNumbers, Results, CombinedResults]