make cell wall statuses public
This commit is contained in:
parent
19a29bbb5b
commit
808e1cee53
1 changed files with 37 additions and 24 deletions
61
cell.py
61
cell.py
|
@ -1,3 +1,4 @@
|
||||||
|
from typing import Dict
|
||||||
from graphics import Window, Point, Line
|
from graphics import Window, Point, Line
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,6 +18,11 @@ class Cell:
|
||||||
A Cell represents a grid on the maze.
|
A Cell represents a grid on the maze.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
TOP_WALL = 0
|
||||||
|
BOTTOM_WALL = 1
|
||||||
|
LEFT_WALL = 2
|
||||||
|
RIGHT_WALL = 4
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
x1: int, y1: int,
|
x1: int, y1: int,
|
||||||
|
@ -39,10 +45,12 @@ class Cell:
|
||||||
left_wall = Line(Point(x1, y1), Point(x1, y2))
|
left_wall = Line(Point(x1, y1), Point(x1, y2))
|
||||||
right_wall = Line(Point(x2, y1), Point(x2, y2))
|
right_wall = Line(Point(x2, y1), Point(x2, y2))
|
||||||
|
|
||||||
self._top_wall = CellWall(top_wall)
|
self._walls: Dict[int, CellWall] = {
|
||||||
self._bottom_wall = CellWall(bottom_wall)
|
Cell.TOP_WALL: CellWall(top_wall),
|
||||||
self._left_wall = CellWall(left_wall)
|
Cell.BOTTOM_WALL: CellWall(bottom_wall),
|
||||||
self._right_wall = CellWall(right_wall)
|
Cell.LEFT_WALL: CellWall(left_wall),
|
||||||
|
Cell.RIGHT_WALL: CellWall(right_wall),
|
||||||
|
}
|
||||||
|
|
||||||
# Calculate the cell's central point
|
# Calculate the cell's central point
|
||||||
centre_x = x1 + ((x2 - x1) / 2)
|
centre_x = x1 + ((x2 - x1) / 2)
|
||||||
|
@ -64,10 +72,10 @@ class Cell:
|
||||||
"""
|
"""
|
||||||
configure_walls configures the existence of the Cell's walls.
|
configure_walls configures the existence of the Cell's walls.
|
||||||
"""
|
"""
|
||||||
self._top_wall.exists = top
|
self._walls[Cell.TOP_WALL].exists = top
|
||||||
self._bottom_wall.exists = bottom
|
self._walls[Cell.BOTTOM_WALL].exists = bottom
|
||||||
self._left_wall.exists = left
|
self._walls[Cell.LEFT_WALL].exists = left
|
||||||
self._right_wall.exists = right
|
self._walls[Cell.RIGHT_WALL].exists = right
|
||||||
|
|
||||||
def centre(self) -> Point:
|
def centre(self) -> Point:
|
||||||
"""
|
"""
|
||||||
|
@ -75,6 +83,11 @@ class Cell:
|
||||||
"""
|
"""
|
||||||
return self._centre
|
return self._centre
|
||||||
|
|
||||||
|
def wall_exists(self, wall: int) -> bool:
|
||||||
|
if wall not in self._walls:
|
||||||
|
raise Exception("received invalid cell wall")
|
||||||
|
return self._walls[wall].exists
|
||||||
|
|
||||||
#def break_walls_r(self, i: int, j: int) -> None:
|
#def break_walls_r(self, i: int, j: int) -> None:
|
||||||
# self.visited = True
|
# self.visited = True
|
||||||
# while True:
|
# while True:
|
||||||
|
@ -89,47 +102,47 @@ class Cell:
|
||||||
if not self._window:
|
if not self._window:
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._top_wall.exists:
|
if self.wall_exists(Cell.TOP_WALL):
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._top_wall.line,
|
self._walls[Cell.TOP_WALL].line,
|
||||||
fill_colour=self._window.cell_grid_colour,
|
fill_colour=self._window.cell_grid_colour,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._top_wall.line,
|
self._walls[Cell.TOP_WALL].line,
|
||||||
fill_colour=self._window.background_colour,
|
fill_colour=self._window.background_colour,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self._bottom_wall.exists:
|
if self.wall_exists(Cell.BOTTOM_WALL):
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._bottom_wall.line,
|
self._walls[Cell.BOTTOM_WALL].line,
|
||||||
fill_colour=self._window.cell_grid_colour,
|
fill_colour=self._window.cell_grid_colour,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._bottom_wall.line,
|
self._walls[Cell.BOTTOM_WALL].line,
|
||||||
fill_colour=self._window.background_colour,
|
fill_colour=self._window.background_colour,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self._left_wall.exists:
|
if self.wall_exists(Cell.LEFT_WALL):
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._left_wall.line,
|
self._walls[Cell.LEFT_WALL].line,
|
||||||
fill_colour=self._window.cell_grid_colour,
|
fill_colour=self._window.cell_grid_colour,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._left_wall.line,
|
self._walls[Cell.LEFT_WALL].line,
|
||||||
fill_colour=self._window.background_colour,
|
fill_colour=self._window.background_colour,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self._right_wall.exists:
|
if self.wall_exists(Cell.RIGHT_WALL):
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._right_wall.line,
|
self._walls[Cell.RIGHT_WALL].line,
|
||||||
fill_colour=self._window.cell_grid_colour,
|
fill_colour=self._window.cell_grid_colour,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._window.draw_line(
|
self._window.draw_line(
|
||||||
self._right_wall.line,
|
self._walls[Cell.RIGHT_WALL].line,
|
||||||
fill_colour=self._window.background_colour,
|
fill_colour=self._window.background_colour,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -150,11 +163,11 @@ class Cell:
|
||||||
|
|
||||||
class CellInvalidError(Exception):
|
class CellInvalidError(Exception):
|
||||||
"""
|
"""
|
||||||
CellInvalidError is returned when the program tries to create a Cell whose
|
CellInvalidError is raised when the program tries to create a Cell whose
|
||||||
values are invalid. The values are invalid when x2 is smaller than x1
|
values are invalid. The values are invalid when x2 is smaller than x1
|
||||||
and/or y2 is smaller than y1. When creating a Cell the x and y values
|
and/or y2 is smaller than y1. When creating a Cell the x and y values
|
||||||
should always represent the top left and the bottom right of the cell's
|
should always represent the top left and the bottom right corners of
|
||||||
walls (i.e. x1 < x2 and y1 < y2).
|
the cell (i.e. x1 < x2 and y1 < y2).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, x1: int, y1: int, x2: int, y2: int, *args):
|
def __init__(self, x1: int, y1: int, x2: int, y2: int, *args):
|
||||||
|
@ -170,7 +183,7 @@ class CellInvalidError(Exception):
|
||||||
|
|
||||||
class CellTooSmallError(Exception):
|
class CellTooSmallError(Exception):
|
||||||
"""
|
"""
|
||||||
CellTooSmallError is returned when the program tries to create a Cell
|
CellTooSmallError is raised when the program tries to create a Cell
|
||||||
which is too small to correctly draw it's central point.
|
which is too small to correctly draw it's central point.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue