diff --git a/skorohodovsa/task_2/docs/source/api.md b/skorohodovsa/task_2/docs/source/api.md index f3eb868..84f80d7 100644 --- a/skorohodovsa/task_2/docs/source/api.md +++ b/skorohodovsa/task_2/docs/source/api.md @@ -1,9 +1,9 @@ # API Reference -## Модуль `models.map` +## Модуль `models.base` ```{eval-rst} -.. automodule:: models.map +.. automodule:: models.base :members: :undoc-members: :show-inheritance: \ No newline at end of file diff --git a/skorohodovsa/task_2/models/base.py b/skorohodovsa/task_2/models/base.py index e0992c5..f70972f 100644 --- a/skorohodovsa/task_2/models/base.py +++ b/skorohodovsa/task_2/models/base.py @@ -38,6 +38,39 @@ class Cell: """ return not self.is_wall + @property + def is_wall(self): + return self._is_wall + + @property + def is_start(self): + return self._is_start + + @property + def is_exit(self): + return self._is_exit + + def _clear_flags(self) -> None: + """Обнуляет все флаги поля""" + self._is_start = False + self._is_exit = False + self._is_wall = False + + @is_wall.setter + def is_wall(self, value: bool) -> None: + self._clear_flags() + self._is_wall = True + + @is_start.setter + def is_start(self, value: bool) -> None: + self._clear_flags() + self._is_start = True + + @is_exit.setter + def is_exit(self, value: bool) -> None: + self._clear_flags() + self._is_exit = True + def __str__(self) -> str: if self._is_wall: type_cell = "Стена" @@ -66,14 +99,48 @@ class Maze: ] def _check_point_in_map(self, x: int, y: int) -> bool: + """Проверка нахождения точки в границах поля + + Args: + x (int): Координата точки в оси X + y (int): Координата точки в оси Y + + Returns: + bool: True если поля в поле, иначе False + """ return (0 <= x < self._width) and (0 <= y < self._height) def get_cell(self, x: int, y: int) -> Optional[Cell]: + """Получение значения поля по координате в лабиринте + + Args: + x (int): Координата точки в оси X + y (int): Координата точки в оси Y + + Returns: + Optional[Cell]: Объект поля, при его наличии + """ if not self._check_point_in_map(x, y): return None return self._map[y][x] def get_neighbors(self, x: int, y: int) -> Optional[list[Cell]]: + """Получение соседних полей относительно заданного поля + + Под соседями поля в лабиринте имеется виду клетки сверху, справа, + снизу и слева относительно её. Если точка находится за границами, + то будет возвращено `None` + + Args: + x (int): Координата точки в оси X + y (int): Координата точки в оси Y + + Returns: + Optional[list[Cell]]: Список соседних полей + """ + if not self._check_point_in_map(x, y): + return None + list() vector_x = [0, 1, 0, -1] vector_y = [1, 0, -1, 0]