Files
game_theory_of_life/modules/agente.py

86 lines
2.8 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]
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)