adicionar parametro 'borda' e 'border_radius' ao metodo 'desenhar()' da classe 'Frame'

This commit is contained in:
2026-03-31 17:50:44 +01:00
parent 7dca69aba4
commit bbc2cc2f7f

View File

@ -2,7 +2,6 @@ import sys
import random import random
from types import NoneType from types import NoneType
import pygame as pg import pygame as pg
from modules import mapa
from modules.agente import Agente from modules.agente import Agente
from modules.mapa import Mapa from modules.mapa import Mapa
import modules.estrategia as ModEstrategia import modules.estrategia as ModEstrategia
@ -11,10 +10,11 @@ import modules.interaccoes as ModInteraccoes
# 0 para desactivar flags # 0 para desactivar flags
# pg.FULLSCREEN para fullscreen mode # pg.FULLSCREEN para fullscreen mode
flags = pg.FULLSCREEN flags = 0 # pg.FULLSCREEN
sep_janelas: int = 10 sep_janelas: int = 10
# classe Frame para gerir diferentes frames dentro da janela principal
class Frame: class Frame:
def __init__( def __init__(
self, self,
@ -30,9 +30,9 @@ class Frame:
def rect(self) -> pg.Rect: def rect(self) -> pg.Rect:
return pg.Rect(self.posicao, self.tamanho) return pg.Rect(self.posicao, self.tamanho)
def desenhar(self, dest: pg.Surface) -> None: def desenhar(self, dest: pg.Surface, borda: int = 0, border_radius=0) -> None:
pg.draw.rect(dest, pg.Color(0, 0, 0, 0), self.rect()) pg.draw.rect(dest, pg.Color(0, 0, 0, 0), self.rect())
pg.draw.rect(dest, self.cor, self.rect(), 5, border_radius=20) pg.draw.rect(dest, self.cor, self.rect(), borda, border_radius=border_radius)
def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]: def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]:
@ -42,7 +42,7 @@ def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]:
janela_app.get_size()[1] - (sep_janelas * 2), janela_app.get_size()[1] - (sep_janelas * 2),
), ),
(sep_janelas, sep_janelas), (sep_janelas, sep_janelas),
pg.Color(255, 255, 0, 0), pg.Color(255, 255, 255, 0),
) )
frame_info_mapa = Frame( frame_info_mapa = Frame(
( (
@ -50,7 +50,7 @@ def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]:
(janela_app.get_size()[1] - (sep_janelas * 2)) // 2, (janela_app.get_size()[1] - (sep_janelas * 2)) // 2,
), ),
(frame_mapa.tamanho[0] + (sep_janelas * 2), sep_janelas), (frame_mapa.tamanho[0] + (sep_janelas * 2), sep_janelas),
pg.Color(0, 0, 255, 0), pg.Color(255, 255, 255, 0),
) )
frame_info_pos = Frame( frame_info_pos = Frame(
@ -62,7 +62,7 @@ def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]:
frame_mapa.tamanho[0] + (sep_janelas * 2), frame_mapa.tamanho[0] + (sep_janelas * 2),
frame_info_mapa.tamanho[1] + (sep_janelas * 2), frame_info_mapa.tamanho[1] + (sep_janelas * 2),
), ),
pg.Color(0, 255, 0, 0), pg.Color(255, 255, 255, 0),
) )
frame_accoes = Frame( frame_accoes = Frame(
( (
@ -76,7 +76,7 @@ def criarFrames(janela_app: pg.Surface) -> tuple[Frame, Frame, Frame, Frame]:
frame_mapa.tamanho[0] + 20, frame_mapa.tamanho[0] + 20,
frame_info_mapa.tamanho[1] + frame_info_pos.tamanho[1] + 30, frame_info_mapa.tamanho[1] + frame_info_pos.tamanho[1] + 30,
), ),
pg.Color(255, 0, 0, 0), pg.Color(255, 255, 255, 0),
) )
return (frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes) return (frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes)
@ -105,10 +105,7 @@ def criarTabuleiro(
dimensao_tabuleiro: tuple[int, int] = mapa.dimensao dimensao_tabuleiro: tuple[int, int] = mapa.dimensao
dimensoes_surface_principal: tuple[int, int] = surface.get_size() dimensoes_surface_principal: tuple[int, int] = surface.get_size()
max_altura: int = int((dimensoes_surface_principal[1] - 20) / dimensao_tabuleiro[0]) max_altura: int = int((dimensoes_surface_principal[1] - 20) / dimensao_tabuleiro[0])
# max_largura: int = int( tamanho_quadrado: int = max_altura
# (dimensoes_surface_principal[0] - 20) / dimensao_tabuleiro[1]
# )
tamanho_quadrado: int = max_altura # min([max_altura, max_largura])
cor_quadrado: tuple[int, int, int, int] cor_quadrado: tuple[int, int, int, int]
for pos_y in range(0, dimensao_tabuleiro[0]): for pos_y in range(0, dimensao_tabuleiro[0]):
@ -176,7 +173,7 @@ def mostrarMapa(mapa: Mapa | None) -> None:
def actualizarEstatisticas( def actualizarEstatisticas(
janela: pg.Surface, frame_info_mapa: Frame, mapa: Mapa janela: pg.Surface, frame_info_mapa: Frame, mapa: Mapa
) -> None: ) -> None:
frame_info_mapa.desenhar(janela) frame_info_mapa.desenhar(janela, 5, 10)
font = pg.font.Font(None, 20) font = pg.font.Font(None, 20)
dict_estrat = prepararEstatistica(mapa) dict_estrat = prepararEstatistica(mapa)
n_linhas = 0 n_linhas = 0
@ -200,7 +197,7 @@ def actualizarInfoPos(
janela: pg.Surface, frame: Frame, mapa: Mapa, pos: tuple[int, int] janela: pg.Surface, frame: Frame, mapa: Mapa, pos: tuple[int, int]
) -> None: ) -> None:
# limpar frame_info_mapa # limpar frame_info_mapa
frame.desenhar(janela) frame.desenhar(janela, 5, 10)
# mostrar informação sobre posicao seleccionada # mostrar informação sobre posicao seleccionada
font = pg.font.Font(None, 20) font = pg.font.Font(None, 20)
info_posicao = font.render( info_posicao = font.render(
@ -229,6 +226,11 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]):
quadrado_seleccionado: pg.Rect | None = None quadrado_seleccionado: pg.Rect | None = None
# criar frames # criar frames
frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes = criarFrames(janela) frame_mapa, frame_info_mapa, frame_info_pos, frame_accoes = criarFrames(janela)
# mostrar frames no janela principal
frame_mapa.desenhar(janela)
frame_info_mapa.desenhar(janela, 5, 10)
frame_info_pos.desenhar(janela, 5, 10)
frame_accoes.desenhar(janela, 5, 10)
while running: while running:
if quadrado_seleccionado: if quadrado_seleccionado:
@ -281,9 +283,18 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]):
) )
if quadrado_novo == quadrado_seleccionado: if quadrado_novo == quadrado_seleccionado:
quadrado_seleccionado = None quadrado_seleccionado = None
frame_info_pos.desenhar(janela) frame_info_pos.desenhar(janela, 5, 10)
else: else:
quadrado_seleccionado = quadrado_novo quadrado_seleccionado = quadrado_novo
pg.draw.rect(
janela,
pg.Color(0, 0, 0, 0),
quadrado_seleccionado,
2,
border_radius=20,
)
# actualizar info na frame_info_pos
actualizarInfoPos(janela, frame_info_pos, mapa, (pos_x, pos_y))
agente = mapa.posicao((pos_x, pos_y)) agente = mapa.posicao((pos_x, pos_y))
print(f"{agente.posicao} com {agente.estrategia}") print(f"{agente.posicao} com {agente.estrategia}")
@ -294,20 +305,8 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]):
# mostrar dimensão do mapa # mostrar dimensão do mapa
# mostrar estatisticas # mostrar estatisticas
actualizarEstatisticas(janela, frame_info_mapa, mapa) actualizarEstatisticas(janela, frame_info_mapa, mapa)
# mostrar borda da posicao seleccionado com o rato # mostrar frame_accoes
frame_info_pos.desenhar(janela) frame_accoes.desenhar(janela, 5, 10)
if quadrado_seleccionado:
pg.draw.rect(
janela,
pg.Color(0, 0, 0, 0),
quadrado_seleccionado,
2,
border_radius=20,
)
# actualizar info na frame_info_pos
actualizarInfoPos(janela, frame_info_pos, mapa, (pos_x, pos_y))
# mostrar frame accoes
frame_accoes.desenhar(janela)
pg.display.flip() pg.display.flip()
clock.tick(60) clock.tick(60)