#include <stdio.h> #define NORTH 1 #define EAST 2 #define SOUTH 3 #define WEST 4 #define MAZESIZE 41 char maze[MAZESIZE][MAZESIZE] ={ {"_________________________________________"}, {"S>| | | | | |"}, {"| | +---+ +---- | +-- | +-+ | ------+ | |"}, {"| | | | | | | | | | | |"}, {"| |-- | | | +---+-+ +-----+ |-----+ +---|"}, {"| | | | | | | | | |"}, {"| | +-----+ | | | +---+ | +-----+ | +-+ |"}, {"| | | | | | | | | |"}, {"|---+ +---+-+ +---+ | --+ +---+ +-----+ |"}, {"| | | | | | | | | |"}, {"|---- | | | --+ | | +-----+ --+-- | ----|"}, {"| | | | | | | |"}, {"| +---+ |-- +---+ | | +---- | +---+-- | |"}, {"| | | | | | | | | | |"}, {"| +-+ | | --+ | +-+-+-+-----+---+ +---+ |"}, {"| | | | | | | | |"}, {"|-----+-+-+ +---+ | | --+---+-+ | | +-+ |"}, {"| | | | | | | | | | |"}, {"|---- | +---+-----+-- | | | | +---| | | |"}, {"| | | | | | | | | |"}, {"| --+-+ +-+-+ --+-+ +-+---+-+ +-+ +-+-+ |"}, {"| | | | | | | | | |"}, {"|-- | +-- | +-+ + +-+ +-+ | | | +---+---|"}, {"| | | | | | | | | | | | |"}, {"| +---+ +-+ | | | | +-+ +---+ | +-+ | | |"}, {"| | | | | | | | | | | | |"}, {"| | ----+---+ | +-+ | | +-- | +-----+-+ |"}, {"| | | | | | | | |"}, {"| +-+-- | | +-+-+ +-+-+-- +-+ | | ------|"}, {"| | | | | | | | |"}, {"|-+ | | +-+-- +---+ | +-+-+ | | | +---+ |"}, {"| | | | | | | | | | | | |"}, {"| +---+ | +---+ --+ --+ | +-+ | | | | | |"}, {"| | | | | | | | | | | | |"}, {"| | +---+ +-- +-+ +-+ +---+-----+ | | | |"}, {"| | | | | | | | | | | |"}, {"| +-+ | | | +-+ +-- | | +-----+ | | +---|"}, {"| | | | | | | | | | | | | |"}, {"| | --+---+ | +-----+ | | +-- +-+ | | | |"}, {"| | | | | | | F"}, {"+---------------------------------------+"} }; int currentdirection=2; /* N=1, E=2, S=3, W=4 */ int currentrow=1; int currentcolumn=1; int WIN=0; char P=' '; int iterations; void displayWorld() { for( int i=0;i<MAZESIZE; i++ ) { for( int j=0;j<MAZESIZE; j++ ) { printf( "%c", maze[i][j] ); } printf( "\n" ); } printf( "\n\n\n"); } int moveFwd() { if( checkWin()==100) { printf( "\n\n\n*** YOU WIN!!! ***\n"); printf( "in iterations: %d\n\n\n", iterations ); WIN=1; exit(0); } else if( wallInFrontOfMe()==1) { printf( "[ERROR]\n" ); printf( "[cd: %d\n]", currentdirection ); return(-1); } else { maze[currentrow][currentcolumn]=' '; switch( currentdirection ) { case NORTH: currentrow--; P='^'; break; case EAST: currentcolumn++; P='>'; break; case SOUTH: currentrow++; P='v'; break; case WEST: currentcolumn--; P='<'; break; } maze[currentrow][currentcolumn]=P; return(1); } return(1); } void turnRight() { if( ++currentdirection == 5 ) currentdirection=NORTH; } void turnLeft() { if( --currentdirection == 0 ) currentdirection=WEST; } int checkWin() { if( maze[currentrow-1][currentcolumn] == 'F' ) return 100; if( maze[currentrow][currentcolumn+1] == 'F' ) return 100; if( maze[currentrow+1][currentcolumn] == 'F' ) return 100; if( maze[currentrow][currentcolumn-1] == 'F' ) return 100; return(0); } int wallInFrontOfMe() { int row=currentrow; int col=currentcolumn; int direction=currentdirection; switch( direction ) { case NORTH: if(( maze[row-1][col] == ' ' ) || (maze[row-1][col] == '.' ))return(0); break; case EAST: if(( maze[row][col+1] == ' ' ) || (maze[row][col+1] == '.' ))return(0); break; case SOUTH: if(( maze[row+1][col] == ' ' ) || (maze[row+1][col] == '.' ))return(0); break; case WEST: if(( maze[row][col-1] == ' ' ) || (maze[row][col-1] == '.' ))return(0); break; default: return(1); } return(1); } int main() { int startingrow=1; int startingcolumn=1; int startingdirection=EAST; displayWorld(); iterations=0; char input[1]; while( WIN==0 && iterations<=10000) { /* --------------------------------------------------------------------- */ /* Commands: */ /* if( wallInFrontOfMe() == 0 ) means "If there's no wall in front of me */ /* if( wallInFrontOfMe() == 1 ) means "If there is a wall in front of me */ /* moveFwd(); moves the * forwards one space */ /* turnRight(); turns the * to the right */ /* turnLeft(); turns the * to the left */ /* --------------------------------------------------------------------- */ /* PUT YOUR MAZE SOLVING CODE BELOW THIS LINE AND.... */ if( wallInFrontOfMe() == 1 ) { turnRight(); if( wallInFrontOfMe()==1 ) { turnRight(); turnRight(); if( wallInFrontOfMe()==1 ) { turnLeft(); moveFwd(); } else { moveFwd(); } } else { moveFwd(); } } else { turnRight(); if( wallInFrontOfMe()==1 ) { turnLeft(); moveFwd(); } else { moveFwd(); } } /* .... ABOVE THIS LINE */ /* -------------------------------------------------------------------- */ displayWorld(); printf( "press enter or CTRL-C to end\n"); scanf( "%c",&input); iterations++; } displayWorld(); return(0); }