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;
}
Exemple #2
0
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;
}