Java - лучший способ блокировать плитки (логин) - PullRequest
1 голос
/ 09 июля 2010

Ладно, у меня есть эта 2D ролевая игра на плитку, которую я делаю .... вот живой апплет: http://mystikrpg.com/so/

Код также на http://mystikrpg.com/so/

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

Кто-нибудь из вас, удивительные мудрые эксперты по Java, видит какой-нибудь способ, которым я могу иметь НЕСКОЛЬКО плиток, которые блокируются?1009 *

Я сжал нужные файлы, чтобы вы могли поиграть, если хотите / можете здесь: http://mystikrpg.com/so/2drpg.zip

Я надеюсь, что смогу заблокировать более одной плитки ...:)

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

Вот краткое описание вашей проблемы:

int[][] board; // row tiles for ultimate mapping experience!

private static int BLOCKED = 24;

public boolean blocked(int tx, int ty) {
  return board[ty][tx] == BLOCKED;
}

Это ясно показывает, что вы блокируете только «24». Есть несколько подходов, в которых вы можете сделать это. Глядя на ваш код, я согласен с Джоном Скитом, что он не очень объектно-ориентирован, и лучше использовать инкапсуляцию и объекты, которые помогут вам в вашем коде и дизайне. Но чтобы ответить на ваш вопрос, вы можете просто поместить заблокированные листы в HashSet и проверить, содержат ли они лист, а затем вернуть его как «блокируемый». Э.Г.

private static final HashSet<Integer> BLOCKED_TILES = new HashSet<Integer>();
static {
  BLOCKED_TILES.add(24);
  BLOCKED_TILES.add(1);
  //add more tiles here
}

public boolean blocked(int tx, int ty) {
  return BLOCKED_TILES.contains(board[ty][tx]);
}
1 голос
/ 09 июля 2010

Гм, иметь коллекцию или массив плиток, которые заблокированы, и изменить метод blocked(), чтобы увидеть, находится ли данная плитка в этой коллекции?

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

...