Игра Космические захватчики - PullRequest
0 голосов
/ 15 сентября 2010

Я пишу игру «Космические захватчики». Мне нужно написать 5 открытых переменных экземпляра, которые содержат коллекции, в которых записана вся информация об одном запуске игры:

spaceShips будет ссылаться на список SpaceShip в порядке их появления на экране

публичный список космических кораблей;

мигания - это снимки, которые будут ссылаться на список всех случаев Blink в том порядке, в котором они произошли

публичный список мигает;

hitMap, который будет ссылаться на карту, ключи которого будут экземплярами Космического корабля, которые были поражены миганием, и значения которых будут отображать списки, соответствующие «успешным» случаям мигания

????

невредимый, который будет ссылаться на список всех экземпляров космического корабля, которые не были «сбиты» ни одним мигом

* * ??? тысяча двадцать-три

промахов, которые будут ссылаться на список всех случаев Blink, которые не "поразили" ни один космический корабль

???

Затем мне нужно добавить строки в конструктор, чтобы назначить новый экземпляр HashMap для отображения хитов и ArrayList для других переменных, пока у меня есть

spaceShips = new ArrayList (); мигает = новый ArrayList ();

Любая помощь будет отличной

ура

Ответы [ 3 ]

2 голосов
/ 15 сентября 2010

В Java 5 и выше вы можете использовать Generics, чтобы сделать вашу жизнь немного более простой. Используйте эти определения:

public List<SpaceShip> spaceShips = new ArrayList<SpaceShip>();
public List<Blink> blinks ...;
public Map<SpaceShip, List<Blink>> hitsMap = new HashMap<SpaceShip, List<Blink>>();
public List<SpaceShip> unscathed ...;
public List<Blink> misses ...;

Чтобы добавить хит, используйте этот код:

public void addHit(SpaceShip ship, Blink blink) {
    List<Blink> hits = hitsMap.get(spaceShip);
    if(null == hits) {
        hits = new ArrayList<Blank>();
        hitsMap.put(spaceShip, hits);
    }
    hits.add(blink);
}

Тем не менее, я предлагаю немного другой API: добавьте список "попаданий" в SpaceShip и логическое поле hit (или, возможно, ссылку на космический корабль, который он ударил) в Blink. Таким образом, соответствующая информация будет находиться в экземпляре затронутого объекта, и вы можете использовать простой фильтр в списке spaceShips или blinks, чтобы получить три других списка / карты.

И будьте внимательны. Разве «Мигание» не должно быть «Ракетой» или «Выстрелом»?

0 голосов
/ 15 сентября 2010

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

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

Кроме того, я беру пример игры PacMan (что еще: p), вы должны помнить, что некоторые игровые объекты могут иметь состояния (например, режим Годмана или уязвимый Пакман, противоположные дляGhosts).Таким образом, идея сделать Ghosts и Pacman (которые связаны с перемещением / состоянием) детьми общего абстрактного класса.

Надеюсь, это поможет!

0 голосов
/ 15 сентября 2010

Некоторые общие моменты, потому что это домашнее задание (по крайней мере, я так думаю - не стесняйтесь уточнить, если это не так).

  1. Использование обобщений в ваших структурах данных, где это возможно.Например, List<SpaceShip> spaceShips
  2. Не объявляйте переменные public по умолчанию (хотя, сказав это, я не видел остальную часть вашего кода, поэтому, возможно, есть веская причина, по которой вы это сделали)

Вы сказали, что ваша переменная hitsMap должна быть экземпляром Map, но позже вы сказали, что она должна быть HashMap.Поэтому нет большого выбора, кроме как объявить Map<SpaceShip, List<Blink>> hitsMap = new HashMap<SpaceShip, List<Blink>>();

. Для вашего списка misses начните с копирования списка всех космических кораблей (возможно, через Collections.copy ?).Когда каждый SpaceShip получает удар, удалите его из списка misses.

Ваш список misses должен быть просто List<Blink>, который добавляет Blink объектов, добавленных к нему всякий раз, когда вы определяете, является ли Blink рассматриваемых промахов или попаданий (в этом случае вы должны отредактировать hitsMap.

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