Biblioteka PyGame
Mariusz696
Do czego służy biblioteka PyGame?
Biblioteka PyGame służy przede wszystkim do programowania gier. Ze względu na duże wsparcie ze strony twórców oraz innych użytkowników jest bardzo łatwa do nauki i pozwala na stworzenie gier o umiarkowanie wysokiej funkcjonalności i szybkości.
Plusy biblioteki
- wysokie wsparcie ze strony twórców i innych użytkowników,
- łatwość kodowania (jest to cecha samego języka),
- prostota samej biblioteki (funkcje nie są zbytnio skomplikowane, a pozwalają na tworzenie wielu ciekawych projektów),
- ciągle rozwijana!
Minusy biblioteki
- niska wydajność, jednakże umiejętny programista potrafi zdziałać cuda
Python, pyGame i gry
Python był i jest stosowany w różnych grach i aplikacjach. Przykładowo silnik gry Świątynia Pierwotnego Zła oskryptowany był w pythonie - kod pythona sterował całą grą. pyGame to biblioteka przeznaczona do tworzenia przenośnych gier napisanych w całości w pythonie. Bazuje na wydajnych bibliotekach SDL. Proste gry w pyGame (pisane w tydzień) można znaleźć na pyweek.org
Z wikipedii:
Pygame to stworzona przez Pete Shinnersa biblioteka graficzna przeznaczona do tworzenia gier komputerowych oraz aplikacji multimedialnych w języku Python. Do działania wymaga biblioteki SDL, przy wykorzystaniu której dostarcza modułów pozwalających na wyświetlanie grafiki, odtwarzanie dźwięków, śledzenie czasu, obsługę myszy i joysticka, obsługę CD, czy renderowanie czcionek TTF. Pygame jako nakładka na SDL jest wieloplatformowa i umożliwia pracę na różnych systemach operacyjnych m.in. na Windows, Linux, MacOS. Biblioteka Pygame stanowi wolne oprogramowanie i jest dystrybuowana na zasadach licencji LGPL.
Instalacja pyGame
W przypadku systemów linuks/unix pygame powinno być w repozytorium twojego systemu, a jeżeli nie ma to pobieramy pakiet ze strony projektu. W przypadku MS Windows pobieramy instalator (exe). pyGame możemy pobrać z tej strony.
Czy wszystko działa ?
Otwórz plik pythona o kodzie:
import pygame, sys,os
from pygame.locals import *
pygame.init()
Wykonanie go nie powinno wygenerować żadnych błędów, a jeżeli jakieś się pojawią to trzeba je usunąć.
Podstawy
W testowym kodzie powyżej zaimportowaliśmy pygame i kilka innych modułów. Ostatni wiersz zawiera:
pygame.init()
Metoda init ładuje moduły pyGame odpowiedzialne m.in. za dźwięk czy grafikę i jest podstawą każdej aplikacji korzystającej z tej biblioteki. Opis tej podobnych metod znajdziemy tutaj.
Teraz rozbudujemy kod do postaci:
import pygame, sys,os
from pygame.locals import *
pygame.init()
# utworzenie okna
window = pygame.display.set_mode((468, 60))
def input(events):
for event in events:
if event.type == QUIT:
sys.exit(0)
else:
print event
# działaj aż do przerwania
while True:
input(pygame.event.get())
Powyższy kod utworzy puste czarne okno. W konsoli powinniśmy widzieć komunikaty o zdarzeniach takich jak ruch myszy czy wciśnięcie klawisza.
pygame.display.set_mode:
window = pygame.display.set_mode((długość, wysokość))
Ustawia rozmiar okna. Kolejny element to funkcja input reagująca na zdarzenia wysyłane między aplikacją pyGame a "odbiorcą". Jej cel w tym przykładzie to zakończenie aplikacji w przypadku otrzymania odpowiedniego sygnału i wyświetlenie komunikatu o zdarzeniu w przypadku pozostałych. Naszą aplikację kończy:
while True:
input(pygame.event.get())
Jest to nieskończona pętla "podtrzymująca" działanie aplikacji. Dzięki niemu aplikacja pyGame będzie działała aż do wysłania sygnału zamykającego aplikację. Powyższy kod to szkielet każdej aplikacji pyGame.
Dodajemy grafikę
Rozbudowujemy nasz kod do postacji:
import pygame, sys,os
from pygame.locals import *
pygame.init()
window = pygame.display.set_mode((550, 400))
# ustawiamy etykietę
pygame.display.set_caption('Gra w pyGame')
# ładujemy plik graficzny
moja_grafika = pygame.image.load('foto.png')
# pobieramy informacje o ekranie - tle
screen = pygame.display.get_surface()
# przypisanie grafiki do określonego miejsca ekranu
screen.blit(moja_grafika, (0,0))
pygame.display.flip()
def input(events):
for event in events:
if event.type == QUIT:
sys.exit(0)
else:
print event
while True:
input(pygame.event.get())