criar janelas com info sobre posicao seleccionada e com estatisticas do mapa

This commit is contained in:
2026-03-24 22:26:49 +00:00
parent a41ef846e2
commit fddca3735d

View File

@ -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)