86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
# from types import NoneType
|
|
from types import NoneType
|
|
import modules.estrategia as ModEstrategia
|
|
|
|
|
|
class Agente:
|
|
# traços de personalidade
|
|
personalidade: dict[str, float] | None = {
|
|
"amabilidade": 0.0,
|
|
"retaliacao": 0.0,
|
|
"perdao": 0.0,
|
|
"coerencia": 0.0,
|
|
"memoria": 0.0,
|
|
}
|
|
pontuacao: int = 0
|
|
estrategia: str = ""
|
|
id_agente: int = 0
|
|
# banco de memoria
|
|
banco_memoria: dict[int, list[int]] = {}
|
|
posicao: tuple[int, int] = (0, 0)
|
|
|
|
def __init__(self, estrategia: str = "", posicao: tuple[int, int] = (0, 0)):
|
|
# definir estrategia aleatoriamente
|
|
self.estrategia = estrategia
|
|
# definir personalidade com base na estratégia
|
|
self.personalidade = ModEstrategia.devolvePersonalidade(self.estrategia)
|
|
# identificador de agente
|
|
self.id_agente = id(self)
|
|
self.pontuacao = 0
|
|
self.posicao = posicao
|
|
|
|
def __str__(self):
|
|
return f"Dados Agente ({self.id_agente})\n \
|
|
\testrategia: {self.estrategia}\n \
|
|
\t\tpersonalidade: {self.personalidade}\n \
|
|
\tpontução: {self.pontuacao}"
|
|
|
|
def amabilidade(self) -> float | None:
|
|
if isinstance(self.personalidade, NoneType):
|
|
return None
|
|
return self.personalidade["amabilidade"]
|
|
|
|
def retaliacao(self) -> float | None:
|
|
if isinstance(self.personalidade, NoneType):
|
|
return None
|
|
return self.personalidade["retaliacao"]
|
|
|
|
def perdao(self) -> float | None:
|
|
if isinstance(self.personalidade, NoneType):
|
|
return None
|
|
return self.personalidade["perdao"]
|
|
|
|
def coerencia(self) -> float | None:
|
|
if isinstance(self.personalidade, NoneType):
|
|
return None
|
|
return self.personalidade["coerencia"]
|
|
|
|
def memoria(self) -> float | None:
|
|
if isinstance(self.personalidade, NoneType):
|
|
return None
|
|
return self.personalidade["memoria"]
|
|
|
|
def vizinhanca(self) -> list[tuple[int, int]]:
|
|
vizinhanca: list[tuple[int, int]] = []
|
|
# devolver coordenadas das posiçoes relativas à posicao actual
|
|
# -1, -1
|
|
vizinhanca.append((self.posicao[0] - 1, self.posicao[1] - 1))
|
|
# 0, -1
|
|
vizinhanca.append((self.posicao[0], self.posicao[1] - 1))
|
|
# +1, -1
|
|
vizinhanca.append((self.posicao[0] + 1, self.posicao[1] - 1))
|
|
# -1, 0
|
|
vizinhanca.append((self.posicao[0] - 1, self.posicao[1]))
|
|
# +1, 0
|
|
vizinhanca.append((self.posicao[0] + 1, self.posicao[1]))
|
|
# -1, +1
|
|
vizinhanca.append((self.posicao[0] - 1, self.posicao[1] + 1))
|
|
# 0, +1
|
|
vizinhanca.append((self.posicao[0], self.posicao[1] + 1))
|
|
# +1, +1
|
|
vizinhanca.append((self.posicao[0] + 1, self.posicao[1] + 1))
|
|
return vizinhanca
|
|
|
|
def cor(self) -> tuple[int, int, int, int]:
|
|
return (0, 0, 0, 0)
|