refactorar codigo para reduzir tamanho de linhas
This commit is contained in:
@ -19,11 +19,11 @@ class Agente:
|
|||||||
banco_memoria: dict[int, list[int]] = {}
|
banco_memoria: dict[int, list[int]] = {}
|
||||||
posicao: tuple[int, int] = (0, 0)
|
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
|
# definir estrategia aleatoriamente
|
||||||
self.estrategia = estrategia
|
self.estrategia = strat
|
||||||
# definir personalidade com base na estratégia
|
# definir personalidade com base na estratégia
|
||||||
self.personalidade = ModEstrategia.devolvePersonalidade(self.estrategia)
|
self.personalidade = ModEstrategia.devolvePersonalidade(strat)
|
||||||
# identificador de agente
|
# identificador de agente
|
||||||
self.id_agente = id(self)
|
self.id_agente = id(self)
|
||||||
self.pontuacao = 0
|
self.pontuacao = 0
|
||||||
|
|||||||
@ -30,8 +30,8 @@ def listaNomesEstrategias() -> list[str]:
|
|||||||
return list(lista_estrategias.keys())
|
return list(lista_estrategias.keys())
|
||||||
|
|
||||||
|
|
||||||
def devolvePersonalidade(nome_estrategia: str | None) -> dict[str, float] | None:
|
def devolvePersonalidade(nome_strat: str | None) -> dict[str, float] | None:
|
||||||
if isinstance(nome_estrategia, NoneType):
|
if isinstance(nome_strat, NoneType):
|
||||||
raise ValueError("estratégia {nome_estrategia=} não é válida")
|
raise ValueError("estratégia {nome_strat=} não é válida")
|
||||||
personalidade: dict[str, float] | None = lista_estrategias.get(nome_estrategia)
|
personalidade: dict[str, float] | None = lista_estrategias.get(nome_strat)
|
||||||
return personalidade
|
return personalidade
|
||||||
|
|||||||
@ -30,13 +30,13 @@ 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, 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, 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]:
|
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,
|
||||||
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),
|
(sep_janelas, sep_janelas),
|
||||||
pg.Color(0, 0, 0, 0),
|
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,
|
(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),
|
pg.Color(255, 255, 255, 0),
|
||||||
)
|
)
|
||||||
|
frm_info_pos = Frame(
|
||||||
frame_info_pos = 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),
|
||||||
((frame_info_mapa.tamanho[1] * 2) // 3) - sep_janelas,
|
((frm_info_mapa.tamanho[1] * 2) // 3) - sep_janelas,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
frame_mapa.tamanho[0] + (sep_janelas * 2),
|
frm_mapa.tamanho[0] + (sep_janelas * 2),
|
||||||
frame_info_mapa.tamanho[1] + (sep_janelas * 2),
|
frm_info_mapa.tamanho[1] + (sep_janelas * 2),
|
||||||
),
|
),
|
||||||
pg.Color(255, 255, 255, 0),
|
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]
|
janela_app.get_size()[1]
|
||||||
- frame_info_mapa.tamanho[1]
|
- frm_info_mapa.tamanho[1]
|
||||||
- frame_info_pos.tamanho[1]
|
- frm_info_pos.tamanho[1]
|
||||||
- (sep_janelas * 4),
|
- (sep_janelas * 4),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
frame_mapa.tamanho[0] + 20,
|
frm_mapa.tamanho[0] + 20,
|
||||||
frame_info_mapa.tamanho[1] + frame_info_pos.tamanho[1] + 30,
|
frm_info_mapa.tamanho[1] + frm_info_pos.tamanho[1] + 30,
|
||||||
),
|
),
|
||||||
pg.Color(255, 255, 255, 0),
|
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]:
|
def devolveCor(agente: Agente) -> tuple[int, int, int, int]:
|
||||||
@ -128,7 +127,6 @@ def prepararEstatistica(mapa: Mapa | None) -> dict[str, int]:
|
|||||||
else:
|
else:
|
||||||
stats_estrategias: dict[str, int] = {}
|
stats_estrategias: dict[str, int] = {}
|
||||||
n_total_agentes: int = 0
|
n_total_agentes: int = 0
|
||||||
# print("estatisticas mapa:")
|
|
||||||
for tipo_estrategia in ModEstrategia.lista_estrategias:
|
for tipo_estrategia in ModEstrategia.lista_estrategias:
|
||||||
stats_estrategias[tipo_estrategia] = 0
|
stats_estrategias[tipo_estrategia] = 0
|
||||||
for pos_y in range(0, mapa.dimensao[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))
|
tmp_agente = mapa.posicao((pos_y, pos_x))
|
||||||
stats_estrategias[tmp_agente.estrategia] += 1
|
stats_estrategias[tmp_agente.estrategia] += 1
|
||||||
n_total_agentes += 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 stats_estrategias
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
@ -158,24 +151,22 @@ def mostrarMapa(mapa: Mapa | None) -> None:
|
|||||||
print("")
|
print("")
|
||||||
|
|
||||||
|
|
||||||
def actualizarEstatisticas(
|
def actualizarEstatisticas(janela: pg.Surface, frame: Frame, mapa: Mapa) -> None:
|
||||||
janela: pg.Surface, frame_info_mapa: Frame, mapa: Mapa
|
frame.desenhar(janela, 5, 10)
|
||||||
) -> None:
|
|
||||||
frame_info_mapa.desenhar(janela, 5, 10)
|
|
||||||
font = pg.font.Font(None, 20)
|
font = pg.font.Font(None, 20)
|
||||||
dict_estrat = prepararEstatistica(mapa)
|
strats: dict[str, int] = prepararEstatistica(mapa)
|
||||||
n_linhas = 0
|
n_linhas = 0
|
||||||
for strat in dict_estrat:
|
for strat in strats:
|
||||||
strat_label = font.render(
|
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,
|
False,
|
||||||
pg.Color(255, 255, 255, 0),
|
pg.Color(255, 255, 255, 0),
|
||||||
)
|
)
|
||||||
janela.blit(
|
janela.blit(
|
||||||
strat_label,
|
strat_label,
|
||||||
(
|
(
|
||||||
frame_info_mapa.posicao[0] + (sep_janelas * 2),
|
frame.posicao[0] + (sep_janelas * 2),
|
||||||
frame_info_mapa.posicao[1] + (sep_janelas * 2) + (30 * n_linhas),
|
frame.posicao[1] + (sep_janelas * 2) + (30 * n_linhas),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
n_linhas += 1
|
n_linhas += 1
|
||||||
@ -213,12 +204,12 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]):
|
|||||||
running: bool = True
|
running: bool = True
|
||||||
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)
|
frm_mapa, frm_info_mapa, frm_info_pos, frm_accoes = criarFrames(janela)
|
||||||
# mostrar frames no janela principal
|
# mostrar frames no janela principal
|
||||||
frame_mapa.desenhar(janela, 5, 10)
|
frm_mapa.desenhar(janela, 5, 10)
|
||||||
frame_info_mapa.desenhar(janela, 5, 10)
|
frm_info_mapa.desenhar(janela, 5, 10)
|
||||||
frame_info_pos.desenhar(janela, 5, 10)
|
frm_info_pos.desenhar(janela, 5, 10)
|
||||||
frame_accoes.desenhar(janela, 5, 10)
|
frm_accoes.desenhar(janela, 5, 10)
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
if quadrado_seleccionado:
|
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
|
# botao 1 do rato clicado, seleccionar ou tirar selecao
|
||||||
if pg.mouse.get_pressed(num_buttons=3)[0]:
|
if pg.mouse.get_pressed(num_buttons=3)[0]:
|
||||||
pos_rato: tuple[int, int] = pg.mouse.get_pos()
|
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:
|
if pos_rato[0] < 10 or pos_rato[1] < 10:
|
||||||
continue
|
continue
|
||||||
pos_x = (pos_rato[0] - 10) // tamanho_quadrado
|
pos_x = (pos_rato[0] - 10) // quadrado
|
||||||
pos_y = (pos_rato[1] - 10) // tamanho_quadrado
|
pos_y = (pos_rato[1] - 10) // quadrado
|
||||||
if pos_x >= mapa.dimensao[0] or pos_y >= mapa.dimensao[1]:
|
if pos_x >= mapa.dimensao[0] or pos_y >= mapa.dimensao[1]:
|
||||||
continue
|
continue
|
||||||
quadrado_novo = pg.Rect(
|
quadrado_novo = pg.Rect(
|
||||||
(pos_x * tamanho_quadrado) + sep_janelas,
|
(pos_x * quadrado) + sep_janelas,
|
||||||
(pos_y * tamanho_quadrado) + sep_janelas,
|
(pos_y * quadrado) + sep_janelas,
|
||||||
tamanho_quadrado,
|
quadrado,
|
||||||
tamanho_quadrado,
|
quadrado,
|
||||||
)
|
)
|
||||||
if quadrado_novo == quadrado_seleccionado:
|
if quadrado_novo == quadrado_seleccionado:
|
||||||
quadrado_seleccionado = None
|
quadrado_seleccionado = None
|
||||||
frame_info_pos.desenhar(janela, 5, 10)
|
frm_info_pos.desenhar(janela, 5, 10)
|
||||||
else:
|
else:
|
||||||
quadrado_seleccionado = quadrado_novo
|
quadrado_seleccionado = quadrado_novo
|
||||||
# actualizar info na frame_info_pos
|
# 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
|
# desenhar mapa
|
||||||
frame_mapa.desenhar(janela)
|
frm_mapa.desenhar(janela)
|
||||||
criarMapa(janela, frame_mapa, mapa)
|
criarMapa(janela, frm_mapa, mapa)
|
||||||
# criarTabuleiro(janela, mapa)
|
# criarTabuleiro(janela, mapa)
|
||||||
# se quadrado estiver seleccionado, mostrá-lo
|
# se quadrado estiver seleccionado, mostrá-lo
|
||||||
if quadrado_seleccionado:
|
if quadrado_seleccionado:
|
||||||
@ -291,7 +283,7 @@ def main(mapa: Mapa | None, tamanho_mapa: tuple[int, int]):
|
|||||||
# mostrar numero de iteração actual
|
# mostrar numero de iteração actual
|
||||||
# mostrar dimensão do mapa
|
# mostrar dimensão do mapa
|
||||||
# mostrar estatisticas
|
# mostrar estatisticas
|
||||||
actualizarEstatisticas(janela, frame_info_mapa, mapa)
|
actualizarEstatisticas(janela, frm_info_mapa, mapa)
|
||||||
# mostrar frame_accoes
|
# mostrar frame_accoes
|
||||||
pg.display.flip()
|
pg.display.flip()
|
||||||
clock.tick(60)
|
clock.tick(60)
|
||||||
|
|||||||
Reference in New Issue
Block a user