diff --git a/modules/agente.py b/modules/agente.py index 198d2ea..8efefd1 100644 --- a/modules/agente.py +++ b/modules/agente.py @@ -19,11 +19,11 @@ class Agente: banco_memoria: dict[int, list[int]] = {} posicao: tuple[int, int] = (0, 0) - def __init__(self, estrategia: str = "", posicao: tuple[int, int] = (0, 0)): + def __init__(self, strat: str = "", posicao: tuple[int, int] = (0, 0)): # definir estrategia aleatoriamente - self.estrategia = estrategia + self.estrategia = strat # definir personalidade com base na estratégia - self.personalidade = ModEstrategia.devolvePersonalidade(self.estrategia) + self.personalidade = ModEstrategia.devolvePersonalidade(strat) # identificador de agente self.id_agente = id(self) self.pontuacao = 0 diff --git a/modules/estrategia.py b/modules/estrategia.py index 225c46f..b3aa966 100644 --- a/modules/estrategia.py +++ b/modules/estrategia.py @@ -30,8 +30,8 @@ def listaNomesEstrategias() -> list[str]: return list(lista_estrategias.keys()) -def devolvePersonalidade(nome_estrategia: str | None) -> dict[str, float] | None: - if isinstance(nome_estrategia, NoneType): - raise ValueError("estratégia {nome_estrategia=} não é válida") - personalidade: dict[str, float] | None = lista_estrategias.get(nome_estrategia) +def devolvePersonalidade(nome_strat: str | None) -> dict[str, float] | None: + if isinstance(nome_strat, NoneType): + raise ValueError("estratégia {nome_strat=} não é válida") + personalidade: dict[str, float] | None = lista_estrategias.get(nome_strat) return personalidade diff --git a/modules/gui.py b/modules/gui.py index 387f9e0..c9cdf04 100644 --- a/modules/gui.py +++ b/modules/gui.py @@ -30,13 +30,13 @@ class Frame: def rect(self) -> pg.Rect: return pg.Rect(self.posicao, self.tamanho) - def desenhar(self, dest: pg.Surface, borda: int = 0, border_radius=0) -> None: + def desenhar(self, dest: pg.Surface, borda: int = 0, radius=0) -> None: pg.draw.rect(dest, pg.Color(0, 0, 0, 0), self.rect()) - pg.draw.rect(dest, self.cor, self.rect(), borda, border_radius=border_radius) + pg.draw.rect(dest, self.cor, self.rect(), borda, border_radius=radius) def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]: - frame_mapa = Frame( + frm_mapa = Frame( ( janela_app.get_size()[1] - (sep_janelas) * 2, janela_app.get_size()[1] - (sep_janelas * 2), @@ -44,41 +44,40 @@ def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]: (sep_janelas, sep_janelas), pg.Color(0, 0, 0, 0), ) - frame_info_mapa = Frame( + frm_info_mapa = Frame( ( - janela_app.get_size()[0] - frame_mapa.tamanho[0] - (sep_janelas * 3), + janela_app.get_size()[0] - frm_mapa.tamanho[0] - (sep_janelas * 3), (janela_app.get_size()[1] - (sep_janelas * 2)) // 2, ), - (frame_mapa.tamanho[0] + (sep_janelas * 2), sep_janelas), + (frm_mapa.tamanho[0] + (sep_janelas * 2), sep_janelas), pg.Color(255, 255, 255, 0), ) - - frame_info_pos = Frame( + frm_info_pos = Frame( ( - janela_app.get_size()[0] - frame_mapa.tamanho[0] - (sep_janelas * 3), - ((frame_info_mapa.tamanho[1] * 2) // 3) - sep_janelas, + janela_app.get_size()[0] - frm_mapa.tamanho[0] - (sep_janelas * 3), + ((frm_info_mapa.tamanho[1] * 2) // 3) - sep_janelas, ), ( - frame_mapa.tamanho[0] + (sep_janelas * 2), - frame_info_mapa.tamanho[1] + (sep_janelas * 2), + frm_mapa.tamanho[0] + (sep_janelas * 2), + frm_info_mapa.tamanho[1] + (sep_janelas * 2), ), pg.Color(255, 255, 255, 0), ) - frame_accoes = Frame( + frm_accoes = Frame( ( - janela_app.get_size()[0] - frame_mapa.tamanho[0] - (sep_janelas * 3), + janela_app.get_size()[0] - frm_mapa.tamanho[0] - (sep_janelas * 3), janela_app.get_size()[1] - - frame_info_mapa.tamanho[1] - - frame_info_pos.tamanho[1] + - frm_info_mapa.tamanho[1] + - frm_info_pos.tamanho[1] - (sep_janelas * 4), ), ( - frame_mapa.tamanho[0] + 20, - frame_info_mapa.tamanho[1] + frame_info_pos.tamanho[1] + 30, + frm_mapa.tamanho[0] + 20, + frm_info_mapa.tamanho[1] + frm_info_pos.tamanho[1] + 30, ), pg.Color(255, 255, 255, 0), ) - return (frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes) + return (frm_mapa, frm_info_mapa, frm_info_pos, frm_accoes) def devolveCor(agente: Agente) -> tuple[int, int, int, int]: @@ -128,7 +127,6 @@ def prepararEstatistica(mapa: Mapa | None) -> dict[str, int]: else: stats_estrategias: dict[str, int] = {} n_total_agentes: int = 0 - # print("estatisticas mapa:") for tipo_estrategia in ModEstrategia.lista_estrategias: stats_estrategias[tipo_estrategia] = 0 for pos_y in range(0, mapa.dimensao[0]): @@ -136,11 +134,6 @@ def prepararEstatistica(mapa: Mapa | None) -> dict[str, int]: tmp_agente = mapa.posicao((pos_y, pos_x)) stats_estrategias[tmp_agente.estrategia] += 1 n_total_agentes += 1 - # for tipo_estrategia in stats_estrategias: - # print( - # f"{tipo_estrategia}: { - # (stats_estrategias[tipo_estrategia] / n_total_agentes) * 100:3.2f}" - # ) return stats_estrategias return {} @@ -158,24 +151,22 @@ def mostrarMapa(mapa: Mapa | None) -> None: print("") -def actualizarEstatisticas( - janela: pg.Surface, frame_info_mapa: Frame, mapa: Mapa -) -> None: - frame_info_mapa.desenhar(janela, 5, 10) +def actualizarEstatisticas(janela: pg.Surface, frame: Frame, mapa: Mapa) -> None: + frame.desenhar(janela, 5, 10) font = pg.font.Font(None, 20) - dict_estrat = prepararEstatistica(mapa) + strats: dict[str, int] = prepararEstatistica(mapa) n_linhas = 0 - for strat in dict_estrat: + for strat in strats: strat_label = font.render( - f"{strat}: {(dict_estrat[strat] / mapa.dimensao[0] ** 2) * 100:3.2f}", + f"{strat}: {(strats[strat] / mapa.dimensao[0] ** 2) * 100:3.2f}", False, pg.Color(255, 255, 255, 0), ) janela.blit( strat_label, ( - frame_info_mapa.posicao[0] + (sep_janelas * 2), - frame_info_mapa.posicao[1] + (sep_janelas * 2) + (30 * n_linhas), + frame.posicao[0] + (sep_janelas * 2), + frame.posicao[1] + (sep_janelas * 2) + (30 * n_linhas), ), ) n_linhas += 1 @@ -213,12 +204,12 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): running: bool = True quadrado_seleccionado: pg.Rect | None = None # criar frames - frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes = criarFrames(janela) + frm_mapa, frm_info_mapa, frm_info_pos, frm_accoes = criarFrames(janela) # mostrar frames no janela principal - frame_mapa.desenhar(janela, 5, 10) - frame_info_mapa.desenhar(janela, 5, 10) - frame_info_pos.desenhar(janela, 5, 10) - frame_accoes.desenhar(janela, 5, 10) + frm_mapa.desenhar(janela, 5, 10) + frm_info_mapa.desenhar(janela, 5, 10) + frm_info_pos.desenhar(janela, 5, 10) + frm_accoes.desenhar(janela, 5, 10) while running: if quadrado_seleccionado: @@ -253,30 +244,31 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): # botao 1 do rato clicado, seleccionar ou tirar selecao if pg.mouse.get_pressed(num_buttons=3)[0]: pos_rato: tuple[int, int] = pg.mouse.get_pos() - tamanho_quadrado = (frame_mapa.tamanho[1] - 20) // mapa.dimensao[0] + quadrado = (frm_mapa.tamanho[1] - 20) // mapa.dimensao[0] if pos_rato[0] < 10 or pos_rato[1] < 10: continue - pos_x = (pos_rato[0] - 10) // tamanho_quadrado - pos_y = (pos_rato[1] - 10) // tamanho_quadrado + pos_x = (pos_rato[0] - 10) // quadrado + pos_y = (pos_rato[1] - 10) // quadrado if pos_x >= mapa.dimensao[0] or pos_y >= mapa.dimensao[1]: continue quadrado_novo = pg.Rect( - (pos_x * tamanho_quadrado) + sep_janelas, - (pos_y * tamanho_quadrado) + sep_janelas, - tamanho_quadrado, - tamanho_quadrado, + (pos_x * quadrado) + sep_janelas, + (pos_y * quadrado) + sep_janelas, + quadrado, + quadrado, ) if quadrado_novo == quadrado_seleccionado: quadrado_seleccionado = None - frame_info_pos.desenhar(janela, 5, 10) + frm_info_pos.desenhar(janela, 5, 10) else: quadrado_seleccionado = quadrado_novo # actualizar info na frame_info_pos - actualizarInfoPos(janela, frame_info_pos, mapa, (pos_x, pos_y)) + pos: tuple[int, int] = (pos_x, pos_y) + actualizarInfoPos(janela, frm_info_pos, mapa, pos) # desenhar mapa - frame_mapa.desenhar(janela) - criarMapa(janela, frame_mapa, mapa) + frm_mapa.desenhar(janela) + criarMapa(janela, frm_mapa, mapa) # criarTabuleiro(janela, mapa) # se quadrado estiver seleccionado, mostrá-lo if quadrado_seleccionado: @@ -291,7 +283,7 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): # mostrar numero de iteração actual # mostrar dimensão do mapa # mostrar estatisticas - actualizarEstatisticas(janela, frame_info_mapa, mapa) + actualizarEstatisticas(janela, frm_info_mapa, mapa) # mostrar frame_accoes pg.display.flip() clock.tick(60)