Exemplo n.º 1
0
 def get_car_image():
     try:
         level = Af.read_file_content("saves/active_user.txt",
                                      1)[0].split(" ")[3]
     except IndexError:
         level = 21
     return Af.load_image(f"cars/{level}.png")
Exemplo n.º 2
0
def tutorial(screen: Af.Surface):
    Af.play(change_menu_sound)
    position_x_tutorial = (1080 - 260) // 2
    position_y_tutorial = [y for y in range(110, 600, 100)]
    effects_tutorial = ["controls", "save", "enemy", "level_up", "game_menu"]
    buttons = [
        mc.Button(position_x_tutorial, y,
                  f"menu/buttons/4/{position_y_tutorial.index(y) + 1}.png",
                  effects_tutorial[position_y_tutorial.index(y)])
        for y in position_y_tutorial[:len(effects_tutorial)]
    ]
    button_coo = {
        0: (680, 90),
        1: (680, 90),
        2: (698, 192),
        3: (685, 178),
        4: (685, 178)
    }
    effects = [Af.load_image(f"menu/effects/1/{i + 1}.png") for i in range(4)]
    user = mc.User()
    user.get_active_user()
    user.get_texts()
    tutorial_menu = mc.User_Menu(screen, f"menu/interfaces/Main/tutorial.png",
                                 buttons, button_coo, effects, user)
    Af.write_file_content(
        "parameters/prev_men.txt",
        "game_menu")  # make sure any submenu returns to Game Menu after
    return tutorial_menu.display_menu()
Exemplo n.º 3
0
def start_page(screen: Af.Surface):
    start = mc.Start(screen)
    Af.play(start_sound)
    output = start.display_menu()
    if output:
        return "main_menu"
    return False
Exemplo n.º 4
0
 def change_properties(self):
     self.segment_number = Af.randint(5, 7)
     self.internal_beam_radius = 2 * self.segment_number
     self.external_beam_radius = Af.get_fibonacci(self.segment_number)
     self.frame = 0
     self.segments_coo = [self.starting_point_coo]
     self.last_segment_direction = Af.choice([-1, 1])
Exemplo n.º 5
0
    def individual_is_perfect(self, individual):
        self.individual = individual
        while self.run:
            # terminate execution
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.run = False
                if event.type == pygame.KEYDOWN:
                    self.manage_buttons(event.key)

    # parts effects
            self.parts_list.remove_parts(self.obstacles_list.internal_list)
            self.parts_list.create_parts()
            # car movement
            self.car_movement_y()
            # collision & damage
            if self.car.obstacle_collision(self.obstacles_list.internal_list):
                self.resistance = False
            self.parts_list.internal_list, value = self.car.parts_collision(
                self.parts_list.internal_list)
            self.parts_collected += value
            # obstacles effects
            self.obstacles_list.remove_obstacles()
            self.obstacles_list.create_obstacles()
            # Refresh screen
            if self.run:
                self.run = self.continue_game()
            self.refresh_game()
            self.time_passed += self.clock.tick(self.frame_rate) / 990
        self.update_individual()
        Af.stop_all_sounds()
        Af.play(game_over_sound)
        return False  # if it gets here, it means it not good enough
Exemplo n.º 6
0
 def obstacle_collision(self, l_obstacles):
     for obst in l_obstacles:
         if self.hit_box.overlap(obst.hit_box,
                                 (self.x - obst.x + obst.adjust,
                                  self.y - obst.y + obst.adjust)):
             Af.play(hit_sound)
             return True
     return False
Exemplo n.º 7
0
 def choose_image(self):
     self.folder = str(Af.randint(1, 4))
     if self.folder == "4":
         self.image = Af.load_image(f"obstacles/4/{Af.randint(1, 11)}.png")
     else:
         self.image = Af.load_image(f"obstacles/{self.folder}/1.png")
     self.hit_box = pygame.mask.from_surface(self.image)
     self.rect = self.image.get_rect()
Exemplo n.º 8
0
def game_parts(screen: Af.Surface):
    game = gc.Mission_PARTS(screen)
    precision, avg_speed, parts_collected, time, max_speed = game.game_loop()
    results = mc.Report_Mission_Parts(screen, precision, avg_speed, max_speed,
                                      parts_collected, time)
    parts = results.display()
    Af.save_performance_parts(parts, max_speed, time)
    return "missions"
Exemplo n.º 9
0
def exit_game(screen: Af.Surface):
    Af.play(exit_sound)
    buttons = [
        mc.Button(240, 410, f"menu/buttons/3/1.png", False),
        mc.Button(580, 410, f"menu/buttons/3/2.png", True)
    ]
    if not mc.Exit("menu/exit/exit_game.png", screen, buttons).display_menu():
        Af.terminate_execution()
    return "main_menu"
Exemplo n.º 10
0
def add_text(screen: Af.Surface):
    Af.play(change_menu_sound)
    buttons = [
        mc.Button(335, 495, "/menu/buttons/5/1.png", False),
        mc.Button(573, 495, "/menu/buttons/5/2.png", True)
    ]
    at = mc.Add_Text(screen, buttons)
    at.display_menu()
    return "manage_gp"
Exemplo n.º 11
0
def exit_game_menu(screen: Af.Surface):
    Af.play(exit_sound)
    buttons = [
        mc.Button(240, 410, f"menu/buttons/3/1.png", False),
        mc.Button(580, 410, f"menu/buttons/3/2.png", True)
    ]
    if not mc.Exit("menu/exit/exit_menu.png", screen, buttons).display_menu():
        Af.erase_active_user_data()
        return "main_menu"
    return "game_menu"
Exemplo n.º 12
0
def mutate_value(value, mutation_chance=M_C):
    if Af.random() > mutation_chance:  # invert value's signal
        value *= Af.random_choice([-1, 1])
    if Af.random() > mutation_chance:  # increase or decrease value
        value += Af.random_choice(
            [-1, 1]) * (Af.random() / Af.random_choice([1000, 100, 10]))
    if Af.random() > M_C:
        return Af.random_choice(
            [-1, 1]) * (Af.random() / Af.random_choice([100, 10]))
    return value
Exemplo n.º 13
0
 def set_up_texts(self, first=False):
     self.text_name = Af.choice(Af.get_text_names())[:-4]  # chooses random text from existing texts
     self.text_to_write_image = Af.load_image(f"texts/{self.text_name}.png")  # loads the text's image
     lines = Af.read_file_content(f"texts/{self.text_name}.txt")  # loads the text's content
     self.text_to_write = [line.split(" ") for line in lines[1:]]  # sets the text in proper format
     self.screen.blit(self.text_to_write_image, (280, 320))
     image = Af.get_text_images("")  # turns written text into images to display
     self.written_text_images = [image, image, image, image, image, image, image, image]
     self.written_text = [[""]]
     self.line = 0  # sets current line to 0 (beginning)
     self.max_lines = int(lines[0])  # gets the number of lines that the chosen text has
Exemplo n.º 14
0
 def activate_fire(self, fire_type):
     if self.last_fire != fire_type:
         self.last_fire = fire_type
         self.fire_image_time = 0
     if self.fire_image_time < 1:
         self.fire_image_time += 1
     if fire_type:
         Af.play(fire_sound)
         self.fire_image = Af.load_image("cars/car effects/nitro/blue.png")
     else:
         self.fire_image = Af.load_image("cars/car effects/nitro/red.png")
Exemplo n.º 15
0
def game_ai(screen: Af.Surface):
    game = gc.Mission_AI(screen)
    precision, speed, parts_collected, resistance, time, finished = game.game_loop(
    )
    results = mc.Report_Mission_AI(screen, precision, speed, parts_collected,
                                   resistance, time, finished)
    go_to_next_level, parts = results.display()
    Af.save_performance_ai(go_to_next_level, parts, speed)
    if Af.get_user_level() == 13 and not Af.user_is_a_winner():
        return "winner"
    return "game_menu"
Exemplo n.º 16
0
 def add_segment(self, car_x, car_y):
     if self.frame == self.segment_number:  # last segment is always the car's position
         self.segments_coo.append((car_x, car_y))
         return None
     medium_segment_length = (car_x - self.segments_coo[0][0]
                              ) // self.segment_number  # (Xf-Xi)/ n
     segment_x = self.segments_coo[-1][0] + Af.randint(
         int(medium_segment_length * 0.75), medium_segment_length)
     segment_y = self.segments_coo[-1][1] + Af.randint(
         10, 70) * self.last_segment_direction
     self.last_segment_direction *= -1  # invert next segment direction
     self.segments_coo.append((segment_x, segment_y))
Exemplo n.º 17
0
def change_password(screen: Af.Surface):
    Af.play(change_menu_sound)
    buttons = [
        mc.Button(335, 210, "/menu/buttons/5/0.png", None),
        mc.Button(335, 356, "/menu/buttons/5/0.png", None),
        mc.Button(335, 495, "/menu/buttons/9/1.png", False),
        mc.Button(573, 495, "/menu/buttons/9/2.png", True)
    ]
    cma = mc.Create_Modify_Account("menu/interfaces/Main/change password.png",
                                   screen, buttons, True)
    effect = cma.display_menu()
    if effect == "change_password":
        return effect
    return "manage_us"
Exemplo n.º 18
0
 def parts_collision(self, l_parts):
     value = 0
     new_parts = []
     for part in l_parts:
         if part.x + 44 >= self.rect[
                 0] and part.x <= self.rect[0] + self.rect[2]:
             if part.y + 24 >= self.rect[
                     1] and part.y <= self.rect[1] + self.rect[3]:
                 value += part.value
                 Af.play(part_sound)
                 continue
             else:
                 new_parts.append(part)
         else:
             new_parts.append(part)
     return new_parts, value
Exemplo n.º 19
0
 def __init__(self, screen, mode=False):
     self.screen = screen
     self.speed_meter_image = Af.load_image("HUD/meter/7.png")
     self.precision_meter_image = Af.load_image("HUD/meter/7.png")
     self.background = Af.load_image("HUD/HUD_background.png")
     self.speed = 0
     self.precision = 0
     self.energy = 0
     self.resistance = 0
     self.parts = 0
     self.mode = mode
     if mode:
         self.time = "infinite"
     else:
         self.time = 60
     self.set_up_HUD()
Exemplo n.º 20
0
    def draw(self, screen, car_x, car_y):
        if self.frame == 0:
            Af.play(self.space_time_hit_sound)
        if car_x > Af.CAR_STE_MIN_DAMAGE_DISTANCE:  # lightning should not hit car if car is too far
            car_x = Af.CAR_STE_MIN_DAMAGE_DISTANCE

        car_y += 25  # adjust y coordinate to match car center
        car_x += 25  # adjust y coordinate to match car center
        self.frame += 1

        self.add_segment(car_x, car_y)  # create a new segment of the lightning
        self.draw_segments(screen)  # draw all segments

        if self.frame == self.segment_number:  # lightning has been fully drawn
            self.change_properties()
            return False
        return True
Exemplo n.º 21
0
def game_menu(screen: Af.Surface):
    Af.play(change_menu_sound)
    y_coo = [y for y in range(107, 600, 80)]
    b_effects = ["story", "m_ai", "missions", "tutorial", "manage", "exit2"]
    buttons = Af.create_buttons(mc.Button, "menu/buttons/2", b_effects, y_coo)
    effects_coo = {
        0: (687, 90),
        1: (687, 90),
        2: (687, 192),
        3: (687, 178),
        4: (687, 178),
        5: (687, 178)
    }
    effects = [Af.load_image(f"menu/effects/3/{i + 1}.png") for i in range(4)]
    user = mc.User()
    user.get_active_user()
    user.get_texts()
    g_menu = mc.Game_Menu(screen, f"menu/interfaces/Main/game menu.png",
                          buttons, effects_coo, effects, user)
    next_link = g_menu.display_menu()
    if next_link == "m_ai":
        mission_is_unlocked = int(
            Af.read_file_content(f"saves/{user.name}/next_level.txt", 1)[0])
        if not mission_is_unlocked:
            next_link = "nx_l"
    Af.write_file_content(
        "parameters/prev_men.txt",
        "game_menu")  # make sure any submenu returns to Game Menu after
    return next_link
Exemplo n.º 22
0
 def __init__(self):
     self.images = [
         Af.load_image(f"Characters/Space-Time Entity/{i + 1}.png")
         for i in range(6)
     ]
     self.draw_lightning = False
     self.already_hit_target = False
     self.lightning = Lightning()
     self.index = 0
Exemplo n.º 23
0
def create_new_account(screen: Af.Surface):
    Af.play(change_menu_sound)
    if len(Af.list_users()) == 7:
        Af.show_error_message(screen, 6)
        return "main_menu"
    buttons = [
        mc.Button(335, 210, "/menu/buttons/5/0.png", None),
        mc.Button(335, 356, "/menu/buttons/5/0.png", None),
        mc.Button(335, 495, "/menu/buttons/5/1.png", False),
        mc.Button(573, 495, "/menu/buttons/5/2.png", True)
    ]
    ac = mc.Create_Modify_Account("menu/interfaces/Main/create account.png",
                                  screen, buttons)
    effect = ac.display_menu()
    if effect == "new":
        return effect
    elif effect:
        return "game_menu"
    return "main_menu"
Exemplo n.º 24
0
 def manage_buttons(self, event: pygame.event.Event):
     if event.key == pygame.K_KP_ENTER or event.key == pygame.K_RETURN:
         if self.line < 7:  # prevents from adding too much lines
             self.written_text.append([""])
             self.line += 1
             self.current_word_index = 0
         else:  # prepare another text to write
             pass
     elif event.key == pygame.K_SPACE:
         # go to next line in case written words are numerically equal to words to write
         if len(self.written_text[self.line]) == len(self.text_to_write[self.line]):
             self.written_text.append([""])
             self.line += 1
             self.current_word_index = 0
         if self.written_text[-1][-1] != "":  # prevents adding new words in case current word is empty
             self.written_text[self.line].append("")
             self.current_word_index += 1
     elif event.key == pygame.K_BACKSPACE:
         if self.written_text[-1] == [""] and len(self.written_text) != 1:  # if line is empty go to previous
             self.written_text.pop()
             self.line -= 1
             self.current_word_index = len(self.written_text[-1]) - 1
         # prevents from going beyond deleting last word
         elif self.written_text[-1] == [""] and len(self.written_text) == 1:
             pass
         elif self.written_text[-1][-1] != "":  # checks if a word is not empty to make sure letter can be deleted
             if self.last_letter_correct():
                 self.correct_letters -= 1
             self.written_text[-1][-1] = self.written_text[-1][-1][:-1]
         elif self.written_text[-1][-1] == "":  # pass to previous word if current is empty
             self.written_text[-1].pop()
             self.current_word_index = len(self.written_text[-1]) - 1
             self.total_words -= 1
     elif event.unicode != "":  # verify that a character is a symbol, letter or number before writing it
         if self.written_text_images[self.line].get_size()[0] > 490:  # checks if line is too long to fit
             self.written_text.append([""])
             self.line += 1
             self.current_word_index = 0
         self.written_text[self.line][self.current_word_index] += event.unicode
         if self.last_letter_correct():
             self.correct_letters += 1
         else:
             Af.play(wrong_letter_sound)
Exemplo n.º 25
0
 def __init__(self):
     self.internal_list = []
     self.first_parts = True
     self.choices = [20, 121, 240]
     self.y = Af.choice(self.choices)
     self.dist_between_parts = 5 + 44
     self.min_dist_between_blocs = 100
     self.max_dist_between_blocs = 200
     self.min_parts = 3
     self.max_parts = 7
Exemplo n.º 26
0
 def cross_over_layers(layers1, layers2):
     new_values = []
     for layer1, layer2 in zip(layers1, layers2):
         new_layer = []
         for values1, values2 in zip(layer1, layer2):
             if Af.random() >= 0.5:
                 new_layer.append(values1)
             else:
                 new_layer.append(values2)
         new_values.append(new_layer)
     return new_values
Exemplo n.º 27
0
 def create_parts(self):
     dist_between_blocs = Af.randint(self.min_dist_between_blocs,
                                     self.max_dist_between_blocs)
     type_p = self.calculate_type_part()
     if self.first_parts:
         for i in range(Af.randint(self.min_parts, self.max_parts)):
             self.internal_list.append(
                 _part(
                     space_between_obstacles[-1] + dist_between_blocs +
                     i * self.dist_between_parts, type_p, self.y, i % 10))
         self.first_parts = False
         return 0
     if self.control_last():
         for i in range(Af.randint(self.min_parts, self.max_parts)):
             self.internal_list.append(
                 _part(
                     space_between_obstacles[-1] + dist_between_blocs +
                     i * self.dist_between_parts, type_p, self.y, i % 10))
         self.y = Af.choice(self.choices)
         return 0
Exemplo n.º 28
0
def missions(screen: Af.Surface):
    Af.play(change_menu_sound)
    y_coo = [y for y in range(107, 600, 80)]
    effects_game = [
        "m_endless", "m_aim", "missions", "missions", "missions", "game_menu"
    ]
    buttons = Af.create_buttons(mc.Button, "menu/buttons/11", effects_game,
                                y_coo)
    effects_coo = {
        0: (687, 90),
        1: (687, 90),
        2: (687, 192),
        3: (687, 178),
        4: (687, 178),
        5: (687, 178)
    }
    effects = [Af.load_image(f"menu/effects/3/{i + 1}.png") for i in range(4)]
    user = mc.User()
    user.get_active_user()
    user.get_texts()
    missions_menu = mc.User_Menu(screen,
                                 f"menu/interfaces/Main/missions menu.png",
                                 buttons, effects_coo, effects, user)
    next_link = missions_menu.display_menu()
    Af.write_file_content(
        "parameters/prev_men.txt",
        "game_menu")  # make sure any submenu returns to Game Menu after
    return next_link
Exemplo n.º 29
0
 def mover(self):
     init_m, nxt = 650, 20
     change = {
         init_m: f"/obstacles/{self.folder}/2.png",
         init_m - nxt: f"/obstacles/{self.folder}/3.png",
         init_m - nxt * 2: f"/obstacles/{self.folder}/4.png",
         init_m - nxt * 3: f"/obstacles/{self.folder}/5.png",
         init_m - nxt * 4: f"/obstacles/{self.folder}/6.png",
         init_m - nxt * 5: f"/obstacles/{self.folder}/7.png"
     }
     self.x -= 10
     if self.x in change and self.folder != "4":
         self.image = Af.load_image(change[self.x])
Exemplo n.º 30
0
 def __init__(self, x, type_p, y, cardinality):
     self.type_p = type_p
     self.adjust = 15
     self.y_middle = y + self.adjust
     self.y = self.y_middle + cardinality
     self.x = x
     self.value = self.type_p**2
     self.image = Af.load_image(f"parts/part{self.type_p}.png")
     self.hit_box = pygame.mask.from_surface(self.image)
     self.rect = self.image.get_rect()
     self.length = 32
     self.movement_module = 10
     self.upwards = True