// // Created by moonleay on 12/12/24. // #include "std_lib_inc.h" #include "Player.h" #include "Maze.h" #include "Exceptions/MovementNotPossible.h" using game_exceptions::MovementNotPossible; namespace game { Player::Player(const int target_x, const int target_y): pos(target_x, target_y), keys_in_inventory(0) { // Wir brauchen keinen Inhalt in diesem Konstruktor, da wir nur die Variablen initialisieren müssen } Player::Player(const PositionVector pos) : pos(pos), keys_in_inventory(0) { } PositionVector Player::get_pos() const { // Gebe die aktuelle Position des Spielers zurück return this->pos; } void Player::update_position(const PositionVector target) { // Aktualisiere die aktuelle Position des Spielers this->pos = target; } Maze Player::move(Maze& maze, const PositionVector move_vector) { // Berechne die Position, zu der der Spieler sich bewegen möchte const PositionVector target_position = PositionVector(this->get_pos().x + move_vector.x, this->get_pos().y + move_vector.y); // Bewege den Spieler zu der gewollten Position, wenn diese frei ist if (maze.is_pos_free(target_position, this->has_key_available())) { // Bewege Spieler zur neuen Position this->update_position(target_position); // Kontrolliere das Feld nach speziellen Attributen switch (maze.get_field(target_position)) { case 'K': // Spieler steht auf einem Schlüssel. // Gebe dem Spieler einen Schlüssel und ersetze das Feld mit einem leeren ++this->keys_in_inventory; maze.update_field(target_position, '.'); break; case 'T': // Spieler steht auf einer Tür // Nehme dem Spieler einen Schlüssel weg und ersetze das Feld mit einem leeren --this->keys_in_inventory; maze.update_field(target_position, '.'); break; default: ; } } else throw MovementNotPossible("Bewegung nicht moeglich!"); return maze; } bool Player::has_key_available() const { return this->keys_in_inventory > 0; } } // game