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 wymiarachWIDTHxHEIGHT, 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– Flagarunningustawiona naTrueumożliwia działanie głównej pętli gry.game_over = False– Flagagame_overustawiona naFalse, informuje, że gra nie jest jeszcze zakończona.while running:– Rozpoczyna główną pętlę gry, która będzie działała dopókirunningpozostanieTrue.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– UstawiarunningnaFalse, 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, ustawiagame_overnaTrue, kończąc grę.pygame.draw.rect(screen, WHITE, player_rect)– Rysuje prostokąt gracza na ekranie w miejscu określonym przezplayer_rect.pygame.draw.rect(screen, RED, square_rect)– Rysuje prostokąt spadającego kwadratu w miejscu określonym przezsquare_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 przezend_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– UstawiarunningnaFalse, 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