Labyrinth
-
Hallo,
ich versuche gerade aus folgendem Programm von unserem Prof schlau zu werden
#include <iostream> #include <ctime> using namespace std; int sum=0; void mazeTraverse( char [][14], int, int ); int main() { char maze[14][14] = { { '.','.','.','.','.','.','.','.','.','.','.','.','.','.' }, { '.','#','#','#','#','#','#','#','#','#','#','#','#','.' }, { '.','#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ','#','.' }, { '.',' ',' ','#',' ','#',' ','#','#','#','#',' ','#','.' }, { '.','#','#','#',' ','#',' ',' ',' ',' ','#',' ','#','.' }, { '.',' ',' ',' ',' ',' ','#','#','#',' ','#',' ',' ','.' }, { '.','#','#','#','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#',' ',' ','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#','#',' ','#',' ','#',' ','#',' ','#',' ','#','.' }, { '.','#',' ',' ',' ',' ',' ',' ',' ',' ','#',' ','#','.' }, { '.','#','#','#','#','#','#',' ','#','#','#',' ','#','.' }, { '.','#',' ',' ',' ',' ',' ',' ','#',' ',' ',' ','#','.' }, { '.','#','#','#','#','#','#','#','#',' ','#','#','#','.' }, { '.','.','.','.','.','.','.','.','.','.','.','.','.','.' } }; mazeTraverse( maze, 3, 1 ); cout << "Es gibt " << sum << " Ausgaenge" << endl; system("pause"); return 0; } void mazeTraverse( char m[][14], int r, int c ) { static int update = time( 0 ) % 10; while ( time(0) % 10 != update ) ; // warten if ( time( 0 ) % 10 == 9 ) update = 0; else update = (time( 0 ) % 10) + 1; m[r][c] = 'x'; // Punkt als besucht markieren system("cls"); // Labyrinth ausgeben for ( int row = 0; row < 14; row++ ) { for ( int column = 0; column < 14; column++ ) cout << m[row][column]; cout << '\n'; } if ( m[r][c] == 'E' ) { cout << "\nsuccess!\n"; return; } else { if ( m[r-1][c] == ' ' || m[r-1][c] == 'E' ) // wenn Bewegung hoch möglich mazeTraverse( m, r-1, c ); // hochbewegen if ( m[r-1][c] == '.' || m[r][c+1] == 'E' ) //Überprüfen ob . getroffen sum++; // Summe (der Ausgänge) hochzählen if ( m[r+1][c] == ' ' || m[r+1][c] == 'E' ) // wenn Bewegung runter möglich mazeTraverse( m, r+1, c ); // runterbewegen if ( m[r+1][c] == '.' || m[r][c+1] == 'E' ) //Überprüfen ob . getroffen sum++; // Summe (der Ausgänge) hochzählen if ( m[r][c-1] == ' ' || m[r][c-1] == 'E' ) // Wenn Linksbewegung möglich mazeTraverse( m, r, c-1 ); // nach links bewegen if ( m[r][c-1] == '.' || m[r][c+1] == 'E' ) //Überprüfen ob . getroffen sum++; // Summe (der Ausgänge) hochzählen if ( m[r][c+1] == ' ' || m[r][c+1] == 'E' ) // Wenn Rechtsbewegung möglich mazeTraverse( m, r, c+1 ); // nach rechts bewegen if ( m[r][c+1] == '.' || m[r][c+1] == 'E' ) //Überprüfen ob . getroffen sum++; // Summe (der Ausgänge) hochzählen return; } } // end function mazeTraverseMir sind eigentlich auch alle Schritte klar, bis auf dieser hier:
if ( m[r][c] == 'E' ) { cout << "\nsuccess!\n"; return; }Wozu ist dieses E, woher kommt es und wieso ist dort dieses cout das, wenn ich das programm laufen lasse nie ausgegeben wird? Wieso werden die Bewegungen damit verglichen?
Gruß
Gunnar
-
Blind geraten: Vermutlich ist die Kennung 'E' für eine Erweiterung des Programms vorgesehen (wenn du bei dem E ankommst, hast du gewonnen). Jedenfalls werten alle anderen Abfragen das E als freies Feld (und als Kennzeichnung für einen Ausgang).
Aber am besten fragst du danach mal deinen Prof.
-
I see.... aber wenn ich es lösche funktioniert es nicht mehr?
Edit: vergiss es funktioniert doch

-
Aber eines noch...
was macht das:
while ( time(0) % 10 != update ) ; // warten if ( time( 0 ) % 10 == 9 ) update = 0; else update = (time( 0 ) % 10) + 1;Ist das dafür verantwortlich, ob das LAbyrinth neugestartet wird, oder fortgesetzt?
-
ThaRealMatix schrieb:
Aber eines noch...
was macht das:
while ( time(0) % 10 != update ) ; // wartenDas ist eine Warteschleife, um den Programmablauf etwas auszubremsen (time() gibt die Sekunden seit 1.1.1970 zurück, update wird (siehe unten) als Zielvorgabe für die Zeit gesetzt.
if ( time( 0 ) % 10 == 9 ) update = 0; else update = (time( 0 ) % 10) + 1;Damit wird für den nächsten Schleifendurchlauf update neu gesetzt (effektiv auf "jetzt plus 1 Sekunde").
Insgesamt bewirkt diese Konstruktion, daß du auch mitverfolgen kannst, wie sich das Programm durch das Labyrinth durchhangelt (setz den ganzen Block mal in /.../ und dann schau dir an, wie schnell das Programm arbeitet).