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
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
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
def moveBackwards(self): self.position = self.position - direction.toVector(self.direction)
def moveFoward(self): self.position = self.position + direction.toVector(self.direction)