From fddca3735d01688ece9e18bfa50aff54f9b6d98a Mon Sep 17 00:00:00 2001 From: Luis Rodrigues Date: Tue, 24 Mar 2026 22:26:49 +0000 Subject: [PATCH] criar janelas com info sobre posicao seleccionada e com estatisticas do mapa --- modules/gui.py | 59 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/modules/gui.py b/modules/gui.py index 4ad02c3..eabbbc1 100644 --- a/modules/gui.py +++ b/modules/gui.py @@ -30,6 +30,10 @@ def devolveCor(agente: Agente) -> tuple[int, int, int, int]: return (0, 0, 0, 0) +def criarJanelaInfo(surface: pg.Surface) -> None: + pass + + def criarTabuleiro( surface: pg.Surface, mapa: Mapa, @@ -64,12 +68,12 @@ def popularMapa(mapa: Mapa) -> None: for pos_y in range(0, mapa.dimensao[0]): for pos_x in range(0, mapa.dimensao[1]): # escolher uma estrategia aleatoria - tmp_estrategia = random.choice(ModEstrategia.listaNomesEstrategias()) + estrategia = random.choice(ModEstrategia.listaNomesEstrategias()) # criar Agente com estrategia aleatoria e colocar na posicao y e x - mapa.mundo[pos_y][pos_x] = Agente(tmp_estrategia, (pos_x, pos_y)) + mapa.mundo[pos_y][pos_x] = Agente(estrategia, (pos_x, pos_y)) -def mostrarEstatisticas(mapa: Mapa | None) -> None: +def mostrarEstatisticas(mapa: Mapa | None) -> dict: if mapa is None: print("SEM MAPA!!") else: @@ -88,6 +92,7 @@ def mostrarEstatisticas(mapa: Mapa | None) -> None: f"{tipo_estrategia}: { (stats_estrategias[tipo_estrategia] / n_total_agentes) * 100:3.2f}" ) + return stats_estrategias def mostrarMapa(mapa: Mapa | None) -> None: @@ -120,7 +125,11 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): while running: if quadrado_seleccionado: pg.draw.rect( - janela, pg.Color(0, 0, 0), quadrado_seleccionado, 10, border_radius=10 + janela, + pg.Color(0, 0, 0, 0), + quadrado_seleccionado, + 2, + border_radius=10, ) for event in pg.event.get(): if event.type == pg.QUIT: @@ -163,7 +172,7 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): agente.personalidade=}" ) if event.type == pg.MOUSEBUTTONDOWN: - # botao 1 do rato clicado + # 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 = int( @@ -181,22 +190,58 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): tamanho_quadrado, tamanho_quadrado, ) + # limpar janela de info + janela_info = pg.Surface((200, 200)) + janela_info.fill(pg.Color(0, 0, 0, 0)) + janela.blit(janela_info, (janela.get_size()[0] - 200, 500)) if quadrado_novo == quadrado_seleccionado: quadrado_seleccionado = None else: quadrado_seleccionado = quadrado_novo + agente = mapa.posicao((pos_x, pos_y)) + print(f"{agente.posicao} com {agente.estrategia}") criarTabuleiro(janela, mapa) # criar surface para apresentar info + criarJanelaInfo(janela) # mostrar dimensão do mapa # mostrar borda da posicao seleccionado com o rato if quadrado_seleccionado: pg.draw.rect( - janela, pg.Color(0, 0, 0), quadrado_seleccionado, 10, border_radius=20 + janela, + pg.Color(0, 0, 0, 0), + quadrado_seleccionado, + 2, + border_radius=20, ) + # limpar janela de info + info_janela = pg.Surface((200, 200)) + info_janela.fill(pg.Color(0, 0, 0, 0)) + janela.blit(info_janela, (janela.get_size()[0] - 200, 500)) + # mostrar informação sobre posicao seleccionada + font = pg.font.Font(None, 20) + info_posicao = font.render( + f"{mapa.posicao((pos_x, pos_y)).estrategia}@{(pos_x, pos_y)}", + False, + pg.Color(255, 255, 255, 0), + ) + janela.blit(info_posicao, (janela.get_size()[0] - 200, 500)) # mostrar numero de iteração actual # mostrar estatisticas - # mostrar info de quadrado seleccionado (se algum) + janela_stats = pg.Surface((200, 200)) + janela_stats.fill(pg.Color(0, 0, 0, 0)) + janela.blit(janela_stats, (janela.get_size()[0] - 200, 10)) + font = pg.font.Font(None, 20) + dict_estrat = mostrarEstatisticas(mapa) + n_linhas = 0 + for strat in dict_estrat: + strat_label = font.render( + f"{strat}: {(dict_estrat[strat] / mapa.dimensao[0] ** 2) * 100:3.2f}", + False, + pg.Color(255, 255, 255, 0), + ) + janela.blit(strat_label, (janela.get_size()[0] - 200, 10 + (30 * n_linhas))) + n_linhas += 1 pg.display.flip() clock.tick(60)