// // Created by moonleay on 12/13/24. // #include "Maze.h" #include "Player.h" namespace game { Maze::Maze(const vector> play_field, const vector player_start_position): field(play_field), player_start_position(player_start_position) { // Wir brauchen keinen Inhalt in diesem Konstruktor, da wir nur die Variablen initialisieren müssen } bool Maze::was_player_killed_by_ghost(Player player) const { // Kontrolliere ob der Spieler an einem Geist gestorben ist return this->field[player.get_pos().y][player.get_pos().x] == 'A'; } bool Maze::is_player_at_goal(Player player) const { // Kontrolliere ob der Spieler am Ziel ist return this->field[player.get_pos().y][player.get_pos().x] == 'Z'; } bool Maze::is_pos_free(const PositionVector pos, const bool player_has_key) const { if (pos.x < 0 || pos.y < 0 || pos.y > field.size() - 1 || pos.x > field[pos.y].size() - 1) return false; // Zielposition ist außerhalb des Spielfelds if (field[pos.y][pos.x] == '#') return false; // Zielposition ist eine Wand if (field[pos.y][pos.x] == 'T') return player_has_key; // Zielposition ist eine Tür return true; // Zielposition ist betretbar (ist keine Wand und auch nicht außerhalb des Spielfeldes) } void Maze::render(Player player) const { for (int y = 0; y < field.size(); ++y) { // Für jede Reihe ... for (int x = 0; x < field[y].size(); ++x) { // ... schreibe für jedes Element ... if (y == player.get_pos().y && x == player.get_pos().x) cout << "S"; // ... 'S' wenn der aktuelle Eintrag die Position des Spielers ist else // sonst cout << field[y][x]; // ... den tatsächlichen Eintrag cout << " "; // Füge ein Leerzeichen zwischen den Einträgen hinzu } cout << "\n"; // Beende die Reihe mit einem Zeilenumbruch } } char Maze::get_field(PositionVector pos) const { // Gebe das Element der gewollten Position zurück return this->field[pos.y][pos.x]; } void Maze::update_field(PositionVector pos, char target) { // Aktuallisiere ein gegebens Feld dem gegebenen Wert this->field[pos.y][pos.x] = target; } vector Maze::get_player_start_position() { // Gebe die Startposition des Spielers zurück return this->player_start_position; } } // game