RkBlog

Hardware, programming and astronomy tutorials and reviews.

Podstawy PyGame

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())
W tym samym katalogu umieszczamy niewielki plik graficzny. W tym przypadku - foto.png. Powy偶sza modyfikacja dodaje plik graficzny do ekranu (t艂a). Efekt:
pygame1


Modu艂y pyGame

cdrom - zarz膮dza CD-ROOMami i odtwarzaniem audio
cursors - 艂aduje grafiki kursora
display - kontroluje ekran lub okno aplikacji
draw - rysuje proste kszta艂ty
event - zarz膮dza zdarzeniami (events) i kolejk膮 zdarze艅
font - zarz膮dza czcionkami TrueType
image - zapisuje/艂aduje grafiki
joystick - obs艂uga joisticka
key - obs艂uga klawiatury
mouse - obs艂uga myszy
movie - odtwarzanie mpeg
sndarray - manipulowanie d藕wi臋kiem za pomoc膮 Numeric
surfarray - manipulowanie grafikami za pomoc膮 Numeric
time - obs艂uga czasu
transform - obr贸bka grafiki

Przyk艂adowa Gra

Jeden ze zwyci臋zc贸w pyWeek - stworzenie gry w jeden tydzie艅 - to gra o tytule "Trip on the Funny Boat", do pobrania ze strony pyweek (funnyboat-1.1.tar.gz lub nowsze) Po rozpakowaniu uruchamiamy poleceniem:
python main.py
pygame2
Gra polega na unikaniu rekin贸w i innych wrog贸w. Mo偶emy strzela膰 do nich (spacja) oraz skaka膰 :)
RkBlog

Tworzenie gier w Pythonie, 14 July 2008, Piotr Mali艅ski

Comment article