Jak stworzyć prostą grę w Pygame

W tym artykule pokażemy, jak napisać prostą grę w Pygame, w której zadaniem gracza jest łapanie spadających kwadratów. Wykorzystamy podstawowe koncepcje programowania i funkcje Pygame, aby zrozumieć każdy element kodu. Gra działa na zasadzie zbierania punktów, a kończy się, gdy kwadrat spadnie poza ekran.

Kod źródłowy

Oto pełny kod gry:

Wyjaśnienie kodu

Poniżej omówimy krok po kroku, co robi każda kluczowa linia kodu:

  • import pygame – Importuje bibliotekę Pygame, umożliwiającą tworzenie grafiki, obsługę dźwięku i interakcji.
  • import random – Importuje moduł random, który pozwala generować losowe liczby, przydatne do ustawiania pozycji kwadratu.
  • pygame.init() – Inicjalizuje wszystkie moduły Pygame, przygotowując je do użycia.
  • WIDTH, HEIGHT = 400, 600 – Ustawia szerokość (WIDTH) i wysokość (HEIGHT) okna gry na 400 x 600 pikseli.
  • screen = pygame.display.set_mode((WIDTH, HEIGHT)) – Tworzy okno gry o wymiarach WIDTHHEIGHT, w którym będą wyświetlane wszystkie elementy gry.
  • pygame.display.set_caption("Łap spadające kwadraty") – Ustawia tytuł okna gry na „Łap spadające kwadraty”, widoczny na pasku okna.
  • WHITE = (255, 255, 255) – Definiuje kolor biały w formacie RGB, używany do rysowania tekstu i gracza.
  • RED = (255, 0, 0) – Definiuje kolor czerwony w formacie RGB, który będzie używany do rysowania spadającego kwadratu.
  • BLACK = (0, 0, 0) – Definiuje kolor czarny w formacie RGB, który będzie tłem gry.
  • player_width, player_height = 60, 10 – Określa szerokość (60 pikseli) i wysokość (10 pikseli) gracza.
  • player_x, player_y = WIDTH // 2 - player_width // 2, HEIGHT - player_height - 10 – Ustawia początkową pozycję gracza pośrodku dolnej krawędzi ekranu.
  • player_speed = 7 – Definiuje prędkość poruszania się gracza w pikselach na klatkę.
  • square_size = 20 – Ustawia rozmiar spadającego kwadratu na 20 pikseli (szerokość i wysokość).
  • square_x = random.randint(0, WIDTH - square_size) – Losuje pozycję X kwadratu, tak aby zaczynał w losowym miejscu w poziomie.
  • square_y = 0 – Ustawia początkową pozycję Y kwadratu na górze ekranu.
  • square_speed = 5 – Definiuje prędkość spadania kwadratu, który przesuwa się w dół o 5 pikseli na klatkę.
  • score = 0 – Inicjalizuje wynik gracza na 0, który będzie zwiększany, gdy gracz złapie kwadrat.
  • font = pygame.font.Font(None, 36) – Ustawia czcionkę i jej rozmiar na 36 punktów do wyświetlania wyniku i komunikatów.
  • running = True – Flaga running ustawiona na True umożliwia działanie głównej pętli gry.
  • game_over = False – Flaga game_over ustawiona na False, informuje, że gra nie jest jeszcze zakończona.
  • while running: – Rozpoczyna główną pętlę gry, która będzie działała dopóki running pozostanie True.
  • screen.fill(BLACK) – Wypełnia cały ekran kolorem czarnym, co resetuje tło przed każdym rysowaniem, aby nie było śladów poprzednich klatek.
  • for event in pygame.event.get(): – Przechwytuje wszystkie zdarzenia, które miały miejsce od ostatniej klatki (np. kliknięcie przycisku, ruch myszy).
  • if event.type == pygame.QUIT: – Sprawdza, czy zdarzenie to zamknięcie okna gry przez użytkownika.
  • running = False – Ustawia running na False, co kończy pętlę gry, jeśli użytkownik zamknął okno.
  • keys = pygame.key.get_pressed() – Pobiera stan wszystkich klawiszy na klawiaturze, aby można było sprawdzić, które są aktualnie wciśnięte.
  • if keys[pygame.K_LEFT] and player_x > 0: – Sprawdza, czy wciśnięto klawisz strzałki w lewo i czy gracz nie wyjdzie poza lewą krawędź ekranu.
  • player_x -= player_speed – Przesuwa gracza w lewo o wartość player_speed, jeśli strzałka w lewo jest wciśnięta.
  • if keys[pygame.K_RIGHT] and player_x < WIDTH - player_width: – Sprawdza, czy wciśnięto strzałkę w prawo i czy gracz nie wyjdzie poza prawą krawędź ekranu.
  • player_x += player_speed – Przesuwa gracza w prawo o wartość player_speed, jeśli strzałka w prawo jest wciśnięta.
  • square_y += square_speed – Przesuwa kwadrat w dół o wartość square_speed, symulując spadanie.
  • player_rect = pygame.Rect(player_x, player_y, player_width, player_height) – Tworzy prostokąt reprezentujący gracza, co ułatwia późniejsze sprawdzenie kolizji.
  • square_rect = pygame.Rect(square_x, square_y, square_size, square_size) – Tworzy prostokąt reprezentujący spadający kwadrat.
  • if player_rect.colliderect(square_rect): – Sprawdza, czy prostokąt gracza koliduje z prostokątem kwadratu, czyli czy kwadrat został złapany.
  • score += 1 – Jeśli nastąpi kolizja, zwiększa wynik o 1.
  • square_x = random.randint(0, WIDTH - square_size) – Resetuje pozycję X kwadratu na losową wartość, aby pojawił się w innym miejscu po złapaniu.
  • square_y = 0 – Resetuje pozycję Y kwadratu na górze ekranu, aby zaczynał spadać od nowa.
  • if square_y > HEIGHT: – Sprawdza, czy kwadrat spadł poniżej dolnej krawędzi ekranu, czyli gracz go nie złapał.
  • game_over = True – Jeśli kwadrat spadł poza ekran, ustawia game_over na True, kończąc grę.
  • pygame.draw.rect(screen, WHITE, player_rect) – Rysuje prostokąt gracza na ekranie w miejscu określonym przez player_rect.
  • pygame.draw.rect(screen, RED, square_rect) – Rysuje prostokąt spadającego kwadratu w miejscu określonym przez square_rect.
  • score_text = font.render("Wynik: " + str(score), True, WHITE) – Renderuje tekst z wynikiem jako obraz, który można wyświetlić na ekranie.
  • screen.blit(score_text, (10, 10)) – Wyświetla wynik w lewym górnym rogu ekranu, przesuwając obraz wyniku o 10 pikseli od krawędzi.
  • pygame.display.update() – Aktualizuje ekran, aby wyświetlić nową klatkę z elementami gry. Bez tej linii widoczne byłyby tylko wcześniejsze zmiany.
  • pygame.time.delay(30) – Wstrzymuje wykonanie kolejnej iteracji pętli o 30 ms, aby spowolnić grę i uczynić ją płynniejszą.
  • if game_over: – Sprawdza, czy gra się zakończyła (np. kwadrat spadł bez złapania).
  • screen.fill(BLACK) – Wypełnia ekran kolorem czarnym, aby wyczyścić go przed wyświetleniem końcowego komunikatu.
  • end_text = font.render("Koniec gry", True, (255, 0, 0)) – Renderuje tekst „Koniec gry” na czerwono jako obraz.
  • end_text_rect = end_text.get_rect(center=(WIDTH // 2, HEIGHT // 2)) – Ustawia pozycję końcowego tekstu na środku ekranu.
  • screen.blit(end_text, end_text_rect) – Wyświetla komunikat „Koniec gry” na ekranie w położeniu ustalonym przez end_text_rect.
  • pygame.display.update() – Aktualizuje ekran, aby wyświetlić końcowy komunikat.
  • pygame.time.delay(3000) – Zatrzymuje grę na 3 sekundy, aby gracz mógł zobaczyć końcowy komunikat.
  • running = False – Ustawia running na False, kończąc główną pętlę gry.
  • pygame.quit() – Kończy działanie Pygame, zwalniając zasoby i zamykając okno gry.

Podsumowanie

Dzięki tym krokom stworzyliśmy prostą grę, w której można ćwiczyć podstawy Pygame i programowania. Dla początkujących to świetne wprowadzenie do logiki gier, pracy z Pygame, a także manipulacji grafiką i obiektami.

Was this helpful?

0 / 0