agnosticar classe 'Mapa' dos objectos que preenchem o mapa

This commit is contained in:
2024-09-13 10:17:54 +01:00
parent d55d33b35e
commit 6ae15d3002

View File

@ -7,26 +7,30 @@ import modules.estrategia as ModEstrategia
class Mapa: 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] dimensao: tuple[int, int]
mundo: list mundo: list
id_mapa: int
def __init__(self, dimensao: tuple[int, int], aleatorio: bool = False): def __init__(self, dimensao: tuple[int, int], aleatorio: bool = False):
self.mundo = [] self.mundo = []
self.dimensao = dimensao self.dimensao = dimensao
self.mundo = self.inicializar(aleatorio=aleatorio) self.mundo = self.inicializar()
self.id_mapa = id(self) self.id_mapa = id(self)
def __str__(self): def __str__(self):
return f'Dados Mapa ({self.id_mapa})\n \ return f'Dados Mapa ({self.id_mapa})\n \
\tdimensao: {self.dimensao[0]} x {self.dimensao[1]}' \tdimensao: {self.dimensao[0]} x {self.dimensao[1]}'
def inicializar(self, aleatorio: bool = False) -> list: def inicializar(self) -> list:
nomes_estrategias = ModEstrategia.listaNomesEstrategias()
# inicializar mundo # inicializar mundo
for _ in range(0, self.dimensao[0]): for _ in range(0, self.dimensao[0]):
mundo_tmp: list = [] mundo_tmp: list = []
for _ in range(0, self.dimensao[1]): for _ in range(0, self.dimensao[1]):
mundo_tmp.append(Agente(random.choice(nomes_estrategias))) mundo_tmp.append(None)
self.mundo.append(mundo_tmp) self.mundo.append(mundo_tmp)
return self.mundo return self.mundo
@ -35,10 +39,12 @@ class Mapa:
m, n = 0, 0 m, n = 0, 0
for m in range(0, self.dimensao[0]): for m in range(0, self.dimensao[0]):
for n in range(0, self.dimensao[1]): for n in range(0, self.dimensao[1]):
print(f'{self.mundo[m][n].pontuacao:2} ', end='') print(f'{self.mundo[m][n]}', end='')
print('') print('')
def posicao(self, posicao: tuple[int, int]) -> Agente | None: def posicao(self, posicao: tuple[int, int]) -> Agente | None:
''' devolver objecto que está na 'posicao'
'''
# verificar limites # verificar limites
if posicao[0] > self.dimensao[0] or posicao[0] < 0: if posicao[0] > self.dimensao[0] or posicao[0] < 0:
return None return None