91 lines
2.9 KiB
C++
91 lines
2.9 KiB
C++
//
|
|
// Created by moonleay on 12/16/24.
|
|
//
|
|
|
|
#include "MazeParser.h"
|
|
|
|
namespace game
|
|
{
|
|
vector<int> 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<int> 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<int> maze_size = request_numbers_from_user(2);
|
|
|
|
// Erstelle eine Variable für den Labyrinth-Input
|
|
char input;
|
|
|
|
// Erstelle ein leeres Feld
|
|
vector<vector<char>> field;
|
|
|
|
// Lese das eingegebene Labyrinth ein
|
|
for (int y = 0; y < maze_size[0]; ++y)
|
|
{
|
|
// Für jede Reihe erstelle eine Variable...
|
|
vector<char> 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<int> 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
|