Игра Hexagon
Hexagon - игра, на которую я случайно наткнулся в интернете и решил повторить на Python (с использованием библиотеки pygame). Правила игры немного напоминают правила Тетрис. На игровом поле также нужно выстраивать полные линии, выкладывая фигурки, чтобы удалить их, с той лишь разницей, что поле в Hexagon состоит не из квадратиков, а из шестиугольных ячеек - гексов - и фигурки не падают сверху, а выбираются из случайным образом пополняемого "пула"
Код игры разбит на несколько файлов:
- start.pyw (с него происходит запуск игры, в нем находится основной игровой цикл)
- classes.py (в нем находятся классы, реализующие основную логику игры)
- utils.py (в нем находится несколько вспомогательных функций, например, для создания списка координат отдельных гексов и сглаживания их углов)
- settings.py (файл с настройками игры, такими например, как размер окна, размер гексов, цвет пустых гексов и т.д.)
Кратко о назначении отдельных классов:
- Background - генерирует фоновый рисунок и отрисовывает его.
- Hexagon, FieldHexagon, FigureHexagon - классы для представления гексов, входящих в фигуры, и гексов на игровом поле. Класс Hexagon является суперклассом для двух других, инкапсулирующим общие свойства и поведение.
- Figure - служит для представления фигур из гексов. Хранит список входящих в фигуру гексов, позволяя обращаться к ним, как к отдельному целому объекту. Содержит много методов для делегирования поведения. Например, мы можем передвинуть фигуру на указанное смещение не передавая его напрямую каждому отдельному входящему в фигуру гексу, а передав требуемое смещение фигуре, соответствующий метод которой уже передаст его входящим в фигуру гексам.
- Pool - генерирует весь комплект фигур и случайным образом отбирает фигуры из созданного комплекта для отдельных ходов.
- Field - представляет игровое поле. Также содержит методы для удаления полных линий и определения наличия доступных ходов (если доступных ходов не осталось - игра прекращается).
- DragAndDrop - реализует возможность перетаскивания фигур из пула на игровое поле с помощью мышки.
- Tab - панель для отображения количества очков.

