2024-12-16 23:20:04 +01:00
|
|
|
#include "Maze.h"
|
2024-12-02 17:47:09 +01:00
|
|
|
#include "std_lib_inc.h"
|
2024-12-14 17:32:06 +01:00
|
|
|
#include "Player.h"
|
|
|
|
#include "PositionVector.h"
|
2024-12-16 23:20:04 +01:00
|
|
|
#include "MazeParser.h"
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
using game::Player;
|
|
|
|
using game::PositionVector;
|
|
|
|
using game::Maze;
|
2024-12-16 23:20:04 +01:00
|
|
|
using game::MazeParser;
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Ein Programm, welches dir erlaubt ein Labyrinth zu erkunden mit 'w', 'a', 's', und 'd'.
|
|
|
|
const vector<int> player_start_position = {4, 0};
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
int main()
|
2024-12-02 17:47:09 +01:00
|
|
|
{
|
2024-12-16 23:44:01 +01:00
|
|
|
// Erstelle eine Variable, in der wir das eingelesene Labyrinth speichern
|
2024-12-16 23:20:04 +01:00
|
|
|
Maze maze;
|
2024-12-16 23:44:01 +01:00
|
|
|
|
2024-12-16 23:20:04 +01:00
|
|
|
try
|
|
|
|
{
|
2024-12-16 23:44:01 +01:00
|
|
|
// Lese das Labyrinth ein
|
2024-12-16 23:20:04 +01:00
|
|
|
maze = MazeParser::request_maze_from_user();
|
2024-12-16 23:21:24 +01:00
|
|
|
}
|
|
|
|
catch (...)
|
2024-12-16 23:20:04 +01:00
|
|
|
{
|
2024-12-16 23:44:01 +01:00
|
|
|
// Das Labyrinth einlesen hat nicht geklappt. Gebe Fehlermeldung aus und beende das Programm.
|
2024-12-16 23:20:04 +01:00
|
|
|
cout << "Fehler beim Einlesen des Labyrinths.\n";
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2024-12-16 23:44:01 +01:00
|
|
|
// Lese die Startpositon des Spielers aus dem eingelesenen Labyrinth aus
|
2024-12-16 23:20:04 +01:00
|
|
|
vector<int> player_start_position = maze.get_player_start_position();
|
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Erstelle einen Spieler mit der gegebenen start position
|
|
|
|
Player player = Player(player_start_position[1], player_start_position[0]);
|
|
|
|
|
|
|
|
// Erstelle eine Variable für den Input
|
2024-12-16 23:20:04 +01:00
|
|
|
char game_input;
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Durchlaufe die Hauptschleife des Spiels
|
|
|
|
while (true)
|
2024-12-02 17:47:09 +01:00
|
|
|
{
|
2024-12-14 17:32:06 +01:00
|
|
|
// Zeige dem Spieler das Spielfeld
|
2024-12-16 23:20:04 +01:00
|
|
|
maze.render(player);
|
|
|
|
|
2024-12-16 23:45:36 +01:00
|
|
|
// Kontrolliere, ob der Spieler an einem Geist gestorben ist
|
2024-12-16 23:20:04 +01:00
|
|
|
if (maze.was_player_killed_by_ghost(player))
|
|
|
|
{
|
|
|
|
cout << "Sie haben einen Geist getroffen! Game Over!\n";
|
|
|
|
break;
|
|
|
|
}
|
2024-12-14 17:32:06 +01:00
|
|
|
|
|
|
|
// Kontrolliere, ob der Spieler schon das Ziel erreicht hat
|
2024-12-16 23:20:04 +01:00
|
|
|
if (maze.is_player_at_goal(player))
|
2024-12-02 17:47:09 +01:00
|
|
|
{
|
2024-12-14 17:32:06 +01:00
|
|
|
// Ziel erreicht! Herzlichen Glückwunsch!
|
|
|
|
cout << "Ziel erreicht! Herzlichen Glueckwunsch!\n";
|
|
|
|
break;
|
2024-12-02 17:47:09 +01:00
|
|
|
}
|
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Lese Eingabe des Spielers
|
2024-12-16 23:20:04 +01:00
|
|
|
cin >> game_input;
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Erstelle einen Vector mit einer Bewegung von 0 und 0
|
2024-12-16 23:20:04 +01:00
|
|
|
PositionVector movement_vector = PositionVector(0, 0);
|
2024-12-02 17:47:09 +01:00
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Kontrolliere, was der Spieler machen möchte. Speichere die erforderte Bewegung im Bewegungsvektor.
|
|
|
|
// Schreibe nachrichten in die Konsole,
|
|
|
|
// wenn nach Hilfe gefragt wird oder eine unbekannte Eingabe eingegeben wurde
|
2024-12-16 23:20:04 +01:00
|
|
|
switch (game_input)
|
2024-12-14 17:32:06 +01:00
|
|
|
{
|
2024-12-02 17:47:09 +01:00
|
|
|
case 'w':
|
2024-12-14 17:32:06 +01:00
|
|
|
movement_vector.update(0, -1);
|
|
|
|
break;
|
2024-12-02 17:47:09 +01:00
|
|
|
case 'a':
|
2024-12-14 17:32:06 +01:00
|
|
|
movement_vector.update(-1, 0);
|
|
|
|
break;
|
|
|
|
case 's':
|
|
|
|
movement_vector.update(0, 1);
|
|
|
|
break;
|
2024-12-02 17:47:09 +01:00
|
|
|
case 'd':
|
2024-12-14 17:32:06 +01:00
|
|
|
movement_vector.update(1, 0);
|
|
|
|
break;
|
2024-12-02 17:47:09 +01:00
|
|
|
case 'h':
|
2024-12-14 17:32:06 +01:00
|
|
|
// Schreibe hilfsreiche Tipps in die Konsole
|
2024-12-16 23:21:24 +01:00
|
|
|
cout <<
|
2024-12-17 00:11:54 +01:00
|
|
|
"Du wurdest von einem Zauberer in ein Labyrinth gesperrt, nachdem du seine Künste beleidigt hast.\n"
|
|
|
|
<< "Er laesst dich leben, wenn du es schaffst den Ausgang (Z) zu finden. Solltest du keinen Erfolg haben, laesst er dich verhungern.\n"
|
2024-12-16 23:21:24 +01:00
|
|
|
<< "Auf deinem Abenteuer wirst du dabei boesen Geistern (A) begegnen und mit Schluesseln (K) Tueren (T) aufschliessen.\n"
|
|
|
|
<< "Bewege dich mit 'w', 'a', 's' und 'd'.\n";
|
2024-12-02 17:47:09 +01:00
|
|
|
break;
|
|
|
|
default:
|
2024-12-14 17:32:06 +01:00
|
|
|
// Die gewollte Aktion kenne ich nicht. Schreibe eine Fehlernachricht in die Konsole
|
2024-12-02 17:47:09 +01:00
|
|
|
cout << "Diese Eingabe kenne ich nicht. Gib 'h' ein, um eine Hilfe zu erhalten.\n";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-12-14 17:32:06 +01:00
|
|
|
// Kontrolliere gewollte Bewegung und setze sie um.
|
2024-12-16 23:20:04 +01:00
|
|
|
try
|
|
|
|
{
|
|
|
|
maze = player.move(maze, movement_vector);
|
2024-12-16 23:21:24 +01:00
|
|
|
}
|
|
|
|
catch (runtime_error& err)
|
2024-12-16 23:20:04 +01:00
|
|
|
{
|
|
|
|
// Diese Bewegung ist nicht möglich!
|
|
|
|
// Gebe aus, warum.
|
|
|
|
cout << err.what() << "\n";
|
|
|
|
}
|
2024-12-14 17:32:06 +01:00
|
|
|
}
|
|
|
|
// Beende das Programm
|
2024-12-02 17:47:09 +01:00
|
|
|
return 0;
|
2024-12-14 17:32:06 +01:00
|
|
|
}
|