Python Podstawowy - Lekcja 6: Tworzymy Grę Arkanoid! 🎮🧱
Summary
🎮 Lekcja 6: Tworzymy Grę Arkanoid! 🧱✨
← Powrót do kursu Python Podstawowy
Witaj ponownie, młody twórco gier! 🚀 Dotarliśmy do bardzo specjalnej lekcji. Przez ostatnie 5 lekcji nauczyłeś się podstaw programowania w Pythonie - zmiennych, pętli, list, funkcji i logiki. Teraz połączymy WSZYSTKO, co umiesz, i stworzymy prawdziwą grę - Arkanoid!
🎯 Czego się dzisiaj nauczymy?
W tej super lekcji:
- 🎮 Stworzymy kompletną grę Arkanoid od podstaw
- 🧱 Nauczymy się tworzyć cegły do rozbijania
- 🏓 Zrobimy paletkę sterowaną klawiaturą
- ⚽ Dodamy piłkę z prawdziwą fizyką odbić
- 💥 Nauczymy się wykrywać kolizje (zderzenia)
- 🎨 Dodamy tło i kolory
- 📊 Stworzymy system punktacji
- 🏆 Nauczymy się warunków wygranej i przegranej
To będzie najbardziej ekscytująca lekcja! 🎉
🎮 Co to jest Arkanoid?
Arkanoid to klasyczna gra zręcznościowa, którą możesz znać pod różnymi nazwami (niektórzy mówią “Breakout” lub “rozbijanie cegieł”). Zasady są proste:
- U góry są kolorowe cegły do rozbijania 🧱
- Na dole jest paletka, którą sterujesz strzałkami ⬅️➡️
- Piłka odbija się od wszystkiego ⚽
- Cel: Zniszczyć wszystkie cegły, nie dając piłce spaść na dół!
Brzmi prosto? Ale stworzenie tego to prawdziwa przygoda programistyczna! 💻✨
🛠️ Przygotowanie - Co potrzebujemy?
Krok 1: Upewnij się, że masz Pygame Zero
W Lekcji 5 już instalowaliśmy Pygame Zero. Jeśli jeszcze tego nie zrobiłeś:
W Thonny:
- Menu: Narzędzia → Zarządzaj pakietami
- Wpisz:
pgzero - Kliknij Zainstaluj
Lub w terminalu:
pip install pgzero
Krok 2: Przygotuj grafiki
Nasza gra potrzebuje obrazków! Stwórz folder images obok swojego pliku z kodem i pobierz tam obrazki:
Potrzebujemy:
paletka.png- obrazek paletki (prostokąt, np. 100x20 pikseli)pilka.png- obrazek piłki (kółko, np. 20x20 pikseli)tlo.png- tło gry (800x600 pikseli)cegla_czerwona.png- czerwona cegła (100x25 pikseli)cegla_niebieska.png- niebieska cegłacegla_zielona.png- zielona cegłacegla_zolta.png- żółta cegła
📥 Pobierz gotowe grafiki!
Mam dla Ciebie gotowe obrazki do gry! 🎨
Możesz pobrać kompletny pakiet grafik dla gry Arkanoid:
👉 POBIERZ GRAFIKI DO GRY ARKANOID 📦
Co zawiera pakiet?
- ✅ Paletka (100×20 px)
- ✅ Piłka (20×20 px)
- ✅ Tło (800×600 px)
- ✅ 4 rodzaje kolorowych cegieł (100×25 px każda)
Jak użyć pobranych grafik?
- Pobierz plik ZIP i rozpakuj go
- Znajdziesz folder
imagesz wszystkimi grafikami - Skopiuj cały folder
imagesdo folderu z Twoją grą (obok plikuarkanoid.py) - Gotowe! 🎉
💡 Alternatywy:
- Paint / GIMP - narysuj własne grafiki! To świetna okazja do kreatywności! 🎨
- Internet - szukaj “pixel art brick”, “pixel art paddle” (pamiętaj o odpowiednich rozmiarach!)
- Proste kształty - na początek możesz rysować prostokąty zamiast używać obrazków (pokażemy jak poniżej)
🎨 Opcja: Gra BEZ obrazków (tylko kształty)
Nie masz obrazków? Żaden problem! Możesz użyć prostych kolorowych prostokątów:
# Zamiast Actor("paletka") użyj:
def draw():
screen.draw.filled_rect(Rect(paletka_x, paletka_y, 100, 20), 'white')
screen.draw.filled_circle((pilka_x, pilka_y), 10, 'yellow')
📁 Struktura folderów:
🗂️ twoj_projekt/
├── arkanoid.py ← Twój kod gry
└── 📁 images/
├── paletka.png
├── pilka.png
├── tlo.png
├── cegla_czerwona.png
├── cegla_niebieska.png
├── cegla_zielona.png
└── cegla_zolta.png
📚 Nowe koncepty, które poznasz
Zanim zaczniemy kodować, wyjaśnijmy kilka nowych rzeczy:
🎭 Co to jest Actor?
Actor (czytaj: “aktor”) to specjalny obiekt w Pygame Zero, który reprezentuje rzeczy w grze - jak postać w filmie! Każdy Actor ma:
- Obrazek - jak wygląda (np.
"paletka"- Pygame Zero szuka plikupaletka.pngw folderzeimages) - Pozycję - gdzie jest na ekranie
(x, y) - Rozmiar - szerokość i wysokość
# Tworzymy paletke jako Actor
paletka = Actor("paletka", (400, 555))
# ↑obrazek ↑pozycja (x, y)
Dlaczego Actor jest super?
- Ma wbudowane funkcje jak
.draw()(rysowanie) - Ma automatyczne krawędzie:
.left,.right,.top,.bottom - Łatwo sprawdzać kolizje:
.colliderect()
🌍 Zmienne global - Dlaczego ich potrzebujemy?
Pamiętasz zmienne z poprzednich lekcji? W grach mamy problem: zmienne utworzone poza funkcjami (na górze kodu) są “widoczne” w funkcjach, ale nie możemy ich tam zmieniać bez słowa global!
# Zmienna utworzona na górze
wynik = 0
def update():
global wynik # Mówimy: "Chcę zmieniać zmienną wynik z góry!"
wynik += 1 # Teraz możemy ją zmieniać!
Dlaczego to ważne? W grze wiele funkcji musi zmieniać te same zmienne - wynik, pozycję piłki, listę cegieł. Bez global każda funkcja miałaby swoją własną kopię i nic by nie działało! 😱
📦 Listy obiektów - Wiele cegieł naraz
Pamiętasz listy z Lekcji 5? W grze użyjemy listy do przechowywania wszystkich cegieł:
cegly = [] # Pusta lista na cegły
# Dodajemy cegły do listy
cegly.append(Actor("cegla_czerwona", (100, 20)))
cegly.append(Actor("cegla_niebieska", (200, 20)))
# Rysujemy wszystkie cegły pętlą!
for cegla in cegly:
cegla.draw()
Super sprawa: Możemy mieć 100 cegieł, a rysuje je tylko 3 linijki kodu! 🎨
💥 Kolizje - Jak sprawdzić, czy coś uderzyło?
Kolizja to moment, gdy dwie rzeczy się dotykają (np. piłka uderza w paletkę). W Pygame Zero sprawdzamy to funkcją .colliderect():
if pilka.colliderect(paletka):
print("Piłka uderzyła w paletkę!")
pilka.predkoscy *= -1 # Odwróć kierunek piłki
Jak to działa? Pygame Zero sprawdza, czy prostokąty (boxy) wokół obiektów się nakładają. Proste i skuteczne! 📦➕📦 = 💥
🚀 Etap 1: Podstawowa struktura gry
Zaczynamy! Stwórz nowy plik arkanoid.py i wpisz ten kod:
import pgzrun
# Rozmiar okna gry
WIDTH = 800
HEIGHT = 600
# Tworzymy tło
tlo = Actor("tlo", (400, 300))
def draw():
"""Ta funkcja rysuje wszystko na ekranie"""
tlo.draw() # Rysujemy tło
# Tytuł gry
screen.draw.text("ARKANOID", (320, 250),
color="white", fontsize=60)
screen.draw.text("Naciśnij ENTER, aby zacząć", (250, 350),
color="yellow", fontsize=30)
def update():
"""Ta funkcja aktualizuje grę co klatkę"""
pass # Na razie nic nie robimy
pgzrun.go()
Uruchom to! (F5 w Thonny)
Co widzisz? Okno z tłem i napisami! To jest nasz ekran startowy. 🎬
Wyjaśnienie kodu:
WIDTH = 800, HEIGHT = 600- rozmiar okna (jak ekran telewizora!)tlo = Actor("tlo", (400, 300))- tło wycentrowane na środku (połowa z 800 = 400, połowa z 600 = 300)screen.draw.text()- funkcja do rysowania tekstu na ekraniepass- słowo “nic nie rób” (placeholder)
🏓 Etap 2: Dodajemy paletkę
Teraz dodamy paletkę, którą będziesz sterować!
Zamień cały kod na ten:
import pgzrun
WIDTH = 800
HEIGHT = 600
# Tworzymy obiekty gry
tlo = Actor("tlo", (400, 300))
paletka = Actor("paletka", (400, 555)) # Paletka na dole, na środku
def draw():
"""Rysuje wszystko"""
tlo.draw()
paletka.draw() # Rysujemy paletkę!
# Napisy
screen.draw.text("ARKANOID", (320, 50),
color="white", fontsize=60)
screen.draw.text("Użyj strzałek ← →", (300, 500),
color="yellow", fontsize=25)
def update():
"""Sterowanie paletką"""
if keyboard.right and paletka.right <= WIDTH:
paletka.x += 10 # Idź w prawo
if keyboard.left and paletka.left > 0:
paletka.x -= 10 # Idź w lewo
pgzrun.go()
Uruchom! Teraz możesz sterować paletką strzałkami! ⬅️➡️
Co nowego?
paletka = Actor("paletka", (400, 555))- paletka na dole (y=555 to prawie sam dół!)paletka.right <= WIDTH- sprawdza, czy paletka nie wyszła za prawą krawędźpaletka.left > 0- sprawdza, czy nie wyszła za lewą krawędźpaletka.x += 10- przesuwa paletkę o 10 pikseli w prawo
🎮 Zadanie: Zmień 10 na 5 lub 15 - zobacz, jak zmienia się szybkość paletki!
⚽ Etap 3: Dodajemy piłkę
Czas na piłkę, która się porusza!
Dodaj na górze (po linii z paletką):
# Tworzymy piłkę
pilka = Actor("pilka", (400, 300)) # Start na środku ekranu
pilka.predkoscx = 5 # Prędkość w prawo/lewo
pilka.predkoscy = 5 # Prędkość góra/dół
W funkcji draw() dodaj (po rysowaniu paletki):
pilka.draw() # Rysujemy piłkę
Stwórz nową funkcję (pod funkcją update()):
def pilka_sterowanie():
"""Poruszanie piłką i odbicia od ścian"""
global pilka
# Poruszaj piłką
pilka.x += pilka.predkoscx
pilka.y += pilka.predkoscy
# Odbicie od lewej i prawej ściany
if pilka.x >= WIDTH or pilka.x <= 0:
pilka.predkoscx *= -1 # Odwróć kierunek poziomy
# Odbicie od górnej ściany
if pilka.y <= 0:
pilka.predkoscy *= -1 # Odwróć kierunek pionowy
# Piłka spadła na dół - przegrana
if pilka.y >= HEIGHT:
print("PRZEGRAŁEŚ! Piłka spadła!")
pilka.predkoscy *= -1 # Na razie odbijamy od dołu też
W funkcji update() dodaj na końcu:
pilka_sterowanie() # Wywołujemy funkcję piłki
Uruchom! Piłka leci i odbija się od ścian! ⚽💨
Wyjaśnienie:
pilka.predkoscx- prędkość pozioma (x). Dodatnia = w prawo, ujemna = w lewopilka.predkoscy- prędkość pionowa (y). Dodatnia = w dół, ujemna = w górę*= -1- zmienia znak (5 staje się -5, -5 staje się 5) = odwrócenie kierunku!pilka.x >= WIDTH- sprawdza, czy piłka dotarła do prawej ściany
🧠 Zastanów się: Dlaczego piłka odbija się od ścian? Bo gdy dotyka ściany, zmieniamy znak prędkości - jeśli leciała w prawo (+5), to zaczyna lecieć w lewo (-5)! 🔄
🏓 Etap 4: Odbicie od paletki
Teraz sprawmy, żeby piłka odbijała się od paletki!
W funkcji pilka_sterowanie() dodaj (przed linią “Piłka spadła na dół”):
# Odbicie od paletki
if pilka.colliderect(paletka):
pilka.predkoscy *= -1 # Odbij piłkę w górę!
Uruchom! Teraz możesz odbijać piłkę paletką! 🎾
Co się dzieje?
pilka.colliderect(paletka)- sprawdza, czy piłka dotyka paletki- Jeśli TAK → odwracamy
predkoscy(piłka leci w górę zamiast w dół) - Efekt: piłka odbija się od paletki! 🏓
🧱 Etap 5: Dodajemy cegły do rozbijania!
Najważniejsza część - cegły! Użyjemy pętli i listy, żeby stworzyć wiele cegieł naraz.
Na górze pliku (po linii z piłką) dodaj:
# Lista cegieł (na razie pusta)
cegly = []
# Kolory cegieł (4 rzędy)
kolory_cegiel = ["cegla_czerwona", "cegla_niebieska",
"cegla_zielona", "cegla_zolta"]
# Tworzymy siatkę cegieł: 7 kolumn × 4 rzędy = 28 cegieł!
for i in range(7): # 7 cegieł w poziomie
for j in range(4): # 4 rzędy w pionie
# Wybieramy kolor cegły (zmienia się co rząd)
kolor = kolory_cegiel[j % 4]
# Tworzymy cegłę i dodajemy do listy
cegly.append(Actor(kolor, (1.1 * i * 100 + 70, j * 25 + 20)))
W funkcji draw() dodaj (po rysowaniu piłki):
# Rysujemy wszystkie cegły
for cegla in cegly:
cegla.draw()
Uruchom! WOW! Masz teraz siatkę kolorowych cegieł! 🧱🌈
📊 Matematyka pozycji cegieł (nie bój się, wyjaśniam!):
(1.1 * i * 100 + 70, j * 25 + 20)
Poziomo (X):
i * 100- każda cegła jest przesunięta o 100 pikseli1.1 *- mnożymy przez 1.1, żeby dać małą przerwę między cegłami+ 70- przesunięcie od lewej krawędzi (margines)
Wynik dla pierwszych 3 cegieł:
- i=0:
1.1 * 0 * 100 + 70 = 70 - i=1:
1.1 * 1 * 100 + 70 = 180 - i=2:
1.1 * 2 * 100 + 70 = 290
Pionowo (Y):
j * 25- każdy rząd jest 25 pikseli niżej+ 20- przesunięcie od górnej krawędzi
Wynik dla 4 rzędów:
- j=0:
0 * 25 + 20 = 20(pierwszy rząd) - j=1:
1 * 25 + 20 = 45(drugi rząd) - j=2:
2 * 25 + 20 = 70(trzeci rząd) - j=3:
3 * 25 + 20 = 95(czwarty rząd)
Wizualizacja:
70 180 290 400 510 620 730
┌─────────────────────────────────────────┐
20 │ 🟥 🟥 🟥 🟥 🟥 🟥 🟥 │ ← Czerwone (j=0)
45 │ 🟦 🟦 🟦 🟦 🟦 🟦 🟦 │ ← Niebieskie (j=1)
70 │ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 │ ← Zielone (j=2)
95 │ 🟨 🟨 🟨 🟨 🟨 🟨 🟨 │ ← Żółte (j=3)
└─────────────────────────────────────────┘
🎓 Nauka:
- Pętla
for i in range(7)tworzy kolumny (0, 1, 2, 3, 4, 5, 6) - Pętla
for j in range(4)tworzy rzędy (0, 1, 2, 3) %(modulo) wybiera kolor -j % 4daje resztę z dzielenia: 0→czerwony, 1→niebieski, 2→zielony, 3→żółty
💥 Etap 6: Rozbijanie cegieł i punkty!
Czas sprawić, żeby cegły znikały po trafieniu!
Na górze (po linii z cegłami) dodaj:
wynik = 0 # Licznik punktów
W funkcji pilka_sterowanie() dodaj (przed linią “Odbicie od paletki”):
# Sprawdzanie kolizji z cegłami
global wynik
for index, cegla in enumerate(cegly):
if pilka.colliderect(cegla):
pilka.predkoscy *= -1 # Odbij piłkę
cegly.pop(index) # Usuń cegłę z listy
wynik += 1 # Dodaj punkt!
print(f"Punkty: {wynik}")
break # Ważne! Wychodzimy z pętli (piłka może trafić tylko 1 cegłę na raz)
W funkcji draw() dodaj (na końcu, po rysowaniu cegieł):
# Wyświetl wynik
screen.draw.text(f"Wynik: {wynik}", (10, 10),
color="white", fontsize=30)
Uruchom! Teraz rozbijasz cegły i zdobywasz punkty! 🎯💥
Wyjaśnienie nowego kodu:
enumerate(cegly)- specjalna funkcja, która daje nam zarówno numer (index), jak i cegłę z listy:for index, cegla in enumerate(cegly): # index = 0, 1, 2, 3... # cegla = Actor z listycegly.pop(index)- usuwa cegłę o danym numerze z listy. To jak wyrzucanie książki z półki!break- natychmiast wychodzi z pętli. Dlaczego? Bo jeśli piłka trafi 2 cegły naraz, kod by się popsuł (próbowalibyśmy usunąć tę samą cegłę dwa razy).breakmówi: “OK, trafiłem jedną, koniec pętli!”wynik += 1- to samo cowynik = wynik + 1- dodaj 1 punkt!
🎮 Zagraj! Spróbuj rozbić wszystkie cegły!
🎯 Etap 7: Warunki wygranej i przegranej
Gra musi mieć koniec - wygraną lub przegraną! Dodajmy to.
Zmień funkcję pilka_sterowanie() - znajdź linię “Piłka spadła na dół” i zamień na:
# Piłka spadła na dół - PRZEGRANA!
if pilka.y >= HEIGHT:
print("💀 KONIEC GRY! Piłka spadła na dół!")
print(f"Twój wynik: {wynik} punktów")
# Reset gry
pilka.x = 400
pilka.y = 300
pilka.predkoscx = 5
pilka.predkoscy = 5
W funkcji update() dodaj na końcu:
# Sprawdź, czy wygrałeś!
if len(cegly) == 0:
screen.draw.text("🏆 WYGRAŁEŚ! 🏆", (250, 250),
color="gold", fontsize=60)
print("🎉 Gratulacje! Rozbiłeś wszystkie cegły!")
Uruchom! Teraz gra wykrywa wygraną i przegraną!
Co nowego?
len(cegly)- funkcjalen()sprawdza długość listy (ile cegieł zostało)len(cegly) == 0- jeśli 0 cegieł, to WYGRANA! 🏆- Reset gry ustawia piłkę z powrotem na środek
� Złóż wszystko razem!
A teraz najważniejsza część! 💪
Przeszedłeś przez wszystkie 7 etapów. Twoja gra powinna działać i mieć:
- ✅ Okno z tłem
- ✅ Paletkę sterowaną strzałkami
- ✅ Lecącą piłkę
- ✅ Odbicia od ścian i paletki
- ✅ Siatkę kolorowych cegieł
- ✅ Rozbijanie cegieł i punkty
- ✅ Warunki wygranej i przegranej
Uruchom swoją grę i zagraj! Jeśli wszystko działa - GRATULACJE! Jesteś prawdziwym twórcą gier! 🎉
💡 Wskazówka: Jeśli coś nie działa, sprawdź:
- Czy wszystkie fragmenty kodu są w odpowiednich miejscach?
- Czy pamiętałeś o
globalw funkcjipilka_sterowanie()? - Czy masz folder
images/z grafikami? - Czy funkcja
pilka_sterowanie()jest wywoływana wupdate()?
🆘 Potrzebujesz pomocy? Zapytaj ChatGPT: “Dlaczego moja gra Arkanoid nie działa? Oto mój kod: [wklej kod]”
🚀 Zadania i wyzwania - Ulepsz swoją grę!
Teraz, gdy masz działającą grę, możesz ją rozwijać! Oto pomysły:
🟢 Łatwe wyzwania (dla każdego!)
Zmień kolory cegieł - dodaj piąty kolor!
kolory_cegiel = ["cegla_czerwona", "cegla_niebieska", "cegla_zielona", "cegla_zolta", "cegla_rozowa"]Zmień prędkość piłki - spraw, żeby leciała szybciej lub wolniej:
pilka.predkoscx = 8 # Szybciej! pilka.predkoscy = 8Dodaj więcej cegieł - zmień
range(7)irange(4):for i in range(10): # 10 kolumn! for j in range(6): # 6 rzędów!Zmień punkty za cegły - niektóre cegły są warte więcej:
if kolor == "cegla_czerwona": wynik += 5 # Czerwone cegły = 5 punktów! else: wynik += 1
🟡 Średnie wyzwania (spróbuj!)
System żyć - gracz ma 3 życia zamiast 1:
zycia = 3 # Na górze # W pilka_sterowanie(): if pilka.y >= HEIGHT: zycia -= 1 if zycia == 0: print("KONIEC GRY!") else: print(f"Zostało żyć: {zycia}") # Reset piłkiPrzyspieszanie piłki - piłka przyspiesza po każdym odbiciu:
if pilka.colliderect(paletka): pilka.predkoscy *= -1 pilka.predkoscx *= 1.05 # 5% szybciej! pilka.predkoscy *= 1.05Różne punkty za kolory:
punkty_za_kolor = { "cegla_czerwona": 10, "cegla_niebieska": 5, "cegla_zielona": 3, "cegla_zolta": 1 } # W kolizji: wynik += punkty_za_kolor[cegla.image]Dźwięki - dodaj efekty dźwiękowe! (musisz mieć folder
sounds/z plikami .wav):# W kolizji z cegłą: sounds.brick_break.play() # W kolizji z paletką: sounds.paddle_hit.play()
🔴 Trudne wyzwania (dla mistrzów!)
Power-upy - spadające bonusy, które wydłużają paletkę lub zwalniają piłkę:
powerupy = [] # Gdy cegła się rozbije: if random.randint(1, 5) == 1: # 20% szans powerup = Actor("powerup", cegla.pos) powerupy.append(powerup) # Poruszaj power-upami w dół # Sprawdzaj kolizje z paletkąCegły niezniszczalne - niektóre cegły trzeba uderzyć 2-3 razy:
# Zamiast Actor, użyj słownika: cegly = [] for i in range(7): for j in range(4): cegla = { "actor": Actor(kolor, pozycja), "wytrzymalosc": 2 # Trzeba 2 razy uderzyć! } cegly.append(cegla) # W kolizji: cegla["wytrzymalosc"] -= 1 if cegla["wytrzymalosc"] == 0: cegly.pop(index)Odbicie pod kątem - piłka odbija się pod różnymi kątami w zależności od miejsca trafienia paletki:
if pilka.colliderect(paletka): # Gdzie piłka uderzyła w paletkę? offset = pilka.x - paletka.x # -50 do +50 pilka.predkoscx = offset / 5 # Wpływ na kierunek pilka.predkoscy *= -1Poziomy trudności - po rozbiciu wszystkich cegieł, nowy poziom!
poziom = 1 # Gdy wszystkie cegły rozbite: if len(cegly) == 0: poziom += 1 # Stwórz nowe cegły # Zwiększ prędkość piłki pilka.predkoscx *= 1.2 pilka.predkoscy *= 1.2
🧠 Co się nauczyłeś w tej lekcji?
To była OGROMNA lekcja! Zobacz, ile nowych rzeczy opanowałeś:
📚 Nowe koncepty:
- Obiekty
Actor- reprezentacja rzeczy w grze (paletka, piłka, cegły) - Kolizje - wykrywanie zderzeń za pomocą
.colliderect() - Listy obiektów - przechowywanie wielu cegieł w jednej zmiennej
- Zmienne
global- modyfikowanie zmiennych z funkcji - Pętle zagnieżdżone - tworzenie siatki cegieł
- Fizyka odbić - zmiana kierunku przez
*= -1 - Warunki gry - wykrywanie wygranej i przegranej
🎮 Umiejętności z gier:
- Sterowanie obiektem (paletka)
- Fizyka poruszania (piłka)
- Wykrywanie kolizji (zderzenia)
- System punktacji (wynik)
- Usuwanie obiektów (rozbijanie cegieł)
- Warunki zwycięstwa (brak cegieł)
💡 Z poprzednich lekcji użyłeś:
✅ Zmienne (Lekcja 1-2) - wynik, pilka.predkoscx
✅ Instrukcje warunkowe if (Lekcja 3) - sprawdzanie kolizji
✅ Pętle for (Lekcja 4) - rysowanie cegieł
✅ Listy (Lekcja 5) - cegly, kolory_cegiel
✅ Funkcje (Lekcja 5) - draw(), update(), własne funkcje
Zobacz? Wszystko, czego się uczyłeś przez 5 lekcji, połączyło się w prawdziwą grę! 🎯✨
🎨 Dodatkowe porady i triki
🖼️ Jak stworzyć proste grafiki?
Jeśli nie masz gotowych obrazków, możesz je szybko zrobić:
W programie Paint (Windows):
- Utwórz nowy obraz 100×25 pikseli (dla cegły)
- Zamaluj na czerwono
- Zapisz jako PNG:
cegla_czerwona.png - Powtórz dla innych kolorów
Lub użyj prostych kształtów:
# Zamiast Actor możesz narysować prostokąty:
screen.draw.filled_rect(Rect(x, y, 100, 25), 'red')
🎵 Gdzie znaleźć dźwięki?
Darmowe dźwięki:
- freesound.org - tysiące darmowych dźwięków
- zapsplat.com - efekty do gier
Umieść pliki w folderze sounds/:
🗂️ twoj_projekt/
├── arkanoid.py
├── 📁 images/
└── 📁 sounds/
├── brick_break.wav
├── paddle_hit.wav
└── game_over.wav
📊 Śledzenie najlepszego wyniku
najlepszy_wynik = 0
# Po przegranej:
if wynik > najlepszy_wynik:
najlepszy_wynik = wynik
print(f"🏆 NOWY REKORD! {najlepszy_wynik} punktów!")
# W draw():
screen.draw.text(f"Rekord: {najlepszy_wynik}", (10, 40),
color="gold", fontsize=25)
🤖 Pytaj AI o pomoc!
Jeśli coś nie działa lub chcesz dodać nową funkcję, zapytaj ChatGPT!
Przykładowe pytania:
📌 “Jak dodać dźwięk do mojej gry Pygame Zero?”
📌 “Jak zrobić power-up, który wydłuża paletkę w Arkanoid?”
📌 “Dlaczego moja piłka przechodzi przez cegły?”
📌 “Jak dodać animację rozbijającej się cegły?”
📌 “Pokaż kod na system 3 żyć w grze Arkanoid”
Magiczna formuła z Lekcji 3 działa świetnie! 🧙♂️
🎉 Podsumowanie - Jesteś prawdziwym twórcą gier!
Gratulacje! 🏆 Właśnie stworzyłeś swoją pierwszą kompletną grę! To niesamowite osiągnięcie!
Co dalej?
- Pokaż swoją grę rodzinie i przyjaciołom! 👨👩👧👦
- Dodaj własne ulepszenia z sekcji wyzwań 🚀
- Stwórz nowe gry - może Snake? Pac-Man? Space Invaders? 🎮
- Dziel się swoim kodem z innymi młodymi programistami! 💻
Pamiętaj:
- Każdy programista zaczynał od prostych projektów
- Gry to najlepsza metoda nauki programowania
- Nie bój się eksperymentować - nie zepsujesz komputera! 😊
- Każdy błąd to lekcja, nie porażka
W następnej lekcji możemy stworzyć kolejną grę lub nauczyć się nowych rzeczy - co Cię bardziej interesuje? Napisz w komentarzach! 💬
← Powrót do kursu Python Podstawowy
Stworzyłeś swoją grę? Pokaż w komentarzach! Chcemy zobaczyć Twoje dzieło! A może masz pomysł na nową funkcję? Napisz! 🎮✨
comments powered by Disqus