Zakładam, że znasz już przynajmniej w stopniu podstawowym pythona, jeśli nie to polecam podręcznik „Zanurkuj w Pythonie„, inaczej może być Ci ciężko zrozumieć zamieszczony tu materiał. Celem kursu, jest napisanie gry izometrycznej, ale zanim zaczniemy musimy poznać podstawy. Dlatego przez pierwsze kilka lekcji, poznamy zasady tworzenia gier, czyli duszki, animacje, kolizje itd.
Python oferuje niesamowite możliwości, przy prostej, łatwej do nauczenia składni. Posiada wiele użytecznych bibliotek i frameworków. Do tworzenia gier jest co najmniej kilkanaście frameworków. Jeśli nie znasz żadnego, to nie ma problemu, poznasz szybko, przerabiając mój mały kurs.
Wszystkie przykłady będę pisał pod Pygame, z dwóch powodów. Raz, że jest najpopularniejsze, a dwa, bo tak mi jest wygodniej
. Przykłady testowałem pod Linuxem i pod Windowsem, jeśli coś nie będzie działać, proszę komentarz pod tym artykułem.
Co nam będzie potrzebne
Instalacja
Instalacja nie sprawi większych trudności. Jeśli jednak będzie potrzeba, to zrobię oddzielny wpis z opisem instalacji i konfiguracji na Linuxie i Windows.
Zakładam, że masz już wszystko zainstalowane i skonfigurowane, więc bierzemy łyk kawy i zaczynamy tworzyć naszą grę.
Zaczynamy
Tworzymy plik o nazwie game.py, a w nim umieszczamy następujący kod:
import pygame # importujemy biblioteki pygame
from pygame.locals import * # importujemy nazwy [QUIT, KEYDOWN,K_ESCAPE] itp.
from sys import exit # importujemy funkcje systemową exit
screen_size = (800,600) # ustalamy rozmiar ekranu
class IsoGame(object):
def __init__(self):
pygame.init() # incjalizujemy biblioteke pygame
flag = DOUBLEBUF # wlaczamy tryb podwojnego buforowania
self.surface = pygame.display.set_mode(screen_size,flag)
self.gamestate = 1 # 1 - run, 0 - exit
self.loop() # glowna petla gry
def game_exit(self):
""" funkcja przerywa dzialanie gry i wychodzi do systemu"""
exit()
def loop(self):
""" glowna petla gry """
while self.gamestate==1:
for event in pygame.event.get():
if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE):
self.gamestate=0
self.game_exit()
if __name__ == '__main__':
IsoGame()
Szczegółowo, zostało wszystko wyjaśnione w komentarzach. Ja tylko wyjaśnię ogólną budowę.
Utworzyliśmy klasę bazową naszej gry o nazwie IsoGame. W niej mamy 3 metody:
def __init__() – inicjuje bibliotekę i tworzy okno gry
def game_exit() – funkcja przerywa działanie programu
def loop() – główna pętla gry, tutaj będzie się działa cała akcja, na razie mamy tam tylko kod odpowiedzialny za obsługę zdarzeń (przycisku zamykającego okno i obsługę klawisza [ESC]
Linia 11 tworzy powierzchnie, na której będziemy umieszczać wszystkie elementy gry.
Po uruchomieniu programu poleceniem „python game.py”, ukaże nam się puste okno o wielkości 800x600px

Gdy już nacieszymy oko, naszym nowo powstałym okienkiem, bierzemy kolejny łyk kawy i zamykamy program, wciskając [ESC].
Wyświetlanie obrazka
Pustym okienkiem, nikt się długo nie będzie cieszył, warto coś w nim wyświetlić. Umieszczamy w tym samym katalogu, co nasz skrypt, obrazek w formacie PNG, na przykład ten…

Format PNG nie jest wybrany przypadkowo, dzięki temu, że posiadał tzw. kanał alfa, obrazek będzie bez tła.
Aby załadować obrazek do pamięci użyjemy, wbudowanej funkcji pygame:
obrazek = pygame.image.load('tree.png')
teraz umieszczamy go na utworzonej wcześniej powierzchni
self.surface.blit(obrazek, (x,y))
gdzie x – to pozycja w poziomie, y – pozycja w pionie na ekranie
i na koniec musimy wrzucić naszą powierzchnię (surface) z pamięci na ekran
pygame.display.flip()
W całości więc, będzie to wyglądać tak:
import pygame # importujemy biblioteki pygame
from pygame.locals import * # importujemy nazwy [QUIT, KEYDOWN,K_ESCAPE] itp.
from sys import exit # importujemy funkcje systemową exit
screen_size = (800,600) # ustalamy rozmiar ekranu
class IsoGame(object):
def __init__(self):
pygame.init() # incjalizujemy biblioteke pygame
flag = DOUBLEBUF # wlaczamy tryb podwojnego buforowania
# tworzymy bufor na grafikę
self.surface = pygame.display.set_mode(screen_size,flag)
# zmienna stanu gry
self.gamestate = 1 # 1 - run, 0 - exit
obrazek = pygame.image.load('tree.png') # ładujemy obrazek do pamieci
self.surface.blit(obrazek, (10,20)) # umieszczamy go w buforze (surface)
self.loop() # glowna petla gry
def game_exit(self):
""" funkcja przerywa dzialanie gry i wychodzi do systemu"""
exit()
def loop(self):
""" glowna petla gry """
while self.gamestate==1:
for event in pygame.event.get():
if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE):
self.gamestate=0
pygame.display.flip() # przenosimy bufor na ekran
self.game_exit()
if __name__ == '__main__':
IsoGame()
I możemy cieszyć się efektem końcowym.

Pobierz kod i grafikę z dzisiejszej lekcji isogame_tut1
To tyle na dziś, kawa wypita, jeśli nie to wystygła
. A następnym razem, opowiemy sobie o sprite’ach, czyli popularnych duszkach.
[...] poprzedniej części, nauczyliśmy się tworzyć okno, obsługiwać pętle zdarzeń i wyświetlać obrazki na ekranie. W [...]
idealny tutorial na początek
Witam. Mam problem z pygame. Jak próbuje otworzyć jakikolwiek przykład, to nie działa. Zamiast wyświetlać okno, każe mi zaznaczyć obszar, z którego tworzy obraz i zapisuje go do pliku (bez rozszerzenia
). Pracuje na Ubuntu (średnia dystrybucja do programowania, ale liczę, że da się ją skonfigurować). Proszę o pomoc.
W jaki sposób uruchmiasz przykłady? Powinno być „python nazwapliku.py”
Faktycznie pomogło… zawsze robiłęm metodą „chmod i ./”.
Traz wyskoczył bład ” File „p1.py”, line 10
SyntaxError: Non-ASCII character ‘\xc2′ in file p1.py on line 10, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
” Przeanalizuje kod i zobaczę czy dalej ruszę.
Swietny tutorial, tego mi brakowalo w polskim necie, oby tak dalej mistrzu!
mam problem z zainstalowaniem PyOpenGl, po pobraniu instaluje za pomocą- python setup.py install i robią mi się różne działania w terminalu a na końcu wyskakuję error error: could not create ‘/usr/local/lib/python2.7/dist-packages/OpenGL’: Permission denied
nie wiem co zrobić żeby nie było tego błędu
problem rozwiązany, użyłem „sudo” przed instalacją
Witam podczas próby uruchomienia tego pierwszego kodu gry wyskakuje mi taki oto błąd.
„Traceback (most recent call last):
File „C:\Python27\game.py”, line 1, in
import pygame # importujemy biblioteki pygame
File „C:\Python27\lib\site-packages\pygame\__init__.py”, line 95, in
from pygame.base import *
ImportError: DLL load failed: Nie można odnaleźć określonego modułu.”
Jakieś pomysły jak ten błąd naprawić ??
Problem już rozwiązany musiałem od nowa wgrać python 2.7 i biblioteki pygame