VirtualRobot::VirtualRobot(VirtualMaze* virtualMaze) { // create the robot robot = robot_create(0, 0); // bind the robot maze map to the virtualmaze virtualMaze->bindRobotMap(&robot.em.mazeMap); int blockWidthPX = VirtualMaze::getBlockWidthPX(); int x = robot.pos.x * blockWidthPX + blockWidthPX/2 - ROBOT_SIZE_PX/2; int y = robot.pos.y * blockWidthPX + blockWidthPX/2 - ROBOT_SIZE_PX/2; this->rectangle = new Rectangle(x, y, ROBOT_SIZE_PX, ROBOT_SIZE_PX); // save the pointer to the virtual maze this->virtualMaze = virtualMaze; }
int main(int argc, char *argv[]) { int width, height; int x, y, newx, newy, lost; char dir; robot *robbie, *remember; robbie = NULL; scanf("%d %d ", &width, &height); while(scanf("%d %d %c ", &x, &y, &dir) == 3) { lost = 0; remember = robbie; robbie = robot_create(x, y, dir); robbie->memory = remember; /* use x for other propurse */ while((x = getchar()) != EOF && x != '\n') { if(lost) continue; switch(x) { case 'F': newx = robbie->x + op[robbie->dir][0]; newy = robbie->y + op[robbie->dir][1]; if( (unsigned int)newx > width || (unsigned int)newy > height ) { remember = robbie->memory; while(remember) { if ( remember->x == robbie->x && remember->y == robbie->y ) break; remember = remember->memory; } if(!remember) lost = 1; } else { robbie->x = newx; robbie->y = newy; } break; case 'L': robbie->dir--; if(robbie->dir < 0) robbie->dir += 4; break; case 'R': robbie->dir++; if(robbie->dir >= 4) robbie->dir -= 4; break; } } switch(robbie->dir) { case NORTH: dir = 'N'; break; case EAST: dir = 'E'; break; case SOUTH: dir = 'S'; break; case WEST: dir = 'W'; break; } printf("%d %d %c%s\n", robbie->x, robbie->y, dir, lost ? " LOST" : ""); } while(robbie) { remember = robbie; robbie = robbie->memory; free(remember); } remember = NULL; return 0; }