Генерация, решение и совместное прохождение лабиринтов на Python
- Требует Python
>= 3.10
- Установка
hatch
. Обычно есть в репозиториях любого дистрибутива Linux, но можно и поставить через pip:pip install hatch
- Переход в окружение проекта:
hatch shell
- Запуск:
python -m labyrinths
- Тесты можно запустить через
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
- и так понятно