-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArchitektur.txt
59 lines (41 loc) · 3.7 KB
/
Architektur.txt
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
main.cpp:
Erstellt das Fenster und zeigt es an.
pacman.h/pacman.cpp:
Die Klasse PacmanWindow erbt von der bereitgestellten ConsoleWindow.
Hier findet die Simulation des Spiels selbst statt.
Es werden die Level geparst und angezeigt, das Menu verwaltet und die Figuren verwaltet.
Zwischen Menu und Spiel wird durch ein enum (currentScreen) unterschieden und die verschiedenen Gamestati werden ebenfalls durch enums (gameOver, theGameIsOn und gameWon) verwaltet.
characters.h/characters.cpp:
Enthält die Spielfiguren und Hilfsstrukturen wie Koordinaten und Richtungen.
Alle Spielfiguren habe die Basisklasse Meeple gemeinsam.
Davon leiten sich Pacman ab und die Geisterbasisklasse Ghost.
Ghost enthält die Eigenschaften die die Geister gemeinsam haben, sowie die pure virtual Funktion Move.
Die zwei Geistertypen haben jeweils ihre eigene Movefunktion, da sie sich ja unterschiedlich bewegen.
ConsoleWindow.h/ConsoleWindow.cpp:
Die gegebene Bibliothek habe ich für die Grafikausgabe erweitert durch einen weiteren std::vector<char> namens iconBuffer und entsprechende Getter/Setter/Clear Funktionen.
Die Funktion ist dabei wie der textBuffer aus der original Datei, nur dass diese Zeichen in der paintEvent Methode nicht als Text auf den Bildschirm geschrieben werden sondern übersetzt werden in
ein QPixmap.
Dadurch kann man genauso wie zuvor Text, jederzeit Icons an allen Stellen des Programms einfügen.
Die Icons werden dazu durch die unordered map icons aus chars in Dateinamen übersetzt, man kann also so viele Icons anlegen wie man Asciizeichen hat.
Wenn man ein neues Icon hinzufügen will kann man eine png Datei in den Dateiordner stecken und icons entsprechend erweitern.
Ablauf:
Das Spiel wird über die OnRefresh() Methode reguliert.
Dabei unterscheidet die Methode zwischen Menü und Spiel und im Spiel zwischen den einzelnen Zuständen (durch switch Anweisungen basierend auf enums siehe oben).
in der Variable cycle wird gespeichert jeden wievielten Refresh Cycle sich Geister und Pacman bewegen dürfen. Das wird im Menü durch die Schwierigkeitseinstellung geändert.
Wenn es eine gültige Runde ist werden die Move Funktionen von Pacman und den Geistern aufgerufen (die Geister sind dazu in einem Vector gespeichert).
Dann werden die Konsequenzen des Zugs (gewonnen/verloren überprüft).
Bonusfeature:
Nach 5 Sekunden im Level spawned eine Unverwundbarkeitspille (grün).
Das geschieht nach der rrnd Funktion aus der ConsoleDemo an einem Punkt an dem zu Levelbeginn ein Punkt war.
Wenn ein Geist über sie drüber schwebt wird sie zerstört (Punkte unter der Pille werden wieder hergestellt).
Wenn Pacman sie isst kann er die Geister fressen (diese verschwinden von der Karte, wenn sie auf einem Punkt stehen wird dieser mitgegessen).
Die "schlauen Geister" laufen dabei aktiv weg, bei den "dummen Geistern" habe ich mich bewusst dafür entschieden, dass sie auch zufällig "weglaufen" ihre Bewegung ändert sich also nicht.
Nach 5 Sekunden hört die Wirkung der Pille auf und die Geister jagen wieder Pacman.
Menü:
-Es ist möglich zwischen drei Karten im Menü auszuwählen (diese werden aus den level.txt Dateien geladen)
- Mit q kann das Programm jederzeit beendet werden (nach Bestätigung) während der Abfrage wird der Timer pausiert und
falls man doch weiterspielt wieder gestartet
- Man kann im Menü die Schwierigkeitsstufe wählen (cycle Variable ändert sich)
- Am Ende der Runde wird angeboten ein neues Spiel zu beginnen, dabei wird die Zeit gespeichert um dann ...
- ... in der nächsten Runde als Bestzeit zu gelten die es zu schlagen gilt (nur solange man nochmal Spielen bestätigt, geht man ins
Menü wird die Bestzeit entfernt, weil man ja dann theoretisch einen anderen Level aus der Textdatei laden könnte)