Advertisement
giganciprogramowania

PyGame_Lekcja12_Bonusy

Apr 4th, 2022
1,776
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Import modulu pygame, dzieki ktoremu tworzymy aplikacje okienkowa
  2. import pygame
  3. from random import choice, randint
  4.  
  5.  
  6. # Inicjalizacja modułu
  7. pygame.init()
  8. # Utworzenie okna o określonych wymiarach
  9. SCREEN_WIDTH = 800
  10. SCREEN_HEIGHT = 600
  11.  
  12. screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
  13. # Nadanie nazwy oknu
  14. pygame.display.set_caption('Pierwsza Gra')
  15.  
  16. # Utworzenie zegara, który nadzoruje stałe wartości fps
  17. clock = pygame.time.Clock()
  18.  
  19. bonus_images = [
  20.     'bonus_1.png',
  21.     'bonus_2.png',
  22.     'bonus_3.png'
  23. ]
  24.  
  25. FRAMES_PER_SECOND = 60
  26. frames_cnt = 0
  27.  
  28.  
  29. def load_image(img_path: str, position):
  30.     image = pygame.image.load(img_path)
  31.     surface = image.convert()
  32.  
  33.     transparent_color = (0, 0, 0)
  34.     surface.set_colorkey(transparent_color)
  35.  
  36.     # Pozycja wyświetlania obiektu zapisana jest w rect
  37.     rect = surface.get_rect(center=position)
  38.  
  39.     return [image, surface, rect]
  40.  
  41.  
  42. def print_image(img_list) -> None:
  43.     # [image, surface, rect]
  44.     image, surface, rect = img_list
  45.     screen_surface.blit(surface, rect)
  46.     pass
  47.  
  48.  
  49. def set_position_image(img_list, position):
  50.     image, surface, rect = img_list
  51.     rect = surface.get_rect(center=position)
  52.     return [image, surface, rect]
  53.  
  54.  
  55. def calculate_player_movement(keys):
  56.     # Poruszanie postacią
  57.     speed = 10
  58.     delta_x = 0
  59.     delta_y = 0
  60.  
  61.     if keys[pygame.K_w]:
  62.         delta_y -= speed
  63.     if keys[pygame.K_s]:
  64.         delta_y += speed
  65.     if keys[pygame.K_d]:
  66.         delta_x += speed
  67.     if keys[pygame.K_a]:
  68.         delta_x -= speed
  69.  
  70.     return [delta_x, delta_y]
  71.  
  72.  
  73. def limit_position(position):
  74.     x, y = position
  75.     x = max(0, min(x, SCREEN_WIDTH))
  76.     y = max(0, min(y, SCREEN_HEIGHT))
  77.     return [x, y]
  78.  
  79.  
  80. def generate_bonus_object():
  81.     # Wylosowanie nazwy pliku do wczytania
  82.     image_name = choice(bonus_images)
  83.     # Wylosowanie współrzędnych dla nowego obiektu
  84.     x = randint(0, SCREEN_WIDTH)
  85.     y = randint(0, SCREEN_HEIGHT)
  86.     # Utworzenie zmiennej position, która będzie listą dwuelementową
  87.     position = [x, y]
  88.     # Utworzenie grafiki za pomocą funkcji load_image
  89.     new_obj = load_image(image_name, position)
  90.     # Dodanie gotowego obiektu bonus do listy wszystkich elementów
  91.     bonus_objects.append(new_obj)
  92.     pass
  93.  
  94.  
  95. def print_bonus_objects():
  96.     # Iteracja po obiektach bonusowych
  97.     for obj in bonus_objects:
  98.         # Wyświetlenie obiektu na ekranie gry,
  99.         # za pomoca wczesniej przygotowanej funkcji
  100.         print_image(obj)
  101.         pass
  102.     pass
  103.  
  104.  
  105. def check_collisions():
  106.     rect_player = player[2]
  107.  
  108.     # Do wyboru sposób indeksowania
  109.     # for i in range(len(bonus_objects)):
  110.     #    index = len(bonus_objects) - 1 - i
  111.  
  112.     for index in range(len(bonus_objects) - 1, -1, -1):
  113.         obj = bonus_objects[index]
  114.         rect = obj[2]
  115.         if rect.colliderect(rect_player):
  116.             bonus_objects.pop(index)
  117.             pass
  118.         pass
  119.     pass
  120.  
  121.  
  122. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  123. player_pos = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2]
  124. player = load_image('player.png', player_pos)
  125. background_color = [9, 42, 121]
  126. # Lista przechowująca obiekty bonusowe
  127. # Gotowy obiekt to trójelementowa lista uzyskana z load_image
  128. bonus_objects = []
  129.  
  130. # Zmienna określająca, czy należy zamknąć okno
  131. game_status = True
  132. # Kod wykonywany póki aplikacja jest uruchomiona
  133. while game_status:
  134.  
  135.     # Odczytanie zdarzeń zarejestrowanych przez komputer
  136.     events = pygame.event.get()
  137.  
  138.     for event in events:
  139.         # Naciśnięto X - zamykanie aplikacji
  140.         if event.type == pygame.QUIT:
  141.             game_status = False
  142.         pass  # for event
  143.  
  144.     pressed_keys = pygame.key.get_pressed()
  145.  
  146.     delta_x, delta_y = calculate_player_movement(pressed_keys)
  147.  
  148.     # Zmiana wartości współrzędnych
  149.     player_pos[0] += delta_x
  150.     player_pos[1] += delta_y
  151.     # Sprawdzenie limitów współrzędnych
  152.     player_pos = limit_position(player_pos)
  153.  
  154.     # Zmiana współrzędnych obrazu
  155.     player = set_position_image(player, player_pos)
  156.  
  157.     # Uzupełnij tło
  158.     screen_surface.fill(background_color)
  159.     # Wyświetl gracza
  160.     print_image(player)
  161.  
  162.     # Dodawanie bonusu - pierwsze dodanie bez warunku ograniczającego ;)
  163.     if frames_cnt % FRAMES_PER_SECOND * 1 == 0:
  164.         generate_bonus_object()
  165.         pass
  166.  
  167.     check_collisions()
  168.  
  169.     print_bonus_objects()
  170.  
  171.     # Odświeżenie wyświetlanego okna
  172.     pygame.display.update()
  173.  
  174.     frames_cnt += 1
  175.  
  176.     clock.tick(FRAMES_PER_SECOND)
  177.     pass
  178.  
  179. print("Zamykanie aplikacji")
  180. # Zamknięcie aplikacji
  181. pygame.quit()
  182. # Zamknięcie skryptu
  183. quit()
  184.  
  185.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement