This is an old revision of the document!
Eventuelle Nachträge
- (2aLIM): Simulation des Ziegenproblems
Pygame: a ball game and snake
Pygame ist eine Python-Library zur Spiele-Programmierung.
Ziele dieses Abschnitts:
- einen groben Eindruck bekommen, wie ein Snake-Programm in Python funktioniert.
Selbst solch ein Programm zu schreiben ist deutlich schwieriger und braucht vor allem viel Übung im Programmieren.
Aufgabe: A ball game - grobes Verstehen (und Korrigieren) eines Python-Programms
Hist ist ein Link zu einem in pygame
programmierten Spiel (bitte nur kurz ausprobieren).
Der Spieler (grünes Quadrat) gewinnt ein Leben, wenn er den purpurfarbenen Ball fängt, und verliert zwei Leben, wenn der Ball an der rechten Seite des Spielfeldrandes reflektiert wird. Man startet am Anfang mit 10 Leben, gewinnt bei 20 Leben und verliert bei 0 Leben.
Das grüne Quadrat wird mit den Pfeiltasten gesteuert, jedoch hat der Programmierer dies nicht wie erwünscht hinbekommen. Auch bewegt sich der Ball nicht wie beabsichtigt.
Die gewünschte Steuerung mit den Pfeiltasten ist wie folgt.
- Jedes Drücken einer Pfeiltaste bewegt das Quadrat um ein Feld in die entsprechende Richtung, mit folgenden Ausnahmen:
- Das Quadrat kann das Spielfeld rechts und links nicht verlassen und stösst dort an die Ränder an.
- Wenn es das Spielfeld oben verlässt, kommt es sofort an derselben x-Koordinate unten in das Spielfeld und umgekehrt.
Erwünschte Bewegung des Balls:
- An allen Seiten des Spielfelds ausser der linken soll der Ball normal reflektiert werden.
- An der linken Seite soll das bereits programmierte zufällige Verhalten bestehen bleiben.
Beachte: Für die folgenden Aufgaben musst du nur einen geringen Teil des Programms verstehen! Was du wissen musst, ist jeweils in den Hinweisen erläutert.
Teilaufgabe 1
Hilf dem Programmierer, die gewünschte Steuerung mit den Pfeiltasten zu erreichen (dabei sollst du den Ball vollständig ignorieren, es geht nur um das grüne Quadrat).
- (1) Kümmere dich darum, dass jede der vier Pfeiltasten das Quadrat um genau ein Feld in die gewünschte Richtung bewegt.
- (2) Kümmere dich darum, dass das Quadrat nicht aus dem Spielfeld verschwindet, sondern das oben beschriebene Verhalten zeigt.
Dafür musst du nur etwa 20 Zeilen ab Zeile 176 ändern, das gesamte restliche Programm bleibt unverändert (vgl. Kommentar in Zeile 173).
Teilaufgabe 2
Hilf dem Programmierer, das gewünschte Reflexionsverhalten des Balles zu erreichen.
Dafür musst du nur etwa 10 Zeilen ab Zeile 220 anpassen, das gesamte restliche Programm bleibt unverändert (vgl. Kommentar in Zeile 217 - Zeilenangaben beziehen sich auf das “Originalprogramm”).
Teilaufgabe 3
Schau dir zuerst die “game loop” (Zeilen 140 bis 236) und dann das Hauptprogamm (beginnend in Zeile 120) an und versuche, möglichst viel zu verstehen. Wer will, kann sich natürlich auch den Rest des Programms anschauen.
Teilaufgabe 4
Viel Spass beim Spielen! Mit der nun einfacheren Bedienung hat man bessere Gewinnchancen! - Aber bitte nicht zu lange spielen.
Bonusaufgaben
(teilweise vielleicht auch eine gute Idee, diese in Zukunft einzubauen)
- Steuere eine zweite farbige Box mit den Tasten
a
,s
,d
,w
. Was passiert bei einer Kollision der beiden Spieler? - Ändere die Steuerung (vermutlich nicht so leicht; braucht u.a.
KEYUP
als mögliches key event):- Wenn man auf einer Pfeiltaste bleibt, bewegt sich das grüne Quadrat immer weiter in die entsprechende Richtung.
- Das Quadrat bewegt sich kontinuierlich (ähnlich wie der Ball). Das Drücken einer Pfeiltaste ändert die Richtung. (Diese Art der Steuerung werden wir bei Snake verwenden.)
Aufgabe: Listen in Python
Um Snake zu programmieren, kommt man kaum um Listen herum, denn die Positionen, an denen sich die “Körperglieder” der Schlange befinden, speichert man sinnvollerweise in einer solchen Liste.
Aufgabe: Beginne, den Abschnitt Listen des Programmierkurses über Listen zu lesen. Wer bis zur Modifikation von Listen kommt, weiss mehr, als wir für Snake brauchen werden!
Ausserdem sollte man verstehen, warum eine Liste die naheliegende Datenstruktur für Snake ist (verbale Erklärung mit Snake-Beispielprogramm, anhalten mit Leertaste, Liste wird unten angezeigt).
Aufgabe: Ein Snake-Programm in Grundzügen verstehen
Hist ist ein Link zu einem in pygame
programmierten snake-ähnlichen Spiel (bitte nur kurz ausprobieren).
Korrigiere dieses Programm, so dass es dem üblichen Snake ähnelt:
- Statt mit den Tasten
r
,t
,f
,g
soll die Steuerung wie gewohnt mit den Pfeiltasten funktionieren. - Wenn die Schlange einen Apfel frisst, soll die unter dem Spielfeld angezeigte Variable
gefressene_aepfel
um eins erhöht werden. - Pro gefressenem Apfel soll die Länge der Schlange um eins wachsen.
- Wenn die Schlange gegen eine der vier Wände des Spielfelds läuft, endet das Spiel.
Hinweis: Es sind nur wenige Änderungen innnerhalb der “game loop” (ab Zeile 171) nötig.
Bonusaufgaben
Überlege dir, wie man das Spiel weiterentwickeln könnte.
... wenn du eigene Bilder oder Sounds integrieren willst
Vorbereitet ist das Programm so, dass du
- Bilder für den Hintergrund oder
- Bilder für den Apfel und den Schlangenkopf oder
- Sounds für Spielende und Apfelfressen
leicht einbinden kannst (du kannst beispielsweise nur ein Hintergrundbild einbinden).
Dazu musst du geeignete Dateien bereitstellen (am besten in demselben Verzeichnis wie das Programm) und
- in der Funktion
lade_bilder_und_sound
die entsprechenden Dateinamen (eventuell inklusive Pfad) angeben und - die booleschen Konstanten
EINFARBIGER_HINTERGRUND
(Hintergrund),BOXEN_STATT_BILDER
(Apfel und Schlangenkopf) undMIT_SOUND
(Spielende und Apfelfressen) entsprechend anpassen, d.h. aufFalse
bzw.False
bzw.True
setzen.