Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 4.46 KB

README.md

File metadata and controls

81 lines (62 loc) · 4.46 KB

labyrinths.py

Генерация, решение и совместное прохождение лабиринтов на Python

codecov

Скриншоты

Запуск

  1. Требует Python >= 3.10
  2. Установка hatch. Обычно есть в репозиториях любого дистрибутива Linux, но можно и поставить через pip:
    pip install hatch
  3. Переход в окружение проекта:
    hatch shell
  4. Запуск:
    python -m labyrinths
  5. Тесты можно запустить через
    hatch run test:test

Функционал

  • ✔ Генерация с помощью DFS или минимального остовного дерева; различные алгоритмы поиска мин. остова (кажется, нет смысла, минимальное остовное дерево все равно однозначно задается)
  • ✔ Вариант генерации выбирается с помощью аргумента командной строки
  • Отображение лабиринтов в консоли с помощью специальных символов (я не нашел подходящих спец. символов)
  • ✔ Сохранение/загрузка лабиринтов в/из файлов
  • ✔ Решение лабиринтов и отображение пути
  • ✔ Графический интерфейс
  • ✔ Возможность пользователю самому проходить лабиринт
  • ✔ Возможность проходить лабиринт в мультиплеерном режиме
  • ✔ Чат с другими игроками в лобби

Архитектура

Классы

Классы, связанные с генерацией, хранением, загрузкой и сохранением лабиринтов

  • MazeGenerator - класс, занимающийся генерацией лабиринтов. Имеет разные методы для настройки генерации, сама генерация запускается методом generate().
  • MazeData - результат генерации лабиринта. Можно распечатать в консоль. Можно сохранить в файл или загрузить из него.

Классы, связанные с текущим прохождением лабиринта (игроками)

  • Game - игра. Содержит в себе лабиринт и список игроков.
  • Player - класс игрока (как участник игры). Хранит свои координаты в лабиринте и ссылку на сессионного игрока.

Классы, связанные с сетью

  • Connection - базовый класс
  • ClientToHostConnection - от клиента
  • HostToClientConnection, HostConnectionSet - от сервера

Классы, связанные с лобби (сессией)

  • ClientInfo - игрок в лобби. Может не принимать участия в самой игре, а только наблюдать или общаться в чате. Хранит имя и цвет
  • HostSession - класс сессии, используемый у сервера (хоста). Содержит список подключенных игроков, ссылку на текущую игру.
  • ClientSession - класс сессии, используемый у клиента. Получает все события от сервера.

Классы, связанные с отрисовкой

  • MainWindow - основной класс, отвечающий за отрисовку всего. Хранит MazeWidget, которому передает события от сессии, связанные с игрой.
  • MazeWidget - класс, отвечающий за отрисовку лабиринта.
  • ChatWidget - чат.
  • MainMenu, ConnectMenu - разные менюшки
  • TextLabel, TextInput, Button - и так понятно