5tes Aufgabenblatt
Es geht hier um das Spiel Boulder-Dash. Allerdings nicht um das Original, sondern um ein Remake mit sog. ASCII-Grafik. Dieses Spiel soll ausprobiert, analysiert und erweitert werden.
Präliminärien:
Laden Sie den Source-Code von ASCII-Gfx mit folgender Check-Out-Line herunter:
Lesen Sie das README!
Probieren Sie das enthaltene Beispiel aus:
Schauen Sie Sich die enthaltene Dokumentation an:
Programmieraufgabe P1:
Zeichnen Sie mit ASCII-Gfx ein Osterei. Verändern Sie dazu den Quellcode von ascii-gfx/main.cpp. D.h. programmieren Sie eine Schleife, welche zum Zeichnen der Zeilen des Ostereis entsprechende move() und addch() Befehle beinhaltet. Beispiel für 9 Zeilen:
***** ******* ********* ********* ********* ********* ********* ******* *****
Tipp: Wenn die Höhe des gesamten Ostereis z Zeilen beträgt und man sich in Zeile i befindet, dann ist die Breite b des Eies in dieser Zeile $b=\sqrt{z^2-h^2}$ mit $h=2\cdot i-z + 1$. Der Anfang einer Zeile des Ostereis hat dann die Position (i, c) mit $c=(z - b)/2 + 0.5$.
Hinweis: In math.h ist fĂĽr die Wurzelberechnung die Funktion sqrt() vorhanden. Auf der Kommandozeile ist zusätzlich mit “-lm” zu linken (Mathebibliothek) - bei CMake geschieht dies automatisch.
Nebenbemerkung: Man kann diese Aufgabe auch mit QtCreator bearbeiten, in den Einstellungen des Projekts muss aber unter dem Reiter Run zusätzlich die Option “Run in Terminal” ausgewählt sein.
Programmieraufgabe P2:
Zeichnen Sie ein Osterei der Höhe 24 und machen Sie einen Screenshot, der das Ergebnis mit dem dazugehörigen Code zeigt.
Optionale Programmieraufgabe P3:
Zeichnen Sie ein Osterei in der Mitte des Bildschirms.
Programmieraufgabe P4:
Übersetzen Sie das NCurses-Spiel „ASCII-Dash“ (Boulder Dash Remake) und probieren Sie es aus. Der Source-Code wird mit folgender Check-Out-Line heruntergeladen:
Wie ĂĽblich ĂĽbersetzen und starten wir das Programm mit cmake . usw.
Wandeln Sie das Spiel nun leicht ab, indem Sie die Spielelogik programmatisch verändern. Führen Sie dazu das neue Spielelement „Exploding Dirt“ ein, welches wie normaler „Dirt“ ausschaut, aber bei Berührung mit den beiden Gegner-Monstern explodiert - und zwar wiederum zu „Butterflies“. Dazu benötigen wir die folgenden Veränderungen an drei verschiedenen Stellen bzw. Modulen des Spiels:
In file dash_font.cpp in function init_dash_font: set_grid_char_text('\t', ...); // add grid character '\t' for exploding dirt In file dash_game.cpp in function create_game_level: set_grid_text(19, 17, "\t"); // add exploding dirt to menu level In file dash_physics.cpp in function move_around: if (c1 == '\t' || c2 == ...) // touched exploding dirt { explode(...); // explode to butterflies return; }
Nun kann man im MenĂĽ-Level einen Gang von den Monstern zum Exploding Dirt graben, so dass ein Monster dem Gang folgen kann und schlieĂźlich explodiert. Machen Sie von dieser Situation einen Screenshot.
Checkliste
- Haben Sie konsistent eingerĂĽckt?
- Haben Sie globale Variablen verwendet?
- Wie macht man aus dem Ei einen runden Kreis?
- Aus welchem Jahr ist das Originalspiel?
- Haben Sie es schon mal gespielt?
- Was ist ihr Hiscore bei ASCII-Dash?
- Haben Sie dabei gecheatet?
- Könnten Sie prinzipiell cheaten?
- Welche Code-Zeilen könnte man dazu ändern?
- Gibt es ein Easter Egg?
- Wieviele Diamanten kann man maximal im MenĂĽ sammeln? Tipp: Zuerst den linken Stein verwandeln, dann die linke Tomate auf den Butterfly fallen lassen und dann den rechten Stein verwandeln.
- Was ist die maximale Anzahl von Diamanten, die Sie im MenĂĽ sammeln konnten?