//----------------------------------------------------------------------------- // a2d.cpp // 23apr2007/sklar //----------------------------------------------------------------------------- #include #include #include using namespace std; // declare constants const int MAX_X = 15; const int MAX_Y = 10; const char QUIT = 'Q'; const char INVALID_COMMAND = '0'; // declare global variables char grid[MAX_Y][MAX_X]; // declare function prototypes void initGrid(); void displayGrid(); void displayGridWithWalls(); void initRobot( int &rx, int &ry, int &heading ); void updateRobotInGrid( int rx, int ry, int heading ); void moveForward( int &rx, int &ry, int heading ); void moveBackward( int &rx, int &ry, int heading ); void turnLeft( int rx, int ry, int &heading ); void turnRight( int rx, int ry, int &heading ); void moveRobot( char cmd, int &rx, int &ry, int &heading ); char parseline( string s ); //----------------------------------------------------------------------------- // initGrid() function // this function initializes the grid //----------------------------------------------------------------------------- void initGrid() { int x, y; for ( y=0; y 0 ) { ry--; } break; case 1: // west if ( rx > 0 ) { rx--; } break; case 2: // south if ( ry < MAX_Y-1 ) { ry++; } break; case 3: // east if ( rx < MAX_X-1 ) { rx++; } break; } // end of switch heading } // end of moveForward() //----------------------------------------------------------------------------- // moveBackward() //----------------------------------------------------------------------------- void moveBackward( int &rx, int &ry, int heading ) { switch ( heading ) { case 0: // north if ( ry < MAX_Y-1 ) { ry++; } break; case 1: // west if ( rx < MAX_X-1 ) { rx++; } break; case 2: // south if ( ry > 0 ) { ry--; } break; case 3: // east if ( rx > 0 ) { rx--; } break; } // end of switch heading } // end of moveBackward() //----------------------------------------------------------------------------- // turnLeft() //----------------------------------------------------------------------------- void turnLeft( int rx, int ry, int &heading ) { switch ( heading ) { case 0: // north heading = 1; break; case 1: // west heading = 2; break; case 2: // south heading = 3; break; case 3: // east heading = 0; break; } // end of switch heading } // end of turnLeft() //----------------------------------------------------------------------------- // turnRight() //----------------------------------------------------------------------------- void turnRight( int rx, int ry, int &heading ) { switch ( heading ) { case 0: // north heading = 3; break; case 1: // west heading = 0; break; case 2: // south heading = 1; break; case 3: // east heading = 2; break; } // end of switch heading } // end of turnRight() //----------------------------------------------------------------------------- // moveRobot() //----------------------------------------------------------------------------- void moveRobot( char cmd, int &rx, int &ry, int &heading ) { switch( cmd ) { case 'F': // forward moveForward( rx, ry, heading ); break; case 'B': // backward moveBackward( rx, ry, heading ); break; case 'L': // turn left turnLeft( rx, ry, heading ); break; case 'R': // turn right turnRight( rx, ry, heading ); break; } // end of switch cmd } // end of moveRobot() //----------------------------------------------------------------------------- // parseline() //----------------------------------------------------------------------------- char parseline( string s ) { int i; // convert input line to lowercase for ( i=0; i