🐍Python🐍 zajęcia 11

🐍Python🐍 zajęcia 11
Photo by David Clode / Unsplash
  • biblioteka PyGame Zero - podstawowa charakterystyka
  • 📌program - odbijanie napisów od ścianek okna
  • 📌program - ping pong

PyGame Zero

  • jest uproszczoną wersją PyGame
  • Pygame to biblioteka Pythona do tworzenia gier 2D i prostych aplikacji multimedialnych.
  • Opiera się na SDL (Simple DirectMedia Layer).
  • Obsługuje grafikę, dźwięk, zdarzenia z klawiatury i myszy
  • link do dokumentacji biblioteki: https://pygame-zero.readthedocs.io/en/stable/index.html#

Charakterystyka:

  • instalacja: pip3 install pgzero
  • import: import pgzrun
  • struktura kodu:
    • import bibliotek
    • rozmiar i parametry okna
# rozmiar okna - pozniej wrzucimy to do osobnego pliku
WIDTH = 800
HEIGHT = 600

screen = pgzero_screen.Screen(display.set_mode((WIDTH, HEIGHT), 0))

    • funkcje własne
class Pilka(Actor):
    def __init__(self, obrazek, polozenie):
        super().__init__(obrazek, polozenie)
        self.ruch_x = 3
        self.ruch_y = 3

    • obiekty
paletka1 = Paletka("paletka.png", (WIDTH -50 , HEIGHT // 2))
paletka2 = Paletka("paletka.png", (50, HEIGHT // 2))
pilka = Pilka("pilka.png", (100, 120))
    • aktualizacja stany obiektów:
def update():
    # tu aktualizujemy stan obiektow
    • rysowanie obiektów (łączymy je z metodami)
def draw():
    # tu je rysujemy

    screen.clear()
    paletka1.draw()
    paletka2.draw()
    pilka.draw()
    • wywołanie pętli gry
# wywołanie pętli gry
pgzrun.go()
  • colliderectangle - funkcja do reakcji po kolizji obiektów ( nie trzeba podawać ich współrzędnych)

💡Ciekawostki:

  1. tworząc programy w tej bibliotece powinniśmy korzystać z obrazów w formacie PNG ponieważ obsługują przeźroczystość
  2. układ współrzędny obiektów rozpoczyna się w ich lewym dolnym rogu, a y rośnie "do dołu"
  3. klasy tworzymy powyżej części "def update"
  4. czcionki - zmiana czcionki tekstu jest możliwa tylko w obrębie czcionek które mamy zaimportowane (można stworzyć specjalny folder dedykowany czcionkom i z niego korzystać)
  5. warto korzystać z bibliotek, które są częściej aktualizowane (przypadek pygame-ce i pygame-me(aktualizowana rok temu))

💡Warto zapamiętać:

from ____folder____ import * <- pobiera całą zawartość pliku

📌 Program - napisy w różnym kolorze:

kod:

import pgzrun
from pygame import display
from pgzero import screen as pgzero_screen
from pgzero.builtins import keyboard
import random

# rozmiar okna - pozniej wrzucimy to do osobnego pliku
WIDTH = 800
HEIGHT = 600

screen = pgzero_screen.Screen(display.set_mode((WIDTH, HEIGHT), 0))

# pygame uruchamia pętlę gry automatycznie
# ... ale potrzebuje do tego odpowiednio nazwanych funkcji.
# Korzystamy z funkcji update i draw.
class MojTekst():
    def __init__(self, wsp_x:int, wsp_y:int, tekst: str, kolor: str = "red") -> None:
        self.x = wsp_x
        self.y = wsp_y
        self.tekst = tekst
        self.ruch_x = 3
        self.ruch_y = 3
        self.kolor = kolor 
    
    def narysuj_tekst(self):
        screen.draw.text(self.tekst, (self.x, self.y), fontsize = 50, color= "green")
    
    def przesun_tekst(self):
        self.x += self.ruch_x
        self.y += self.ruch_y

        if self.x > WIDTH or self.x < 0:
            self.ruch_x = self.ruch_x * -1
        if self.y > HEIGHT or self.y < 0:
            self.ruch_y = self.ruch_y * -1

hello = MojTekst(100, 300, "Hello!")

napisy = []
for _ in range(6):
    x = random.randrange(50,750)
    y = random.randrange(50,550)
    napis = "hello"
    napisy.append(MojTekst(x, y, napis))

def update():
    # tu aktualizujemy stan obiektow
    for napis in napisy:
        napis.przesun_tekst()

def draw():
    # tu je rysujemy

    screen.clear()
    screen.draw.circle((WIDTH/2, HEIGHT/2), 30, "white")
    for napis in napisy:
        napis.narysuj_tekst()

# wywołanie pętli gry
pgzrun.go()