mirror of
https://github.com/maoakeEnterprise/amazing.git
synced 2026-04-28 16:04:35 +02:00
maze is display once
This commit is contained in:
+90
-1
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user