1 Commits

Author SHA1 Message Date
da7e 2828e37853 maze is display once 2026-03-26 18:22:45 +01:00
3 changed files with 121 additions and 32 deletions
+90 -1
View File
@@ -1,16 +1,105 @@
import os
from typing import Any, Callable
from src.AMazeIng import AMazeIng
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:
mlx = None
try:
mlx = MazeMLX(1000, 1000)
config = Parsing.DataMaze.get_data_maze("config.txt")
print(config)
amazing = AMazeIng(**config)
for _ in amazing.generate():
os.system("clear")
amazing.maze.ascii_print()
mlx.gen_maze(amazing.maze.get_maze())
with open("test.txt", "w") as output:
output.write(amazing.__str__())
except Exception as err:
+31 -31
View File
@@ -1,34 +1,34 @@
957D3955553B957917B93D3D15553B
AB97AABBD16847D6ABAAAD452B97C6
8687A8443EBC55538286E953A807D3
878506952BAD3B942EAD503E86ED52
852D4383C6C384438147D2C3879796
ED2B96EC7D384792EC5792BEC38103
BBC2C795516C13EC51556C053AAEAA
8452BD43D4396AD552D3BBEBE803EE
853A8552B902BABD5290029696AA93
C7AC2B9686EE82ABB82EEC07C7E86A
D3AD0683C7D3EAC2C6C3D5693956D2
9687E92EBBD0103857D43916A85796
C52BD2A942D2EAE857D542E946D147
D3EC12EE9692F852FFFBBE96957EBB
B87BAA97852AFED057FC07C507D506
C2942C47C7EEFFFAFFFD4517ED53C3
946BABB91553BBFEFD51796955147A
C3BA82AAC53C6AFBFFF816BEBD053A
D06AE828792B90543D568547856D42
92BC56AAD2C6A87B83916D516BD53A
AAAD13C47AD3AED46EEA95103853C2
EAAD2815143C43D3BBD0696EAED416
B847EEC3EBC57AD4407C7C3B85792B
AEBBD5503A9156BD16D1792A8796AA
87AC3BD2C42C57C383D2BEAC47C3EA
C50542B857879112E812C1297BD6BA
D3C3D44417C7EEAC3EAC52C47C516A
BA903B91693B97AB87A938157D5052
802A82EC5684414287AAEE87953AD2
EEEEEC57D547D6D6C546D54547C47E
BBBBBB97D397BBBB917BBD15513D17
84684003BAA946AAA854696D3EEBC3
C112D2AC28443D06EAB9103945507A
BEAED283E857C3AD52AEAEAC7D5452
87C53EAEBC393C4154012D29553956
A95147EBAD6AEBB87D2EC386D52853
86D4517AC17C50443B813AABD1443E
EBD1787850513A9506AAEAAC3A93EB
B8543850787EEAAB87EC3EC3C2A852
AEBD443AD4517EC6ED3D2D3EB8687E
838553AC7BD2BD3BBD43EB85069457
EAC57843D2B86D4407D0106943C7BB
D01552B856C4553BC556AC783E97C2
92C7D6C29557F96AFFFD6D16850512
E83D15382D3BFC7857FD39696907EA
BEAD6D46ABC2FFFAFFF96AD2D2C57A
87ABD13BC6D293FAFD50547C3C3D3E
C168128455106EFAFFFABD17EBA907
9056AEC7B92ABBBAD15407ABD2C2C3
EAD1691786E8044296952D06B8147A
BEB87EAD053E87D6ED07812BAE8796
87AAD5412B87C7957BEBEAAC2D07EB
C3C2D55286857905169456E9438796
D07EBBD287A97EAB8507957E944507
96BD0692AD445146C7EBC55503D3AB
C16D2BEAC3D514553D52BD53AE92EA
B8552C12BE97AB952D104796C52E92
C47D016AABC16869456AD5413BAD6A
D113AED2C292D03ED53ABD52800392
D6EC457C7C6C7EC57D446D56EEEC6E
1,1
29,29
SSSSEESSESSSENEEESWSSWSSWSSSSESESSENNNNESEESWSSSWWWSESSSSESWSEENESEEEENNNESESSSEENNNNESEESESSEENEESENNEESW
SSEESSEESWSEESSSESSWSWWWWSSESSSWSEENEENESEEEESWSWSEESSSSEEEENNEESEENEEENNWNNWNNEENNENENESEESWSSESSESWSSSSWWSSSEESSESEN