chore: improved comments

This commit is contained in:
moonleay 2024-12-16 23:44:01 +01:00
parent a9d49b5599
commit 362358e44d
Signed by: moonleay
GPG key ID: 82667543CCD715FB
7 changed files with 85 additions and 13 deletions

View file

@ -11,15 +11,18 @@ namespace game
field(play_field), field(play_field),
player_start_position(player_start_position) 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 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'; return this->field[player.get_pos().y][player.get_pos().x] == 'A';
} }
bool Maze::is_player_at_goal(Player player) const 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'; return this->field[player.get_pos().y][player.get_pos().x] == 'Z';
} }
@ -54,16 +57,19 @@ namespace game
char Maze::get_field(PositionVector pos) const char Maze::get_field(PositionVector pos) const
{ {
// Gebe das Element der gewollten Position zurück
return this->field[pos.y][pos.x]; return this->field[pos.y][pos.x];
} }
void Maze::update_field(PositionVector pos, char target) void Maze::update_field(PositionVector pos, char target)
{ {
// Aktuallisiere ein gegebens Feld dem gegebenen Wert
this->field[pos.y][pos.x] = target; this->field[pos.y][pos.x] = target;
} }
vector<int> Maze::get_player_start_position() vector<int> Maze::get_player_start_position()
{ {
// Gebe die Startposition des Spielers zurück
return this->player_start_position; return this->player_start_position;
} }
} // game } // game

9
Maze.h
View file

@ -7,15 +7,6 @@
#ifndef MAZE_H #ifndef MAZE_H
#define MAZE_H #define MAZE_H
/* Legende
* S - Spieler
* Z - Ziel
* . - Leerer Raum (begehbar)
* # - Wand
* A - Geist
* K - Schlüssel
* T - Tür
*/
namespace game namespace game
{ {
class Player; // Forward declaration class Player; // Forward declaration

View file

@ -8,37 +8,84 @@ namespace game
{ {
vector<int> MazeParser::request_numbers_from_user(const int amount_of_numbers) vector<int> MazeParser::request_numbers_from_user(const int amount_of_numbers)
{ {
// Erstelle eine Variable für die Eingabe der Zahl(en)
int input; int input;
// Erstelle eine Liste für die einzulesenden Nummern
vector<int> list; vector<int> list;
// Lese soviel ein, wie gefragt
for (int i = 0; i < amount_of_numbers; ++i) for (int i = 0; i < amount_of_numbers; ++i)
{ {
// Lese Zahl ein
cin >> input; cin >> input;
// Sollte etwas schief gelaufen sein, dann wirf eine Exception
if (!cin) if (!cin)
throw runtime_error("Cin failed while reading numbers!"); throw runtime_error("Cin failed while reading numbers!");
// Schreibe die gelesene Zahl auf die Liste
list.push_back(input); list.push_back(input);
} }
// Gebe die Liste zurück
return list; return list;
} }
bool MazeParser::is_valid_maze_element(const char target)
{
// Gehe jedes erlaubte Element durch und
for (const char c : valid_maze_elements)
// Gucke, ob es das gegebene Element ist
if (c == target)
return true; // Gebe wahr zurück, wenn das Element in der Liste ist
// Sollte es kein Element in der Liste geben, welches dem gegebenen Entspricht, dann ist das Element nicht erlaubt.
return false;
}
Maze MazeParser::request_maze_from_user() Maze MazeParser::request_maze_from_user()
{ {
// Lese aus, wie groß das Labyrinth sein soll
vector<int> maze_size = request_numbers_from_user(2); vector<int> maze_size = request_numbers_from_user(2);
// Erstelle eine Variable für den Labyrinth-Input
char input; char input;
// Erstelle ein leeres Feld
vector<vector<char>> field; vector<vector<char>> field;
for (int i = 0; i < maze_size[0]; ++i)
// Lese das eingegebene Labyrinth ein
for (int y = 0; y < maze_size[0]; ++y)
{ {
// Für jede Reihe erstelle eine Variable...
vector<char> row; vector<char> row;
for (int j = 0; j < maze_size[1]; ++j) for (int x = 0; x < maze_size[1]; ++x)
{ {
// und lese jedes Element der Reihe ein
cin >> input; cin >> input;
// Werfe eine Exception, wenn der Input nicht lesbar ist, d.h. Nutzer hat eine Falsch eingabe getätigt.
if (!cin) if (!cin)
throw runtime_error("Cin failed while reading chars!"); throw runtime_error("Cin failed while reading chars!");
// Kontrolliere, ob das Element in einem Labyrinth vorkommen darf
if (!is_valid_maze_element(input))
throw runtime_error("The given input is not a valid element of a maze!");
// Schreibe den eingelesenen Wert in die aktuelle Reihe
row.push_back(input); row.push_back(input);
} }
// Schreibe die fertige Reihe in das Feld
field.push_back(row); field.push_back(row);
} }
// Lese die Startposition des Spielers aus
vector<int> player_start_pos = request_numbers_from_user(2); vector<int> player_start_pos = request_numbers_from_user(2);
// Gebe die Daten als Spielfeld zurück
return Maze(field, player_start_pos); return Maze(field, player_start_pos);
} // `4 3 #.# #.K #T# #Z# 0 1` } // Beispieleingabe: `4 3 #.# #.K #T# #Z# 0 1`
} // game } // game

View file

@ -7,16 +7,35 @@
#ifndef MAZEPARSER_H #ifndef MAZEPARSER_H
#define MAZEPARSER_H #define MAZEPARSER_H
/* Legende
* S - Spieler
* Z - Ziel
* . - Leerer Raum (begehbar)
* # - Wand
* A - Geist
* K - Schlüssel
* T - Tür
*/
namespace game namespace game
{ {
/// Erlaubte Zeichen in einem Labyrinth
/// Ist eine Konstante, darf also in global scope
static const vector<char> valid_maze_elements = {'Z', '.', '#', 'A', 'K', 'T'};
class MazeParser class MazeParser
{ {
private: private:
/// Lese eine bestimmte Anzahl an Nummern aus der Konsole /// Lese eine bestimmte Anzahl an Nummern aus der Konsole
/// @param amount_of_numbers Wie viele Nummern eingelesen werden sollen /// @param amount_of_numbers Wie viele Nummern eingelesen werden sollen
/// @return Die eingelesenen Nummern /// @return Die eingelesenen Nummern
static vector<int> request_numbers_from_user(int amount_of_numbers); static vector<int> request_numbers_from_user(int amount_of_numbers);
/// Kontrolliere, ob ein Zeichen im Labyrinth vorkommen darf
/// @param target Das Zeichen, welches Kontrolliert werden soll
/// @return Ob das gegebene Zeichen in einem Labyrinth vorkommen darf
static bool is_valid_maze_element(char target);
public: public:
/// Lese ein Labyrinth aus der Konsole /// Lese ein Labyrinth aus der Konsole
/// @return Das Labyrinth /// @return Das Labyrinth

View file

@ -10,16 +10,18 @@ namespace game
{ {
Player::Player(const int target_x, const int target_y): pos(target_x, target_y), keys_in_inventory(0) 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 position speichern müssen // Wir brauchen keinen Inhalt in diesem Konstruktor, da wir nur die Variablen initialisieren müssen
} }
PositionVector Player::get_pos() const PositionVector Player::get_pos() const
{ {
// Gebe die aktuelle Position des Spielers zurück
return this->pos; return this->pos;
} }
void Player::update_position(const PositionVector target) void Player::update_position(const PositionVector target)
{ {
// Aktualisiere die aktuelle Position des Spielers
this->pos = target; this->pos = target;
} }

View file

@ -8,12 +8,14 @@ namespace game
{ {
PositionVector::PositionVector(const int x, const int y) PositionVector::PositionVector(const int x, const int y)
{ {
// Setze die Werte des PositionVectors
this->x = x; this->x = x;
this->y = y; this->y = y;
} }
void PositionVector::update(const int x, const int y) void PositionVector::update(const int x, const int y)
{ {
// Aktualisiere die Werte des PositionVectors
this->x = x; this->x = x;
this->y = y; this->y = y;
} }

View file

@ -14,17 +14,22 @@ const vector<int> player_start_position = {4, 0};
int main() int main()
{ {
// Erstelle eine Variable, in der wir das eingelesene Labyrinth speichern
Maze maze; Maze maze;
try try
{ {
// Lese das Labyrinth ein
maze = MazeParser::request_maze_from_user(); maze = MazeParser::request_maze_from_user();
} }
catch (...) catch (...)
{ {
// Das Labyrinth einlesen hat nicht geklappt. Gebe Fehlermeldung aus und beende das Programm.
cout << "Fehler beim Einlesen des Labyrinths.\n"; cout << "Fehler beim Einlesen des Labyrinths.\n";
return 0; return 0;
} }
// Lese die Startpositon des Spielers aus dem eingelesenen Labyrinth aus
vector<int> player_start_position = maze.get_player_start_position(); vector<int> player_start_position = maze.get_player_start_position();
// Erstelle einen Spieler mit der gegebenen start position // Erstelle einen Spieler mit der gegebenen start position