Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dbGAMES

Treue Seele

  • »dbGAMES« ist der Autor dieses Themas

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

1

10.11.2007, 17:18

Pygame (Teil 1, der Einstieg)

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.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dbGAMES« (02.11.2013, 08:20)


Anonymous

unregistriert

2

03.12.2007, 10:38

Was macht Teil 2 ?

dbGAMES

Treue Seele

  • »dbGAMES« ist der Autor dieses Themas

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

3

03.12.2007, 12:11

teil 2 ist in arbeit, hat aber keine besonders hohe priorität ;)
großes hauptthema ist laden, anzeigen und verändern von grafiken, sowie tastatur und mausabfragen und dazu dann ein sehr kleines spiel in dem man alles zusammenbringt.
am wochenende könnte vielleicht was kommen...

Anonymous

unregistriert

4

04.12.2007, 15:22

Die offizielle Seite ist übrigens org und nicht de(2.3 Wo gibts das? ). De ist nur eine Werbeseite für ein Buch so wie ich das sehe.

Ausserdem würde ich bei allen Links nicht immer mit . und , am Ende rumspielen, das mögen diverse Browser nicht. Bei deinem dbgames Link habe ich das Komma schon verschoben. ;)

cu

dbGAMES

Treue Seele

  • »dbGAMES« ist der Autor dieses Themas

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

5

06.12.2007, 09:54

danke für den hinweis, habe die links überarbeitet, sollte jetzt alles funktionieren.
natürlich ist die pygame seite pygame.org, das .de war wohl ein reflex ;)

Werbeanzeige