JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Markus Blumenstock
Sommersemester 2024

Angewandte Mathematik am Rechner

Übungsblatt 1: GUIs und interaktive Grafik in PyQt5
Letzte Änderung : 15:50 Uhr, 18 April 2024
Abnahmetermin : 2. Mai 2024





Aufgabe 1: „Snake“ mit Python und QT

In dieser Aufgabe wollen wir das GUI Toolkit Qt kennenlernen. Wir schauen uns hier an, wie wir interaktive Benutzerschnittstellen bauen können (immer gut, dies zu beherrschen — wir können dann später interaktive Experimente bauen). Außerdem, und noch wichtiger, sehen wir, wie wir einfache 2D Pixelbilder erzeugen und ausgeben können. Dies werden wir im weiteren immer wieder benutzen (im zweiten Teil auch mit „Vektorgraphik“ mehr dazu zu gegebener Zeit).
Als Aufgabe haben wir uns folgendes vorgenommen: Wir möchten das bekannte Spiel Snake (auch bekannt als Nibbles) nachimplementieren.

Natürlich lassen wir uns nicht lumpen und bauen, neben der dramatischen Echtzeitgraphik, noch ein ordentliches Konfigurationsmenü zum Spielstart ein.


Spielbeschreibung:
Mithilfe der Pfeiltasten steuern Sie eine Schlange über den Bildschirm. Dabei bewegt sich die Schlange in die Richtung, die zuletzt durch die Pfeiltasten angegeben wurde. Ziel des Spieles ist es, zufällig erscheinende Früchte (dargestellt durch andersfarbige Punkte) auf dem Bildschirm zu fressen (indem die Schlange über/durch die Punkte bewegt wird). Was das Spiel schwerer macht, ist die Tatsache, dass nicht nur die Schlange mit jedem geschluckten Imbiss um eine Längeneinheit wächst und die Spielgeschwindigkeit mit der Länge der Schlange erhöht wird, sondern auch, dass die Schlange sich selbst nicht beißen darf!
Varianten: die Schlange darf über den Rand hinaus und erscheint am gegenüberliegenden Ende des Spielfeldes, oder: sie darf den Spielfeldrand nicht berühren.

Aufgabe 1.1: Snake! (Arbeiten mit QImage/QPixmap)

[60 Punkte]


Im Folgenden implementieren wir das Spiel „Snake“ mithilfe von PyQt5. Als erstes programmieren wir das Spiel selbst. Hierfür brauchen wir einen minimalen Rahmen in QT.
Tipp: Für Anfänger, die noch nie ein GUI programmiert haben, ist es vielleicht einfacher, mit Aufgabe 1.2 anzufangen und danach das eigentliche Spiel hinzuzufügen.

Es gibt auch eine ganze Reihe alternativer Lösungen1

Aufgabe 1.2: Das Konfigurationsmenü (Widget Tutorial)

[30 Punkte]


Nun fügen wir ein Menü hinzu, mit dem wir das Spiel konfigurieren und starten können. Falls Sie wenig Erfahrungen mit GUI Bibliotheken haben, mag es hilfreich sein, mit diesem Aufgabenteil anzufangen.


Tipp: Diese Internetseite bietet eine sehr schöne Übersicht häufig verwendeter Widgets mit Beispielcode, wie z.B. für die QSpinBox Widgets (für Eingabe von Zahlen), die in unserer Musterlösung oben für den Zoom Faktor benutzt wurde, QTab (Tab-Seiten), QList, QScrollBar, und viele mehr.

Aufgabe 1.3: Menüerweiterungen (mehr zu Qt Widgets)

[10 Punkte]

Optionale Aufgaben: Menüerweiterungen (mehr zu Qt Widgets)

[keine Punkte, die Figuren visualisieren den Schwierigkeitsgrad]

Tipps zum Programmieren des Spiels




[1] Eine andere Möglichkeit ist z.B. einen eigenen Nachfahren von QWidget zu definieren, und diesen mit einem QPainter direkt bemalen zu lassen. Auch QPixmap lassen sich direkt mit einem QPainter bemalen (statt Pixel im QImage zu setzen). Je nach Art der Visualisierung ist der Unterschied zuerst einmal nur gering — in beiden Fällen können Sie die Pixel des Bildes manipulieren. Nun können Sie die Schlange zum Beispiel auch durch ein Polygon oder aneinanderliegende Rechtecke realisieren und so Ihrer Kreativität freien Lauf lassen. Für diese Aufgabe bedeutet dieser Ansatz jedoch mehr Arbeit.