maze is display once

This commit is contained in:
2026-03-26 18:22:45 +01:00
parent e33d0a8e29
commit 2828e37853
3 changed files with 121 additions and 32 deletions
+90 -1
View File
@@ -1,16 +1,105 @@
import os import os
from typing import Any, Callable
from src.AMazeIng import AMazeIng from src.AMazeIng import AMazeIng
from src.parsing import Parsing from src.parsing import Parsing
from mlx.mlx import Mlx
import numpy as np
import math
from src.amaz_lib import Maze
class MazeMLX:
def __init__(self, height: int, width: int) -> None:
self.mlx = Mlx()
self.height = height
self.width = width
self.mlx_ptr = self.mlx.mlx_init()
self.win_ptr = self.mlx.mlx_new_window(
self.mlx_ptr, width, height, "amazing"
)
self.img_ptr = self.mlx.mlx_new_image(self.mlx_ptr, width, height)
self.buf, self.bpp, self.size_line, self.format = (
self.mlx.mlx_get_data_addr(self.img_ptr)
)
def __del__(self) -> None:
self.mlx.mlx_destroy_image(self.mlx_ptr, self.img_ptr)
self.mlx.mlx_destroy_window(self.mlx_ptr, self.win_ptr)
def put_pixel(self, x, y) -> None:
offset = y * self.size_line + x * (self.bpp // 8)
self.buf[offset + 0] = 0xFF
self.buf[offset + 1] = 0xFF
self.buf[offset + 2] = 0xFF
if self.bpp >= 32:
self.buf[offset + 3] = 0xFF
def clear_image(self) -> None:
self.buf[:] = b"\x00" * len(self.buf)
def put_line(self, start: tuple[int, int], end: tuple[int, int]) -> None:
sx, sy = start
ex, ey = end
if sy == ey:
for x in range(min(sx, ex), max(sx, ex) + 1):
self.put_pixel(x, sy)
if sx == ex:
for y in range(min(sy, ey), max(sy, ey) + 1):
self.put_pixel(sx, y)
def update_maze(self, maze: np.ndarray) -> None:
self.clear_image()
margin = math.trunc(
math.sqrt(self.width if self.width > self.height else self.height)
// 2
)
line_len = math.trunc(
(
(self.height - margin) // len(maze)
if self.height > self.width
else (self.width - margin) // len(maze[0])
)
)
for y in range(len(maze)):
for x in range(len(maze[0])):
x0 = x * line_len + margin
y0 = y * line_len + margin
x1 = x * line_len + line_len + margin
y1 = y * line_len + line_len + margin
if maze[y][x].get_north():
self.put_line((x0, y0), (x1, y0))
if maze[y][x].get_est():
self.put_line((x1, y0), (x1, y1))
if maze[y][x].get_south():
self.put_line((x0, y1), (x1, y1))
if maze[y][x].get_west():
self.put_line((x0, y0), (x0, y1))
self.mlx.mlx_put_image_to_window(
self.mlx_ptr, self.win_ptr, self.img_ptr, 0, 0
)
def close_loop(self, _: Any):
self.mlx.mlx_loop_exit(self.mlx_ptr)
def gen_maze(self, maze: np.ndarray) -> None:
self.mlx.mlx_loop_hook(self.mlx_ptr, self.update_maze, maze)
self.mlx.mlx_hook(self.win_ptr, 17, 0, self.close_loop, None)
self.mlx.mlx_loop(self.mlx_ptr)
def main() -> None: def main() -> None:
mlx = None
try: try:
mlx = MazeMLX(1000, 1000)
config = Parsing.DataMaze.get_data_maze("config.txt") config = Parsing.DataMaze.get_data_maze("config.txt")
print(config)
amazing = AMazeIng(**config) amazing = AMazeIng(**config)
for _ in amazing.generate(): for _ in amazing.generate():
os.system("clear") os.system("clear")
amazing.maze.ascii_print() amazing.maze.ascii_print()
mlx.gen_maze(amazing.maze.get_maze())
with open("test.txt", "w") as output: with open("test.txt", "w") as output:
output.write(amazing.__str__()) output.write(amazing.__str__())
except Exception as err: except Exception as err:
+31 -31
View File
@@ -1,34 +1,34 @@
957D3955553B957917B93D3D15553B BBBBBB97D397BBBB917BBD15513D17
AB97AABBD16847D6ABAAAD452B97C6 84684003BAA946AAA854696D3EEBC3
8687A8443EBC55538286E953A807D3 C112D2AC28443D06EAB9103945507A
878506952BAD3B942EAD503E86ED52 BEAED283E857C3AD52AEAEAC7D5452
852D4383C6C384438147D2C3879796 87C53EAEBC393C4154012D29553956
ED2B96EC7D384792EC5792BEC38103 A95147EBAD6AEBB87D2EC386D52853
BBC2C795516C13EC51556C053AAEAA 86D4517AC17C50443B813AABD1443E
8452BD43D4396AD552D3BBEBE803EE EBD1787850513A9506AAEAAC3A93EB
853A8552B902BABD5290029696AA93 B8543850787EEAAB87EC3EC3C2A852
C7AC2B9686EE82ABB82EEC07C7E86A AEBD443AD4517EC6ED3D2D3EB8687E
D3AD0683C7D3EAC2C6C3D5693956D2 838553AC7BD2BD3BBD43EB85069457
9687E92EBBD0103857D43916A85796 EAC57843D2B86D4407D0106943C7BB
C52BD2A942D2EAE857D542E946D147 D01552B856C4553BC556AC783E97C2
D3EC12EE9692F852FFFBBE96957EBB 92C7D6C29557F96AFFFD6D16850512
B87BAA97852AFED057FC07C507D506 E83D15382D3BFC7857FD39696907EA
C2942C47C7EEFFFAFFFD4517ED53C3 BEAD6D46ABC2FFFAFFF96AD2D2C57A
946BABB91553BBFEFD51796955147A 87ABD13BC6D293FAFD50547C3C3D3E
C3BA82AAC53C6AFBFFF816BEBD053A C168128455106EFAFFFABD17EBA907
D06AE828792B90543D568547856D42 9056AEC7B92ABBBAD15407ABD2C2C3
92BC56AAD2C6A87B83916D516BD53A EAD1691786E8044296952D06B8147A
AAAD13C47AD3AED46EEA95103853C2 BEB87EAD053E87D6ED07812BAE8796
EAAD2815143C43D3BBD0696EAED416 87AAD5412B87C7957BEBEAAC2D07EB
B847EEC3EBC57AD4407C7C3B85792B C3C2D55286857905169456E9438796
AEBBD5503A9156BD16D1792A8796AA D07EBBD287A97EAB8507957E944507
87AC3BD2C42C57C383D2BEAC47C3EA 96BD0692AD445146C7EBC55503D3AB
C50542B857879112E812C1297BD6BA C16D2BEAC3D514553D52BD53AE92EA
D3C3D44417C7EEAC3EAC52C47C516A B8552C12BE97AB952D104796C52E92
BA903B91693B97AB87A938157D5052 C47D016AABC16869456AD5413BAD6A
802A82EC5684414287AAEE87953AD2 D113AED2C292D03ED53ABD52800392
EEEEEC57D547D6D6C546D54547C47E D6EC457C7C6C7EC57D446D56EEEC6E
1,1 1,1
29,29 29,29
SSSSEESSESSSENEEESWSSWSSWSSSSESESSENNNNESEESWSSSWWWSESSSSESWSEENESEEEENNNESESSSEENNNNESEESESSEENEESENNEESW SSEESSEESWSEESSSESSWSWWWWSSESSSWSEENEENESEEEESWSWSEESSSSEEEENNEESEENEEENNWNNWNNEENNENENESEESWSSESSESWSSSSWWSSSEESSESEN