From 36c4b5349e9dfd46aba19c8feb8c272b4bcc9b27 Mon Sep 17 00:00:00 2001 From: Luis Rodrigues Date: Tue, 24 Mar 2026 12:58:30 +0000 Subject: [PATCH] uso do rato para seleccionar e mostrar posicao no tabuleiro --- modules/gui.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/gui.py b/modules/gui.py index f54d0c1..fddc1ee 100644 --- a/modules/gui.py +++ b/modules/gui.py @@ -66,7 +66,7 @@ def popularMapa(mapa: Mapa) -> None: # escolher uma estrategia aleatoria tmp_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) + mapa.mundo[pos_y][pos_x] = Agente(tmp_estrategia, (pos_x, pos_y)) def mostrarEstatisticas(mapa: Mapa | None) -> None: @@ -115,8 +115,13 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): # cor1: tuple[int, int, int, int] = (255, 0, 0, 0) # cor2: tuple[int, int, int, int] = (0, 255, 0, 0) mostrarMapa(mapa) + quadrado_seleccionado: pg.Rect | None = None while running: + if quadrado_seleccionado: + pg.draw.rect( + janela, pg.Color(0, 0, 0), quadrado_seleccionado, 10, border_radius=10 + ) for event in pg.event.get(): if event.type == pg.QUIT: running = False @@ -137,8 +142,8 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): # correr proxima iteração com 'n' (next) if event.key == pg.K_n: ModInteraccoes.correrInteraccoesEntreAgentes(mapa) - # mostrar mapa no terminal com 'm' if event.key == pg.K_m: + # mostrar mapa no terminal com 'm' print("Mapa:") mostrarMapa(mapa) # gerar novo mapa e popular (fazer reset) com 'r' @@ -157,9 +162,39 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]): f"{id(agente)=}\n{agente.estrategia=}\n{ agente.personalidade=}" ) + if event.type == pg.MOUSEBUTTONDOWN: + # botao 1 do rato clicado + if pg.mouse.get_pressed(num_buttons=3)[0]: + pos_rato: tuple[int, int] = pg.mouse.get_pos() + tamanho_quadrado = int( + (janela.get_size()[1] - 20) / mapa.dimensao[0] + ) + pos_x = int((pos_rato[0] - 10) / tamanho_quadrado) + pos_y = int((pos_rato[1] - 10) / tamanho_quadrado) + if ( + pos_x < 0 + or pos_x >= mapa.dimensao[0] + or pos_y < 0 + or pos_y >= mapa.dimensao[1] + ): + continue + quadrado_seleccionado = pg.Rect( + (pos_x * tamanho_quadrado) + 10, + (pos_y * tamanho_quadrado) + 10, + tamanho_quadrado, + tamanho_quadrado, + ) + # agente = mapa.posicao((pos_x, pos_y)) + # print(f"{id(agente)}@{agente.posicao}") + # print(f"{agente.estrategia}") criarTabuleiro(janela, mapa) # criar surface para apresentar info + # 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=10 + ) # mostrar numero de iteração actual # mostrar dimensão do mapa # mostrar estatisticas