예제 #1
0
	def toImage(self):
		image = self.walls.toImage()

		hero_position = self.hero.getPosition()
		hero_direction = self.hero.getDirection()

		hero_next_cell = hero_position + direction.toVector(hero_direction)

		hero_color = [1,0,0]

		if not self.walls.exists(hero_next_cell):
			hero_facing_color = [0.5,0,0]
		else:
			hero_facing_color = [0.5,0.7,0.7]

		try:
			image[hero_position.y,hero_position.x] = hero_color
			image[hero_next_cell.y,hero_next_cell.x] = hero_facing_color
		except IndexError:
			a=1

		list_not_known_positions = self.known_cells.toList(False)

		for y,x in list_not_known_positions:
			image[y,x][2] += 1
			image[y,x] /= 2.0

		if self.goal_position != None:
			try:
				image[self.goal_position.y,self.goal_position.x] = [0.8,0.4,0.1]
			except IndexError:
				a=1

		return image
예제 #2
0
    def ackSensor(self, sensor_readings):
        hero_position = self.hero.getPosition()

        true_readings = {}
        for sensor_direction in sensor_readings:
            true_direction = direction.changeReferential(sensor_direction, direction.NORTH)
            true_readings[true_direction] = sensor_readings[sensor_direction]

        for direc in true_readings:
            position_to_ack = hero_position + direction.toVector(direc)
            self.known_cells.setValue(position_to_ack, True)
            self.known_maze.setValue(position_to_ack, true_readings[direc])
def getZumyPositionCamera(game):
	PROBABILITY_TO_GET_DIFFERENT_READING = 0.1
	if random.random() < PROBABILITY_TO_GET_DIFFERENT_READING:
		candidate_positions = []
		for direct in direction.DIRECTIONS:
			new_position = game.getHero().getPosition() + direction.toVector(direct)
			if not game.walls.exists(new_position):
				candidate_positions.append(new_position)
		if len(candidate_positions)!= 0:
			return random.choice(candidate_positions)
		else:
			return game.getHero().getPosition()
	else:
		return game.getHero().getPosition()
def readSensor(game, direct):
	if direct == direction.NORTH:

		true_direction = direction.changeReferential(direct,game.hero.getDirection())
		position_to_check = game.hero.getPosition() + direction.toVector(true_direction)
		if game.walls.exists(position_to_check):
			return True
		else:
			return False

	elif direct == direction.EAST:

		true_direction = direction.changeReferential(direct,game.hero.getDirection())
		position_to_check = game.hero.getPosition() + direction.toVector(true_direction)
		if game.walls.exists(position_to_check):
			return True
		else:
			return False

	elif direct == direction.SOUTH:

		true_direction = direction.changeReferential(direct,game.hero.getDirection())
		position_to_check = game.hero.getPosition() + direction.toVector(true_direction)
		if game.walls.exists(position_to_check):
			return True
		else:
			return False

	elif direct == direction.WEST:

		true_direction = direction.changeReferential(direct,game.hero.getDirection())
		position_to_check = game.hero.getPosition() + direction.toVector(true_direction)
		if game.walls.exists(position_to_check):
			return True
		else:
			return False
예제 #5
0
	def costAction(self,hero_state,action_taken):
		if not isinstance(hero_state,hero.Hero):
			raise ValueError("Invalid hero state.")
		if action_taken not in action.ACTIONS:
			raise ValueError("Invalid action.")

		hero_next_state = hero_state.copy()
		hero_next_state.doAction(action_taken)

		hero_next_position = hero_next_state.getPosition()

		cost = 1
		for direct in direction.DIRECTIONS:
			check_pos = hero_next_position + direction.toVector(direct)
			if self.known_maze.exists(check_pos):
				cost += 5

		return cost
예제 #6
0
	def moveBackwards(self):
		self.position = self.position - direction.toVector(self.direction)
예제 #7
0
	def moveFoward(self):
		self.position = self.position + direction.toVector(self.direction)