diff --git a/main.cpp b/main.cpp index 18000b3..437e8c2 100644 --- a/main.cpp +++ b/main.cpp @@ -26,6 +26,8 @@ struct fill { void flood(struct maze*, struct mmstats*); void follow(struct maze maze, class mmstats mms); int* nextcell(int i, int j, int dir, int ndir[2]); +void updatepos(class mmstats* mms); +void locateWall(struct maze& maze); void flood(struct maze* maze, struct mmstats* mmstats) { int i, j; @@ -147,6 +149,67 @@ void updatepos(class mmstats* mms) { } } +void locateWall(struct maze* maze, class mmstats *mms) { + switch (mms->dir) { + case norte: + if(API::wallFront() && mms->y != 15) { + maze->hwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'n'); + } + if(API::wallLeft() && mms->x != 0){ + maze->vwalls[mms->x -1][mms->y] = 1; + API::setWall(mms->x -1, mms->y, 'e'); + } + if(API::wallRight() && mms->x != 15){ + maze->vwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'e'); + } + break; + case este: + if(API::wallFront() && mms->x != 15) { + maze->vwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'e'); + } + if(API::wallLeft() && mms->y != 15){ + maze->hwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'n'); + } + if(API::wallRight() && mms->y != 0){ + maze->hwalls[mms->x][mms->y -1] = 1; + API::setWall(mms->x, mms->y -1, 'n'); + } + break; + case sur: + if(API::wallFront() && mms->y != 0) { + maze->vwalls[mms->x][mms->y-1] = 1; + API::setWall(mms->x, mms->y-1, 'n'); + } + if(API::wallLeft() && mms->x != 15){ + maze->hwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'e'); + } + if(API::wallRight() && mms->x != 0){ + maze->hwalls[mms->x -1][mms->y] = 1; + API::setWall(mms->x -1, mms->y, 'e'); + } + break; + case oeste: + if(API::wallFront() && mms->x != 0) { + maze->vwalls[mms->x -1][mms->y] = 1; + API::setWall(mms->x -1, mms->y, 'e'); + } + if(API::wallLeft() && mms->y != 0){ + maze->hwalls[mms->x][mms->y -1] = 1; + API::setWall(mms->x, mms->y -1, 'n'); + } + if(API::wallRight() && mms->y != 0){ + maze->hwalls[mms->x][mms->y] = 1; + API::setWall(mms->x, mms->y, 'n'); + } + break; + } +} + int main(int argc, char* argv[]) { log("Running..."); @@ -157,6 +220,7 @@ int main(int argc, char* argv[]) { stats.y = 0; flood(&maze, &stats); + /* while (true) { follow(maze, &stats); API::moveForward(); @@ -169,21 +233,23 @@ int main(int argc, char* argv[]) { log(stats.y); log(""); } - /* + */ while (true) { if (!API::wallLeft()) { + locateWall(&maze, &stats); API::turnLeft(); stats.turn(left); } while (API::wallFront()) { + locateWall(&maze, &stats); API::turnRight(); stats.turn(right); } + locateWall(&maze, &stats); API::moveForward(); updatepos(&stats); log(stats.x); log(stats.y); log(""); } - */ }