Python Tutorial
- jetzt Python programmieren lernen

Zeichnen mit PyGame

Mit PyGame können wir alle Formen zeichnen, die man so üblicherweise benötigt:

  • Rechtecke
  • Polygone
  • Kreise
  • Ellipsen
  • Linien

Für jede Art benötigen wir mehrere Angaben:

  • auf was soll gezeichnet werden (üblicherweise auf „screen“)
  • welche Farbe soll das Element haben
  • wo ist der Startpunkt (X und Y) und Breite und Höhe
  • Soll das Element ausgefüllt sein oder nur umrandet

Für ein Rechteck haben wir dann folgenden Befehlsaufbau:

pygame.draw.rect(screen, ROT, [10, 20, 100, 100], 1)

Wir erhalten ein rot umrandetes Rechteck

Rechteck mit Pygame zeichnen
Rechteck mit Pygame zeichnen

Wenn die Umrandung dicker sein soll, wird die letzte Zahl (hier die 1) einfach größer gewählt.

Wollen wir ein farbig ausgefülltes Rechteck, wird die letzte Zahl auf 0 gesetzt (weglassen hat den gleichen Effekt). Das mag im ersten Augenblick irritieren, funktioniert aber. Einfach einmal testen:

pygame.draw.rect(screen, ROT, [10, 20, 100, 100])

Linien zeichnen (auch mit Antialiasing)

Wollen wir eine Linie zeichnen, ist der Aufbau zum Rechteck ähnlich. Anstelle der Breite und Höhe wird der Endpunkt in Form eines Tupels angegeben. Auch hier kann die letzte Angabe mit der Stärke der Linie weggelassen werden, was aber weniger schön und offensichtlich ist. Fehlt die Angabe, wird die Linie 1 Pixel breit. Besser immer dazu machen.

pygame.draw.line(screen, ORANGE, [10, 20], [100, 120], 4)

In unserem Beispiel startet die Linie an dem Punk, der sich 10 Pixel von linken oberen Eck in X-Richtung und 20 Pixel in Y-Richtung befindet und läuft zu dem X-Punkt 100 und Y-Punkt 120

Linie mit Pygame zeichnen
Linie mit Pygame zeichnen

Wir sehen eine Linie mit „Treppeneffekt“ – diesen Effekt können wir durch Antialiasing beseitigen. Dafür gibt es in PyGame eine Anweisung (allerdings kann dann keine Strichstärke mitgegeben werden:

# normale Linie (orange)
pygame.draw.line(screen, ORANGE, [10, 20], [100, 120])

# Linie mit Antialiasing (rot)
pygame.draw.aaline(screen, ROT, [20, 20], [110, 120])

Und in der Vergrößerung sieht man deutlich den Effekt der „gebügelten“ Linie.

Linie mit Antialiasing gezeichnet
Linie mit Antialiasing gezeichnet

Ellipsen bzw. Kreise zeichnen

Wichtig zum Zeichnen von Kreisen bzw. Ellipsen ist die Vorstellung eines Vierecks. Denn die linkere obere Ecke ist die, die auch für die Ellipse angegeben werden muss.

Grundsätzlich ist der Befehl sehr einfach:


pygame.draw.ellipse(screen, ORANGE, [10,30,150,100], 1)

Das Ergebnis sieht dann wie folgt aus.

Ellipse mit Pygame zeichnen
Ellipse mit Pygame zeichnen

Zeichnen wir zusätzlich ein Viereck mit den selber Angaben, dann ist deutlich, wie Ellipsen/Kreise funktionieren.

pygame.draw.ellipse(screen, ORANGE, [10,30,150,100], 1)
pygame.draw.rect(screen, ROT, [10, 30, 150, 100], 1)
Ellipse mit Pygame zeichnen – zum Verständnis das Quadrat
Ellipse mit Pygame zeichnen – zum Verständnis das Quadrat

Möchte man einen Kreis erhalten, dann muss die dritte und vierte Angabe, sprich die Breite und die Höhe die gleiche Abmessung haben.

pygame.draw.ellipse(screen, ORANGE, [10,30,150,150], 1)

Und somit erhalten wir einen Kreis.

Kreis mit Pygame zeichnen
Kreis mit Pygame zeichnen

Kreisausschnitt zeichnen

Um einen Kreisausschnitt zu zeichnen, benötigen wir weitere Angaben als beim Kreis. Allerdings sind die ersten Angaben identisch:

  • worauf zeichnen (screen)
  • welche Farbe
  • In welchem Bereich (wie beim Kreis)
  • wo startet der Kreisausschnitt? Bei der Uhr auf 3 Uhr (einfach einmal probieren)
  • den Kreisausschnitt wird angebenen über PI, wobei PI einen Halbkreis ergibt
  • zum Schluss die Stärke des Strichs
pygame.draw.arc(screen, SCHWARZ, [10,10,200,200], 0,   math.pi/2, 1)

Und nun mehrere Kreisausschnitte in verschiedenen Farben:

pygame.draw.arc(screen, SCHWARZ, [10,10,200,200], 0, math.pi, 1)
pygame.draw.arc(screen, ROT, [10,10,200,200], math.pi, 3*math.pi/2, 1)
Kreissegmente mit Pygame zeichnen
Kreissegmente mit Pygame zeichnen

Polygone zeichnen

Bei einem Polygon können beliebig viele Punkte angeben werden und somit ein beliebig komplexes Gebildet erstellt werden.

In unserem Beispiel erstellen wir ein Dreieck.

pygame.draw.polygon(screen, ROT, [[50,50], [50,200], [200,200]], 2)

Wenn wir uns den Aufbau der Koordinaten genau ansehen, sehen wir eine Liste in der weiteren Liste geschachtelt sind.

Dreieck mit Pygame zeichnen
Dreieck mit Pygame zeichnen

Text auf Bildschirm bringen

Für die Ausgabe von Text benötigen wir 3 Angaben:

  • Festlegung der Schrift (Schriftart, Farbe, Größe)
  • Den Textinhalt
  • Dieser wird dann auf den Bildschirm an einer bestimmten Position gebracht

Schauen wir uns die 3 Schritte in Form von Python-Code an, dann wird die Vorgehensweise schnell klar:

    schrift = pygame.font.SysFont('Arial', 35, True, False)
    text = schrift.render("Textinhalt", True, ROT)
    screen.blit(text, [250, 250])

Wir erzeugen ein Schrift Objekt mit einer festgelegten Schriftart und Schriftgröße. Möchte man einfach die Systemschrift nutzen, kann hier die Angabe „None“ erfolgen:

schrift = pygame.font.SysFont('Arial', 35, True, False)

Die Angaben der Reihenfolge nach:

  • Schriftart
  • Schriftgröße
  • ob fett (bold)
  • on kursiv (italics)
text = schrift.render("Textinhalt", True, ROT)

Die Angaben der Reihenfolge nach:

  • Textinhalt selber
  • on Anti-Aliasing angewendet werden soll
  • Farbe des Textes
screen.blit(text, [250, 250])