Projekt w postaci gry napisanej w Python to świetny pomysł, aby podnieść swoje umiejętności programistyczne jak również usystematyzować zdobytą już wiedzę. Zanim zacznie się jednak tworzyć swoją pierwszą grę warto poznać bibliotekę która umożliwi stworzenie jej. Biblioteką tą jest PYGAME
Spis treści
- Co to jest Pygame
- Instalacja
- Tworzenie okna gry
- Tworzenie rysunków
- Poruszanie postacią w grze
- Dodawanie zdjęć
Co to jest Pygame
Pygame – to stworzona przez Pete Shinnersa biblioteka przeznaczona do tworzenia gier komputerowych oraz aplikacji multimedialnych w języku Python. Pygame daje nam do dyspozycji GUI ( Graficzny interfejs użytkownika, interfejs graficzny, środowisko graficzne, GUI (ang. graphical user interface)) który umożliwia na wyświetlanie grafiki, odtwarzanie dźwięków, śledzenie czasu, obsługę myszy i joysticka, obsługę CD, czy renderowanie czcionek TTF.
Instalacja
Instalacja jest prosta i wymaga jedynie wywołania komendy do instalacji w pythonie.
pip install pygame
Tworzenie okna gry
Podstawą każdej gry jest okienko w którym będzie się wszystko działo, aby utworzyć takie okno gry w pygame musimy najpierw zaimportować bibliotekę pygame. Następnie wykorzystać pygame.init() która służy do zainicjowania zaimportowanych modułów gry z naszej biblioteki. Wreszcie definiujemy nasze okno gry o wymiarach 500 x 500 dzięki pygame.display.set_mode((500, 500)) i na koniec wyświetlamy je za pomocą pygame.display.set_caption(„Moja Gra”) gdzie w nawiasie możemy ustawić nazwę naszego okienka, w tym wypadku nazwaliśmy go „Moja gra”.
import pygame pygame.init() # definiowanie okna gry win = pygame.display.set_mode((500, 500)) # wyświetlenie okna gry pygame.display.set_caption("Moja Gra")
po uruchomieniu programu, zobaczymy o to takie okno gry.

Jednak okno wyświetla nam się tylko na chwile. Naprawimy to używając tak zwanej pętli głównej gry która będzie „podtrzymywać” nasze okno
run = True # pętla główna while run: # obsługa zdarzeń for event in pygame.event.get(): if event.type == pygame.QUIT: run = False
Pętla while spowoduję, że nasze okno nie zamyka się, ale jednak chcemy, by się zamknęło kiedy my tego chcemy.Najlepiej, żeby zamykało się wtedy kiedy klikniemy na X w prawym górnym rogu. Użyjemy do tego celu obsługe zdarzeń. Dzięki pętli for event in pygame.event.get() odczytujemy kolejkę wszystkich zdarzeń z klawiatury lub myszy wysyłanych między aplikacją pygame a użytkownikiem. Ustawiając warunek if event.type == pygame.QUIT: sprawdzamy czy zdarzenie event.type równa się QUIT czyli naciśniecie na X w oknie. Jeśli warunek zostanie spełniony to pętla główna przestanie działać i okno się zamknie.
Cały kod
import pygame pygame.init() # definiowanie okna gry win = pygame.display.set_mode((500, 500)) # wyświetlanie okna gry pygame.display.set_caption("Moja Gra") run = True # pętla główna while run: # obsługa zdarzeń for event in pygame.event.get(): if event.type == pygame.QUIT: run = False
Tworzenie rysunków
Tworząc gry musimy tworzyć różne obiekty jak również teksty informujące o ilości zdobywanych pkt lub opisujący menu, dlatego biblioteka pygame, oferuje prosty sposób tworzenia różnych figur oraz umożliwia wypisywanie tekstu w oknie.
Aby narysować prostokąt definiujemy jego kolor, wymiary oraz położenie w którym chcemy go narysować. Następnie w pętli umieścimy metodę pygame.draw.rect() która narysuje prostokąt w oknie, jednak nie zobaczymy go po uruchomieniu programu dopóki na końcu nie dodamy pygame.display.update() która odpowiada za odświeżenie ekranu naszego okna.
#definiujemy zmienne KOLOR = (255, 0, 0) x = 10 y = 30 szer = 100 wys = 100 while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # funkcja rysująca kwadrat pygame.draw.rect(win, KOLOR, (x, y, szer, wys)) # odświeżenie ekranu pygame.display.update()
Wynikiem tego kodu będzie :

Biblioteka umożliwia nie tylko rysowanie prostokąta, ale również koła
pygame.draw.circle(win, (128, 0, 128), (60, 200), 50, 0)
gdzie pygame.draw.circle(okno, Kolor, Współrzędne, Średnica, Wypełnienie)
oraz linii
# linia pozioma pygame.draw.line(win, NIEBIESKI, (10, 325), (110, 325), 15) # linia pionowa pygame.draw.line(win, SZARY, (210, 275), (210, 375), 5)
pygame.draw.line(Okno, kolor, współrzędne_początkowe, współrzędne_końcowe , grubość_lini) gdzie linia jest rysowana poprzez połączenie dwóch punktów, współrzędne_początkowe z współrzędne_końcowe.
Kiedy chcemy dodać teks na przykład jako menu startowe w grze, albo wyświetlanie wyniku jaki otrzymaliśmy. Potrzebujemy jedynie 3 linijki kodu
font = pygame.font.SysFont('comicsans', 30) label = font.render('Ale ze mnie Pablo Picasso ', 1, (255, 255, 255)) win.blit(label, (100, 425))
Gdzie musimy najpierw zdefiniować czcionkę oraz rozmiar teksu pygame.font.SysFont(’comicsans’, 30), następnie definiujemy tekst i jego kolor jaki chcemy wypisać font.render(’Ale ze mnie Pablo Picasso’ , 1, (255, 255, 255)), a na koniec wypisujemy teks win.blit(label, (100, 425)) w lokalizacji zdeklarowanej w nawiasie.
Kilka przykładów
import pygame pygame.init() win = pygame.display.set_mode((500, 500)) pygame.display.set_caption("First Game") # deklarowanie kolorów CZERWONY = (255, 0, 0) ZIELONY = (0, 255, 0) ZOLTY = (255, 255, 0) FIOLETOWY = (128, 0, 128) JASNY_NIEBIESKI = (0, 255, 255) POMARANCZOWY = (255, 165, 0) NIEBIESKI = (0, 0, 255) SZARY = (128, 128, 128) run = True while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # rysowanie kwadratów pygame.draw.rect(win, CZERWONY , (10, 30, 100, 100)) pygame.draw.rect(win, ZOLTY, (160, 30, 100, 100)) pygame.draw.rect(win, ZIELONY, (310, 30, 100, 100)) # rysowanie kół pygame.draw.circle(win, FIOLETOWY, (60, 200), 50, 0) pygame.draw.circle(win, JASNY_NIEBIESKI, (210, 200), 50, 25) pygame.draw.circle(win, POMARANCZOWY, (360, 200), 50, 5) # linia pozioma pygame.draw.line(win, NIEBIESKI, (10, 325), (110, 325), 15) # linia pionowa pygame.draw.line(win, SZARY, (210, 275), (210, 375), 5) # rysowanie plusa pygame.draw.line(win, NIEBIESKI, (310, 325), (410, 325), 10) pygame.draw.line(win, SZARY, (360, 275), (360, 375), 10) # wypisywanie tekstu font = pygame.font.SysFont('comicsans', 30) label = font.render('Ale ze mnie Pablo Picasso ', 1, (255, 255, 255)) win.blit(label, (100, 425)) pygame.display.update()

Poruszanie postacią w grze
Kluczowe w każdej grze jest poruszanie postacią, bez tego ciężko mówić o tworzeniu gry. Polegać to będzie na obsługiwaniu zdarzeń poprzez metode pygame.key.get_pressed() która będzie pobierać stan wszystkich przycisków. Zależnie od wciśniętego przycisku, do zmiennej x lub y (odpowiadające za położenie obiektu) zostanie dodana lub odjęta zmienna krok, wyniku czego nasz obiekt przesunie się o daną wartość wybranym przez nas kierunku.
# opóźnienie w grze pygame.time.delay(50) # obsługa zdarzeń keys = pygame.key.get_pressed() # warunki do zmiany pozycji obiektu if keys[pygame.K_LEFT] : x -= krok if keys[pygame.K_RIGHT] : x += krok if keys[pygame.K_UP] : y -= krok if keys[pygame.K_DOWN] : y += krok pygame.draw.rect(okno, (0, 255, 0), (x, y, szerokosc, wysokosc)) pygame.display.update()
Stworzone przez nas warunki powodują, że w zależności od wciśniętego przycisku czy to strzałka w dół (keys[pygame.K_DOWN]), czy w prawo (keys[pygame.K_RIGHT]) zostają wprowadzone nowe współrzędne naszego obiektu( zielony kwadrat). Posiadamy również możliwość zarządzania płynność gry dzięki funkcje pygame.time.delay(50) która odpowiada za opóźnienie gry o milisekundy, w naszym przypadku to 0,05 sek.
Teraz kiedy odpalimy program i zaczniemy poruszać obiektem, naszym oczom ukaże się coś tego typu

Spowodowane jest to tym, że poprzednie pozycja kwadratu zostaję wciąż na ekranie, żeby to naprawić przed narysowaniem obiektu w nowej pozycji musimy wyczyścić ekran
Wykorzystamy do tego funkcje fill(), która zamaluje cały ekran wybranym przez nas kolorem (mamy czarne tło więc będziemy używać czarnego koloru) przed narysowaniem naszego obiektu.
win.fill((0, 0, 0)) pygame.draw.rect(okno, (0, 255, 0), (x, y, szerokosc, wysokosc)) pygame.display.update()
Wyniku otrzymamy
Cały kod
import pygame pygame.init() win = pygame.display.set_mode((500, 540)) pygame.display.set_caption("Pierwsza gra") x = 0 y = 40 szerokosc = 20 wysokosc = 20 krok = 20 run = True while run: # opóźnienie w grze pygame.time.delay(50) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # obsługa zdarzeń keys = pygame.key.get_pressed() # warunki do zmiany pozycji obiektu if keys[pygame.K_LEFT]: x -= krok if keys[pygame.K_RIGHT]: x += krok if keys[pygame.K_UP]: y -= krok if keys[pygame.K_DOWN] : y += krok # "czyszczenie" ekranu win.fill((0, 0, 0)) # rysowanie prostokąta pygame.draw.rect(win, (0, 255, 0), (x, y, szerokosc, wysokosc)) # odświeżenie ekranu pygame.display.update()
Dodawanie zdjęć
Nasza gra, żeby mogła się charakteryzować nietuzinkowymi postaciami którymi możemy grać, oraz zachwycającymi tłami powinna mieć też możliwość wgrywania rożnych grafik, a nie jedynie opierać się na rysowaniu figur na jednokolorowym tle.
Dlatego pygame umożliwia nam szybkie wgrywanie obrazów
# dodanie postaci postac = pygame.image.load('Rakieta.png') # dodanie tła tlo = pygame.image.load('Tło.jpg')
do tego służy metoda pygame.image.load(nazwa_pliku)
następnie żeby to wyświetlić wystarczy użyć metody blit(), w taki sposób
win.blit(tlo,(0, 0 )) win.blit(postac, (x,y))
Po uruchomieniu zamiast poruszaniem kwadratu w czarnej odchłani mamy do dyspozycji rakietę w kosmosie

Cały kod
import pygame pygame.init() win = pygame.display.set_mode((390,395)) pygame.display.set_caption("First Game") # Dodawanie postaci postac = pygame.image.load('Rakieta.png') # dodawanie tła tlo = pygame.image.load('Tło.jpg') x = 150 y = 200 run = True while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # Inicjalizacja tła win.blit(tlo,(0, 0 )) # Inicjalizacja postaci win.blit(postac, (x,y)) pygame.display.update()
Podsumowanie
Za pomocą pygame możemy zrobić wiele rzeczy, stworzyć okno gry, rysować różne obiekty i nimi sterować i na dodatek wgrywać zdjęcia. Posiadając te podstawy można wykorzystać potencjał tej biblioteki i stworzyć pierwsze gry pokroju sneka, pac mana lub tetrisa. Dlatego w kolejnych artykułach zajmiemy się tworzeniem takich właśnie o to gier.