# funções associadas a operações com o Mapa # import random # from modules import agente from modules.agente import Agente # import modules.estrategia as ModEstrategia class Mapa: """definição de classe Mapa, que descreve um mapa com dimensão 'dimensao'. a representação desse mapa fica guardado em 'mundo', que é uma lista de listas, e cada posição guarda um objecto 'Agente' """ dimensao: tuple[int, int] mundo: list[list[Agente]] id_mapa: int def __init__(self, dimensao: tuple[int, int]): self.mundo = [] self.dimensao = dimensao self.mundo = self.inicializar() self.id_mapa = id(self) def __str__(self): return f"Dados Mapa ({self.id_mapa})\n \ \tdimensao: {self.dimensao[0]} x {self.dimensao[1]}" def inicializar(self) -> list[list[Agente]]: # inicializar mundo for _ in range(0, self.dimensao[0]): mundo_tmp: list[Agente] = [] for _ in range(0, self.dimensao[1]): mundo_tmp.append(Agente()) self.mundo.append(mundo_tmp) return self.mundo def mostrar(self) -> None: # mostrar mundo m, n = 0, 0 for m in range(0, self.dimensao[0]): for n in range(0, self.dimensao[1]): print(f"{self.mundo[m][n]}", end="") print("") def posicao(self, posicao: tuple[int, int]) -> Agente: """devolver objecto que está na 'posicao'""" pos_x: int = posicao[0] pos_y: int = posicao[1] # aplicar wrap_around_map, desta forma tambem evitamos erros de dimensao if pos_x < 0: pos_x = self.dimensao[0] - 1 if pos_x >= self.dimensao[0]: pos_x = 0 if pos_y < 0: pos_y = self.dimensao[1] - 1 if pos_y >= self.dimensao[1]: pos_y = 0 return self.mundo[pos_x][pos_y]