epr24pr3_ojanssen2/Maze.h

77 lines
2.1 KiB
C++

//
// Created by moonleay on 12/13/24.
//
#include "std_lib_inc.h"
#include "PositionVector.h"
#ifndef MAZE_H
#define MAZE_H
/* Legende
* S - Spieler
* Z - Ziel
* . - Leerer Raum (begehbar)
* # - Wand
* A - Geist
* K - Schlüssel
* T - Tür
*/
namespace game
{
class Player; // Forward declaration
/// Ein Labyrinth.
/// Besitzt ein Feld
class Maze
{
// class -> members private by default
private:
/// Das Spielfeld
vector<vector<char>> field;
/// Die Startposition des Spielers
vector<int> player_start_position;
public:
/// Das Spielfeld
Maze(vector<vector<char>> play_field, vector<int> player_start_position);
/// Ein Standard Konstruktor
/// Variablen innerhalb der Klasse bleiben uninitialisiert
Maze() = default;
/// Kontrolliere, ob der Spieler stirbt
/// @param player Der Spieler
/// @return Ob der Spieler tot ist
bool was_player_killed_by_ghost(Player player) const;
/// Kontrolliere, ob der Spieler am Ziel ist
/// @param pos Die Position des Spielers
/// @return Ob der Spieler am Ziel ist
bool is_player_at_goal(Player player) const;
/// Kontrolliere, ob eine bestimmte Position begehbar ist
/// @param pos Die Position, die überprüft werden soll
/// @param player_has_key If the player has at least one key
/// @return Ob die Position begehbar ist
bool is_pos_free(PositionVector pos, bool player_has_key) const;
/// Zeige das Spielfeld in der Konsole an
/// @param pos Die Position des Spielers
void render(Player player) const;
/// Kriege den Wert einer Position
/// @param pos Die gewollte Position
/// @return Der Wert der Position
char get_field(PositionVector pos) const;
/// Ersetze den Wert von einer Position
/// @param target_pos Die Position die ersetzt werden soll
/// @param target Der Wert, auf den die Position gesetzt werden soll
void update_field(PositionVector pos, char target);
/// Kriege die Startposition des Spielers
/// @return Die Startposition des Spielers
vector<int> get_player_start_position();
};
} // game
#endif //MAZE_H