Эй, я пытаюсь разработать свою первую игру, используя библиотеку Pygame для Python, и мне было интересно, каковы наилучшие методы для дизайна уровней в целом. Я хотел бы услышать, что вы, ребята, думаете о хороших объектно-ориентированных шаблонах проектирования для управления уровнями. Кроме того, я довольно новичок в Python - спасибо!
Дизайн уровней в Pygame
Ответы (3)
В этом типе игры ваши карты представляют собой плитки (я предполагаю, что под уровнем вы подразумеваете отдельный уровень, а не управление всеми своими уровнями). Каждая плитка имеет
- ассоциированное изображение (как оно выглядит на дисплее)
- тип (например, стена, земля, ловушка и т. д.)
Когда я создаю тайловые игры в Pygame, у меня обычно есть класс Map
, который содержит текущую карту:
pygame.Surface
карты (то, что вы будете выводить на дисплей)- список списков (то есть матрица), где каждый элемент является объектом Tile (я также делал игры, в которых у вас есть просто строка, которая говорит вам, какой это тип плитки, и тогда вам не нужен отдельный Tile учебный класс)
Карта должна быть относительно статичной — вы могли бы сделать так, чтобы ловушки становились обычными тайлами после того, как вы на них наступите (это довольно просто — когда вы выполняете обнаружение столкновений и происходит попадание, просто измените этот тайл на другой объект Tile (предположительно тот, для которого пустая плитка)), но вам не нужны персонажи или подвижные блоки на карте, если вы можете помочь. Поскольку у подвижных блоков есть свои правила перемещения, это не так просто, как просто сменить плитку — у вас будет целый набор логики, и нужно будет изменить как минимум две плитки (а что, если вы можно было передвигать блоки на ловушки — тогда приходилось бы отдельно вспоминать, что было под ним — блэх). На мой взгляд, проще иметь класс для каждого движущегося объекта и элемента.
Короче говоря, у вас есть:
Tile
Map
Block
- другие подвижные объекты/спрайты
И это в основном весь ваш уровень. Для нескольких уровней, если отдельные уровни всегда одинаковы, вы можете просто иметь список Map
объектов, по одному для каждого уровня.
Если это ваше первое приложение Pygame, не тратьте время на «объектно-ориентированные шаблоны проектирования для управления уровнями». Теперь вам нужно выяснить, как заставить Pygame делать то, что вы хотите.
- Можете ли вы показать все, что вы хотите?
- Ваш дисплей не мерцает?
- Можете ли вы правильно прочитать элементы управления пользовательским вводом?
- и т.п.
Объектно-ориентированные паттерны для управления уровнями появились позже, намного позже.
Вообще говоря, простой способ сделать это — использовать матрицы (или многомерные массивы — здесь они работают так же).
По сути, каждая карта представляет собой массив, где каждый элемент массива представляет собой квадрат на сетке. Например, сетка 3 на 3 будет выглядеть следующим образом:
(псевдокод)
var Map = [[1,2,3][1,2,3][1,2,3]];
Вместо чисел вы можете поместить строки, чтобы функция анализировала и рисовала или выполняла действия в зависимости от значения ячейки.