Генерация, решение и совместное прохождение лабиринтов на 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- и так понятно

