Pacman лабиринт на Яве - PullRequest
       30

Pacman лабиринт на Яве

8 голосов
/ 07 марта 2009

Итак, я создаю игру pacman на Java, чтобы научиться программировать игры.

У меня есть окно основной игры с нарисованными спрайтами pacman и спрайтами-призраками, pacman движется с помощью клавиш со стрелками, не выходит за стены окна и т. Д. Теперь я пытаюсь построить лабиринт, как на этой картинке:

Pacman maze

Не дав мне прямого / полного решения, может ли кто-нибудь подсказать мне, как это можно построить? Я говорю только о границах и трубах (отметки «Т»), через которые вы не можете пройти, и вам нужно обойти. Пока не точки, которые ест пакман.

Вот мои вопросы:

1) Какой самый эффективный алгоритм / метод для создания этого лабиринта? Нужно ли рисовать его каждый раз, когда вызывается метод paint (), или есть способ нарисовать его только в начале игры и больше никогда?

2) Как это будет отображаться на экране? Я предполагаю, что fillRect() будет использоваться?

3) Любые подсказки при обнаружении столкновений (так что пакман / призраки не могут пройти сквозь стены) были бы полезны.

4) Очень полезны также любые подсказки о том, как будет рассчитано свободное пространство между трубами, чтобы можно было заполнить точки между ними.

Спасибо

Ответы [ 4 ]

9 голосов
/ 08 марта 2009

Я бы так не поступил.

Я бы нарисовал графическую карту, а затем создал бы двумерный массив данных, который представляет карту. Карта данных будет отвечать за определение столкновений, употребление точек, где находятся конфеты и где призраки. Как только вся логика для всего будет обработана, просто используйте 2D-массив, чтобы отобразить все в правильных пиксельных координатах на графической карте.

Например, пользователь нажимает левую клавишу. Сначала вы определяете, что pacman находится в элементе 3, 3. Элемент 3, 2 содержит информацию, обозначающую стену, чтобы вы могли реализовать код, чтобы заставить его игнорировать команду.

EDIT:

Каждый элемент будет представлять, где может быть точка. Например:

Нет, глядя на доску, я бы сказал, что массив будет выглядеть примерно так.

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

И так далее. Возможно, вы захотите выбрать более гибкую структуру данных, чем просто символы, так как некоторые области должны содержать кучу различной информации. То есть, даже несмотря на то, что область появления призраков пуста, pacman не допускается туда. Движение призраков и пакманов различно для побегов, точка возрождения конфет - пустое место, но если вы хотите сохранить гибкость, вам нужно будет указать, где это находится для каждой карты.

Еще одна вещь, которую вы должны помнить, это то, что pacman и призраки часто находятся между точками, поэтому для обнаружения столкновений важна информация, представляющая процент пространства, которое они занимают между 1,2 и 1,3, так как а также определить, когда вы хотите удалить точки, бонусы и конфеты с доски.

6 голосов
/ 08 марта 2009

Вот вам подсказка:

альтернативный текст http://www.freeimagehosting.net/uploads/66e4131f59.jpg

Эта подсказка, при правильном использовании, позволит вам обрабатывать рендеринг и обнаружение столкновений, а также позволит вам компактно представить лабиринт.

2 голосов
/ 08 марта 2009

1) Просто чтобы дать мой совет по перерисовке. Если вы обнаружите, что перерисовка всего изображения идет медленно, вы можете определить только элементы, которые изменились на экране, и перерисовать их. Подход для этого может быть следующим: Определить спрайты, которые были перемещены. Определите (приблизительный) прямоугольник вокруг этих спрайтов. Перерисовывать только эти прямоугольники. Таким образом, вы обновляете только части экрана, а не весь экран. Это должно привести к увеличению производительности по сравнению с перерисовкой всего экрана.

Другие ответы были разумными для других вопросов, которые вы задали.

2 голосов
/ 08 марта 2009
  1. Вы можете нарисовать карту в BufferedImage и просто нарисовать изображение на каждой краске (). Таким образом, вы получите вполне приемлемую производительность.

  2. Если вы довольны тем, что стены сплошные, вы можете нарисовать каждый квадратный блок стен с помощью fillRect. Если вы хотите, чтобы изображение выглядело так же, как на рисунке, вам нужно понять, как правильно нарисовать линии и использовать дуги для углов.

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

  4. Я не понимаю, что вы пытаетесь спросить здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...