#include "std_lib_inc.h" // Ein Programm, welches dir erlaubt ein Labyrinth zu erkunden mit 'w', 'a', 's', und 'd'. // kMaze[y][x] const vector> kMaze = { {'#', '.', '.', '.', '.'}, {'#', '.', '#', '.', '.'}, {'.', 'Z', '#', '.', '.'}, {'.', '#', '#', '#', '.'}, {'.', '.', '.', '.', '.'} // ^ Spieler startet hier (4,0) }; /* Legende * S - Spieler * Z - Ziel * . - Leerer Raum (begehbar) * # - Wand */ const vector kPlayerStartPosition = {4, 0}; /// Bewege den Splieler um den Bewegungsvector, falls die Ziel position begehbar ist /// @param player_pos Die aktuelle Position des Spielers /// @param move_vector Die gewollte Bewegung /// @return Die neue Position des Spielers vector move_player(vector player_pos, vector move_vector); /// Kontrolliere, ob eine bestimmte Position begehbar ist /// @param target Die Position, die kontrolliert werden soll /// @return Ob die Position begehbar ist bool is_pos_free(vector target); /// Zeige das Spielfeld in der Konsole an /// @param player_pos Die aktuelle Position des Spielers void render_play_field(vector player_pos); int main() { // Erstelle die Spielerposition als Vector, formattiert als (y, x) vector player_pos = kPlayerStartPosition; // Erstelle eine Variable für den Input char input; // Durchlaufe die Hauptschleife des Spiels while (true) { // Zeige dem Spieler das Spielfeld render_play_field(player_pos); // Kontrolliere, ob der Spieler schon das Ziel erreicht hat if (kMaze[player_pos[0]][player_pos[1]] == 'Z') { // Ziel erreicht! Herzlichen Glückwunsch! cout << "Ziel erreicht! Herzlichen Glueckwunsch!\n"; break; } // Lese Eingabe des Spielers cin >> input; // Erstelle einen Vector mit einer Bewegung von 0 und 0 vector target_movement_vector = {0, 0}; // Kontrolliere, was der Spieler machen möchte. Speichere die erforderte Bewegung im Bewegungsvektor. // Schreibe nachrichten in die Konsole, // wenn nach Hilfe gefragt wird oder eine unbekannte Eingabe eingegeben wurde switch (input) { case 'w': target_movement_vector = {-1, 0}; break; case 'a': target_movement_vector = {0, -1}; break; case 's': target_movement_vector = {1, 0}; break; case 'd': target_movement_vector = {0, 1}; break; case 'h': // Schreibe hilfsreiche Tipps in die Konsole cout << "Gebe 'w', 'a', 's', oder 'd' ein zum bewegen. Gebe 'h' ein um diesen Text anzuzeigen.\n"; break; default: // Die gewollte Aktion kenne ich nicht. Schreibe eine Fehlernachricht in die Konsole cout << "Diese Eingabe kenne ich nicht. Gib 'h' ein, um eine Hilfe zu erhalten.\n"; break; } // Kontrolliere gewollte Bewegung und setze sie um. player_pos = move_player(player_pos, target_movement_vector); } // Beende das Programm return 0; } vector move_player(vector player_pos, vector move_vector) { // Berrechne die Position, zu die der Spieler sich bewegen möchte const vector target_position = { player_pos[0] + move_vector[0], player_pos[1] + move_vector[1] }; // Bewege den Spieler zu der gewollten Position, wenn diese frei ist if (is_pos_free(target_position)) { player_pos[0] += move_vector[0]; player_pos[1] += move_vector[1]; } else cout << "Bewegung nicht moeglich!\n"; // Gebe die Spielerposition zurück return player_pos; } bool is_pos_free(vector target) { if (target[1] < 0 || target[0] < 0 || target[1] > kMaze.size() - 1 || target[0] > kMaze[target[1]].size() - 1) return false; // Zielposition ist außerhalb des Spielfelds if (kMaze[target[0]][target[1]] == '#') return false; // Zielposition ist eine Wand return true; // Zielposition ist betretbar (ist keine Wand und auch nicht außerhalb des Spielfeldes) } void render_play_field(const vector player_pos) { for (int i = 0; i < kMaze.size(); ++i) { // Für jede Reihe ... for (int j = 0; j < kMaze[i].size(); ++j) { // ... schreibe für jedes Element ... if (i == player_pos[0] && j == player_pos[1]) cout << "S"; // ... 'S' wenn der aktuelle Eintrag die Position des Spielers ist else // sonst cout << kMaze[i][j]; // ... den tatsächlichen Eintrag cout << " "; // Füge ein Leerzeichen zwischen den Einträgen hinzu } cout << "\n"; // Beende die Reihe mit einem Zeilenumbruch } }