Achtung: Eine überarbeitete Version des Pygame Tutorials findet ihr im Wiki: https://www.spieleprogrammierer.de/wiki/Pygame-Tutorial
Pygame Tutorial
Teil 1 - Der Einstieg
Version v0.0.2
1. Inhalt
1. Inhalt
2. Einleitung
2.1 Warum schreibe ich das?
2.2 Was ist Pygame?
2.3 Wo gibts das?
3. Versions-History
3.1 v0.0.1
3.2 v0.0.2
3.3 v0.0.3
4. Pygame einrichten
4.1 Die Entwicklungsumgebung
4.2 Pygame integrieren
4.3 Testen
5. Ein paar Grundlagen
5.1 Das erste Beispiel
5.2 Pygame initialisieren
5.3 Die Nachrichtenschleife
6. Aublick auf Part 2
2. Einleitung
2.1 Warum schreibe ich das?
Bei einem neuen Tutorial stellt sich natürlich immer die Frage, warum es geschrieben wurde. Die Antwort in diesem Fall ist aber ziemlich einfach: Ich habe bisher kein deutsches Pygame Tutorial gefunden. Natürlich, es gibt ein Paar auf Englisch und es gibt die gute Dokumentation, aber viele hält das möglicherweise ab. Außerdem sind mehr Tutorials immer besser
2.2 Was ist Pygame?
Pygame ist eine Sammlung von Python Modulen, die es einem ermöglichen, relativ einfach und schnell Spiele zu programmieren. Die Module basieren auf der SDL (Simple DirectMedia Layer) Bbliothek.
Pygame ist kostenlos zu haben und läuft auf jedem Betriebssystem für das es einen Python-Interpreter gibt, wenn man Platformunabhängig programmiert, was in Python aber nich schwer ist.
2.3 Wo gibts das?
Die offizielle Pygame Seite findet sich unter
http://www.pygame.org/ . Dort gibt es auch die neuste Version, die Doku, Tutorials und vieles mehr. Unter
http://www.python.org/ gibts die Python Interpreter, und alle die Python noch nicht können finden dort alles um es zu lernen. Der Vollständigkeithalber hier noch die SDL Addresse:
http://www.libsdl.org/ .
3. Versions-History
3.1 v0.0.1
Erste Version, Großteil des Textes geschrieben.
3.2 v0.0.2
Diverse, kleine Änderungen
3.3 v0.0.3
Korrektur der URLs, Danke Abrexxes
4. Pygame einrichten
4.1 Die Entwicklungsumgebung (IDE)
Man kann Python Programme ganz einfach mit einem simplen Text-Editor (wie Notepad unter Windows) schreiben, viele spezielle Editoren bieten aber einiges mehr was einem beim Programmieren hilft, wie etwa Syntax-Highlighting, Code-Vervollständigng und vieles mehr. Ich verwende Eclipse dafür mit dem Pydev Plugin. Eclipse gibt es hier:
http://www.eclipse.org/ und das Python Plugin hier:
http://pydev.sourceforge.net/ . Das Installieren gestaltet sich ziemlich einfach, einfach den entpackten eclipse-Ordner von Pydev in den Eclipse Ordner kopieren. Danach muss unter Window > Preferences > Pydev > Interpreter - Python noch die exe Datei des Python Interpreters angegeben werden, danach können wir in die Pydev Perspective schalten und loslegen.
4.2 Pygame integrieren
Läuft am einfachsten über einen Installer ab, der installiert alle benötigten Dateien (Python Module, SDL DLLs usw) in den Unterordner site-packages der Python Installation, Eclipse sollte das automatisch erkennen.
4.3 Testen
Ein einfaches Skript zum Testen der Installation:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# -*- coding: UTF-8 -*-
# Import modules
import pygame
from pygame.locals import *
# Function main, entry point
def main():
# Initializing pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Pygame Tutorial - listing 4.3")
pygame.mouse.set_visible(1)
pygame.key.set_repeat(1, 30)
# Initaialize clock
clock = pygame.time.Clock()
# Starting event loop...
running = 1
while running:
# Limit framerate
clock.tick(30)
# Clear screen...
screen.fill((0, 0, 0))
# Get all events
for event in pygame.event.get():
# Close application?
if event.type == QUIT:
running = 0
# Handle keys
if event.type == KEYDOWN:
# Escape: Quit
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# Show screen
pygame.display.flip()
# Check, if this is the main file
if __name__ == '__main__':
main()
|
Wer jetzt keine Ahnung von Python hat sollte sich erstmal ein Tutorial zu Gemüte führen, allen anderen wird der größte Teil keine Probleme bereiten. Starten können wir mit Run > Run > Python Run > Ok, Beenden über ESC oder das X. Es sollte ein Fenster mit schwarzem Hintergrund zu sehen sein, nicht mehr aber auch nicht weniger.
5. Ein paar Grundlagen
Schauen wir uns das erste Beispiel mal etwas genauer an...
5.1 Das erste Beispiel
Zuerst importieren wir die benötigten Pygame Module. Wenig Aufregendes, über
|
Quellcode
|
1
2
|
import pygame
from pygame.locals import *
|
holen wir alles was wir fürs Programmieren mit Pygame benötigen. zusätzlich können wir noch Testen, ob die Module für die Sound- und die Font-Bibliothek korrekt geladen wurden:
|
Quellcode
|
1
2
|
if not pygame.font: print 'Fehler! pygame.font'
if not pygame.mixer: print 'Fehler! pygame.mixer'
|
Zusätzlich dazu wird jeder die Module inportieren müssen die er benötigt
5.2 Pygame initialisieren
Als nächstes initialisieren wir Pygame und erstellen eine Surface die wir als Bildschirm verwende, mit einer festen Auflösung von 800x600 Pixeln.
|
Quellcode
|
1
2
|
pygame.init()
screen = pygame.display.set_mode((800, 600))
|
Der set_mode Funktion können wir noch zusätzliche Parameter übergeben, aber ohne sie sucht SDL die für den PC Besten Einstellungen heraus, was in den meisten Fällen der bessere Weg ist. Wer ein Bestimmtes Format benötigt schaut hier nach:
http://www.pygame.org/docs/ref/display.h…isplay.set_mode .
Das Festlegen des Fenstertitels und das Anzeigen der Maus ist selbserklärend. Als Letztes schalten wir noch die Tasten-Wiederholung ein. Dadurch weisen wir Pygame an, trotzdem eine Taste-gedrückt-Nachricht zu senden, obwohl die Taste noch nicht losgelassen wurde.
|
Quellcode
|
1
2
3
|
pygame.display.set_caption("Pygame Tutorial - listing 4.3")
pygame.mouse.set_visible(1)
pygame.key.set_repeat(1, 30)
|
5.3 Die Nachrichtenschleife
Damit ist Pygame grundlegend initialisiert. Jetzt müssen wir nur noch dafür sorgen, dass das Fenster auch länger als ein Frame angezeigt wird. Dafür verwenden wir, logischerweise eine Nachrichtenschleife. Um Probleme mit der Geschwindigkeit der verschiedenen PCs zu vermeiden, legen wir fest, dass wir maximal 30 Frames pro Sekunde haben wollen:
|
Quellcode
|
1
2
3
4
5
|
clock = pygame.time.Clock()
running = 1
while running:
clock.tick(30)
screen.fill((0, 0, 0))
|
Zuerst erstellen wir ein time.Cock-Objekt welches sich um die Frame Begrenzung kümmern soll. Um die Schleife bequem wieder verlassen zu können, verwenden wir die running Variable. Solange sie 1
ist bleiben wir in der Schleife. In der Schleife lassen wir das time.Clock-Objekt erstmal berechnen wie lange wir warten müssen um maximal 30 Frames zu erhalten. Danach überschreiben wir den gesamten Bildschirm mit der Farbe Schwarz.
|
Quellcode
|
1
2
3
|
for event in pygame.event.get():
if event.type == QUIT:
running = 0
|
Hier haben wir die erste Abbruchsbedingung. Wir holen uns per pygame.event.get() sämtliche Events die Pygame empfangen / generiert hat. Finden wir eines vom Typ QUIT setzten wir die running Variable auf 0, sodass wir die Schleife verlassen können.
Als nächstes Interessiert uns, welche Tasten der User gedrückt hat, diese werden durch den Typ KEYDOWN abgefangen.
|
Quellcode
|
1
2
3
|
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
|
Wir testen hier nur auf die Escape-Taste. Wurde sie gedrückt, posten wir ein Event vom Typ QUIT, was dafür sorgt, das wir die Schleife verlassen (wir erinnern uns: auf dieses Event reagieren wir ja etwas weiter oben).
Nachdem wir alle Events durchgesehen habe, können wir endlich den Bildschirm anzeigen:
|
Quellcode
|
1
|
pygame.display.flip()
|
Intern arbeitet Pygame mit einem Buffer für den Bildschrim, der erst mit diesem Befehl angezeigt wird. Würde man direkt auf den Bildschirm rendern würde man den Bildaufbau sehen können.
Damit sind wir auch fast schon am Ende des Beispiels. Das vorige Besprochene haben wir in eine Funktion main gesteckt, die wir jetzt einfach aufrufen, falls diese Datei nicht als Modul importiert wird.
|
Quellcode
|
1
2
|
if __name__ == '__main__':
main()
|
6. Ausblick auf Teil 2
Hier in dem Tutorial gabs nur die allerersten Grundlagen zum Theme Pygame zu sehen. Im Teil 2 werde ich genauer auf alle Verwendeten Module innerhalb von Pygame eingehen, soweit dass am Ende ein kleines Spiel entstehen kann.