// // Created by moonleay on 12/16/24. // #include "MazeParser.h" namespace game { vector MazeParser::request_numbers_from_user(const int amount_of_numbers) { // Erstelle eine Variable für die Eingabe der Zahl(en) int input; // Erstelle eine Liste für die einzulesenden Nummern vector list; // Lese soviel ein, wie gefragt for (int i = 0; i < amount_of_numbers; ++i) { // Lese Zahl ein cin >> input; // Sollte etwas schief gelaufen sein, dann wirf eine Exception if (!cin) throw runtime_error("Cin failed while reading numbers!"); // Schreibe die gelesene Zahl auf die Liste list.push_back(input); } // Gebe die Liste zurück 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() { // Lese aus, wie groß das Labyrinth sein soll vector maze_size = request_numbers_from_user(2); // Erstelle eine Variable für den Labyrinth-Input char input; // Erstelle ein leeres Feld vector> field; // Lese das eingegebene Labyrinth ein for (int y = 0; y < maze_size[0]; ++y) { // Für jede Reihe erstelle eine Variable... vector row; for (int x = 0; x < maze_size[1]; ++x) { // und lese jedes Element der Reihe ein cin >> input; // Werfe eine Exception, wenn der Input nicht lesbar ist, d.h. Nutzer hat eine Falsch eingabe getätigt. if (!cin) 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); } // Schreibe die fertige Reihe in das Feld field.push_back(row); } // Lese die Startposition des Spielers aus vector player_start_pos = request_numbers_from_user(2); // Gebe die Daten als Spielfeld zurück return Maze(field, player_start_pos); } // Beispieleingabe: `4 3 #.# #.K #T# #Z# 0 1` } // game