Дизайн уровней в Pygame

Эй, я пытаюсь разработать свою первую игру, используя библиотеку Pygame для Python, и мне было интересно, каковы наилучшие методы для дизайна уровней в целом. Я хотел бы услышать, что вы, ребята, думаете о хороших объектно-ориентированных шаблонах проектирования для управления уровнями. Кроме того, я довольно новичок в Python - спасибо!


person mportiz08    schedule 09.12.2009    source источник
comment
Что за игра? РПГ? Платформер? Другой жанр?   -  person Mongoose    schedule 09.12.2009
comment
на самом деле я пытаюсь воссоздать Rodents Revenge для развлечения (en.wikipedia.org/wiki/ Грызун%27s_Revenge)   -  person mportiz08    schedule 09.12.2009


Ответы (3)


В этом типе игры ваши карты представляют собой плитки (я предполагаю, что под уровнем вы подразумеваете отдельный уровень, а не управление всеми своими уровнями). Каждая плитка имеет

  • ассоциированное изображение (как оно выглядит на дисплее)
  • тип (например, стена, земля, ловушка и т. д.)

Когда я создаю тайловые игры в Pygame, у меня обычно есть класс Map, который содержит текущую карту:

  • pygame.Surface карты (то, что вы будете выводить на дисплей)
  • список списков (то есть матрица), где каждый элемент является объектом Tile (я также делал игры, в которых у вас есть просто строка, которая говорит вам, какой это тип плитки, и тогда вам не нужен отдельный Tile учебный класс)

Карта должна быть относительно статичной — вы могли бы сделать так, чтобы ловушки становились обычными тайлами после того, как вы на них наступите (это довольно просто — когда вы выполняете обнаружение столкновений и происходит попадание, просто измените этот тайл на другой объект Tile (предположительно тот, для которого пустая плитка)), но вам не нужны персонажи или подвижные блоки на карте, если вы можете помочь. Поскольку у подвижных блоков есть свои правила перемещения, это не так просто, как просто сменить плитку — у вас будет целый набор логики, и нужно будет изменить как минимум две плитки (а что, если вы можно было передвигать блоки на ловушки — тогда приходилось бы отдельно вспоминать, что было под ним — блэх). На мой взгляд, проще иметь класс для каждого движущегося объекта и элемента.

Короче говоря, у вас есть:

  • Tile
  • Map
  • Block
  • другие подвижные объекты/спрайты

И это в основном весь ваш уровень. Для нескольких уровней, если отдельные уровни всегда одинаковы, вы можете просто иметь список Map объектов, по одному для каждого уровня.

person Daniel G    schedule 09.12.2009

Если это ваше первое приложение Pygame, не тратьте время на «объектно-ориентированные шаблоны проектирования для управления уровнями». Теперь вам нужно выяснить, как заставить Pygame делать то, что вы хотите.

  • Можете ли вы показать все, что вы хотите?
  • Ваш дисплей не мерцает?
  • Можете ли вы правильно прочитать элементы управления пользовательским вводом?
  • и т.п.

Объектно-ориентированные паттерны для управления уровнями появились позже, намного позже.

person Greg Hewgill    schedule 09.12.2009
comment
Спасибо, но я думаю, что достаточно хорошо разбираюсь в базовой графике и пользовательском вводе, и теперь мне нужен совет о том, как работать с уровнями реализации. - person mportiz08; 09.12.2009
comment
Тогда достаточно справедливо. В вашем посте говорится о первой игре и новичке в Python, что привело меня к выводу, что, возможно, вы раньше не использовали Pygame для написания игры. - person Greg Hewgill; 09.12.2009

Вообще говоря, простой способ сделать это — использовать матрицы (или многомерные массивы — здесь они работают так же).

По сути, каждая карта представляет собой массив, где каждый элемент массива представляет собой квадрат на сетке. Например, сетка 3 на 3 будет выглядеть следующим образом:

(псевдокод)

var Map = [[1,2,3][1,2,3][1,2,3]];

Вместо чисел вы можете поместить строки, чтобы функция анализировала и рисовала или выполняла действия в зависимости от значения ячейки.

person Moshe    schedule 09.12.2009