Files
game_theory_of_life/modules/estrategia.py
T

56 lines
1.6 KiB
Python

# definição de classe Estrategia
from enum import Enum
import json
import os
from types import NoneType
from hashlib import sha256
import random
class TiposEstrategia(Enum):
ALEATORIO = 0
NEUTRO = 1
TIT4TAT = 2
VINGATIVO = 3
LUNATICO = 4
# lista de estratégias. cada entrada é um dicionário com nome de estratégia
# e respectivos tracos de personalidade
lista_estrategias: dict[str, dict[str, float]] = {}
def carregarFicheirosEstrategias(pasta_estrategias: str) -> None:
lista_ficheiros: list[str] = os.listdir(pasta_estrategias)
for ficheiro_json in lista_ficheiros:
with open(f"{pasta_estrategias}/{ficheiro_json}", "r") as ficheiro:
dados = json.load(ficheiro)
lista_estrategias.update(dados)
def listaNomesEstrategias() -> list[str]:
return list(lista_estrategias.keys())
def devolvePersonalidade(nome_strat: str | None) -> dict[str, float] | None:
if isinstance(nome_strat, NoneType):
raise TypeError("estratégia {nome_strat=} não é válida")
personalidade: dict[str, float] | None = lista_estrategias.get(nome_strat)
return personalidade
# função para gerar aleatoriamente valores para BigFive (valores decimais)
def gerarBigFive_aleatorio() -> dict[str, float]:
bigfive: dict = {}
for key in "OCEAN":
bigfive[key] = random.random()
return bigfive
# função para gerar assinatura sha256 com base nos valores BigFive passados
def gerarAssinaturaBigFive(bigfive: dict[str, float]) -> str:
h = sha256()
for idx, key in enumerate(bigfive):
h.update(str(bigfive[key] ** (len(bigfive) - idx)).encode())
return h.hexdigest()