From: Axy Date: Fri, 13 Feb 2026 14:16:02 +0000 (+0100) Subject: Cardinal cell coord utility X-Git-Url: https://git.uwuaxy.net/sitemap.xml?a=commitdiff_plain;h=2db662bd068bd0850a0f645c2d7d1f6ec7cba306;p=axy%2Fft%2Fa-maze-ing.git Cardinal cell coord utility --- diff --git a/amazeing/maze_class/maze_walls.py b/amazeing/maze_class/maze_walls.py index ad000f0..cfbb966 100644 --- a/amazeing/maze_class/maze_walls.py +++ b/amazeing/maze_class/maze_walls.py @@ -14,6 +14,7 @@ class NetworkID: class WallNetwork: def __init__(self) -> None: from .maze_walls import WallCoord + self.walls: set[WallCoord] = set() def size(self) -> int: @@ -44,6 +45,38 @@ class Orientation(Enum): return Orientation.HORIZONTAL +class Cardinal(Enum): + NORTH = auto() + SOUTH = auto() + EAST = auto() + WEST = auto() + + def opposite(self) -> "Cardinal": + match self: + case Cardinal.NORTH: + return Cardinal.SOUTH + case Cardinal.SOUTH: + return Cardinal.NORTH + case Cardinal.EAST: + return Cardinal.WEST + case Cardinal.WEST: + return Cardinal.EAST + + def left(self) -> "Cardinal": + match self: + case Cardinal.NORTH: + return Cardinal.WEST + case Cardinal.SOUTH: + return Cardinal.EAST + case Cardinal.EAST: + return Cardinal.NORTH + case Cardinal.WEST: + return Cardinal.SOUTH + + def right(self) -> "Cardinal": + return self.left().opposite() + + class WallCoord: def __init__(self, orientation: Orientation, a: int, b: int) -> None: self.orientation: Orientation = orientation @@ -122,12 +155,23 @@ class CellCoord: return hash(self.__members()) def walls(self) -> Iterable[WallCoord]: - return [ - WallCoord(Orientation.HORIZONTAL, self.__y, self.__x), - WallCoord(Orientation.HORIZONTAL, self.__y + 1, self.__x), - WallCoord(Orientation.VERTICAL, self.__x, self.__y), - WallCoord(Orientation.VERTICAL, self.__x + 1, self.__y), - ] + return map( + self.get_wall, + [Cardinal.NORTH, Cardinal.SOUTH, Cardinal.EAST, Cardinal.WEST], + ) + + def get_wall(self, cardinal: Cardinal) -> WallCoord: + match cardinal: + case Cardinal.NORTH: + return WallCoord(Orientation.HORIZONTAL, self.__y, self.__x) + case Cardinal.SOUTH: + return WallCoord( + Orientation.HORIZONTAL, self.__y + 1, self.__x + ) + case Cardinal.EAST: + return WallCoord(Orientation.VERTICAL, self.__x, self.__y) + case Cardinal.WEST: + return WallCoord(Orientation.VERTICAL, self.__x + 1, self.__y) def pixel_coords(self) -> Iterable[PixelCoord]: return [PixelCoord(self.__x * 2 + 1, self.__y * 2 + 1)]