#include #include "apmatrix.h" void action(apmatrix &,int&, int&,int &); void go(apmatrix &, int&, int&,int); void display(apmatrix); void turn(apmatrix&); int findrow(apmatrix); int findcol(apmatrix); bool spacecheck(apmatrix,int, int); bool checkright(apmatrix,int, int); bool checkleft(apmatrix,int, int); bool checkback(apmatrix,int,int); void main() { int posrow=2,poscol=0,turns=3; apmatrix maze(12,12,'Ö'); maze[1][1] = maze[1][2] = maze[1][3] = maze[1][5] = maze[1][6] = maze[1][7] = maze[1][8] = maze[1][9] = maze[1][10] = maze[2][0] = maze[2][1] = maze[2][3] = maze[2][5] = maze[2][10] = maze[3][3] = maze[3][5] = maze[3][6] = maze[3][7] = maze[3][8] = maze[3][10] = maze[4][1] = maze[4][2] = maze[4][3] = maze[4][4] = maze[4][8] = maze[4][10] = maze[4][11] = maze[5][4] = maze[5][6] = maze[5][8] = maze[5][10] = maze[6][1] = maze[6][2] = maze[6][4] = maze[6][6] = maze[6][8] = maze [6][10] = maze[7][2] = maze[7][4] = maze[7][6] = maze[7][8] = maze[7][10] = maze[8][1] = maze[8][2] = maze[8][3] = maze[8][4] = maze[8][5] = maze[8][6] = maze[8][7] = maze[8][8] = maze[8][10] = maze[9][6] = maze[9][10] = maze[10][1] = maze[10][2] = maze[10][3] = maze[10][4] = maze[10][5] = maze[10][6] = maze[10][8] = maze[10][9] = maze[10][10] = ' '; maze[posrow][poscol]='M'; display(maze); do { action(maze,posrow,poscol,turns); if(poscol==11) { cout << "The mouse has found the exit!" << '\n'; } display(maze); } while(poscol!=11); } void action(apmatrix &m,int &posrow,int &poscol,int &turns) // action function { for(int i=1;i<=turns;i++) { turn(m); } posrow=findrow(m); poscol=findcol(m); if(spacecheck(m,posrow,poscol)) { go(m,posrow,poscol,turns); } else { if(checkleft(m,posrow,poscol)) { turns+=1; turn(m); posrow=findrow(m); poscol=findcol(m); go(m,posrow,poscol,turns); } else { if(checkright(m,posrow,poscol)) { turns+=3; turn(m); turn(m); turn(m); posrow=findrow(m); poscol=findcol(m); go(m,posrow,poscol,turns); } else { if(checkback(m,posrow,poscol)) { turns+=2; turn(m); turn(m); posrow=findrow(m); poscol=findcol(m); go(m,posrow,poscol,turns); } } } } turns%=4; for(i=turns;i<=3;i++) { turn(m); } if(poscol==10&&m[posrow][11]!='Ö') { m[posrow][poscol]=' '; poscol+=1; m[posrow][poscol]='M'; } } void go(apmatrix &m, int& posrow, int& poscol,int turns) // moves the + { m[posrow][poscol]=' '; posrow-=1; m[posrow][poscol]='M'; } int findrow(apmatrixm) // finds row coordinate { int posrow; for(int row=0; row<=11; row++) { for(int col=0; col<=11; col++) { if(m[row][col]=='M') { posrow=row; } } } return posrow; } int findcol(apmatrixm) // find column coordinate { int poscol; for(int row=0; row<=11; row++) { for(int col=0; col<=11; col++) { if(m[row][col]=='M') { poscol=col; } } } return poscol; } void display(apmatrix m) // displays the maze { int row, col; for(row=0; row&m) // turns the maze 90 degrees to the right { apmatrix temp(m.numrows(),m.numcols()); int row,col; for(row=0; rowm,int posrow, int poscol) // checks if there's a space { if(m[posrow-1][poscol]==' ') { return true; } else { return false; } } bool checkright(apmatrixm,int posrow, int poscol) { if(m[posrow][poscol+1]==' ') { return true; } else { return false; } } bool checkleft(apmatrixm,int posrow, int poscol) { if(m[posrow][poscol-1]==' ') { return true; } else { return false; } } bool checkback(apmatrixm,int posrow, int poscol) { if(m[posrow+1][poscol]==' ') { return true; } else { return false; } }