Я пишу простую игру, в которой у нас есть коллекция объектов, где игрок перемещается по сетке, собирает монету и избегает монстров.Избегайте использования примера:
Моя классная структура выглядит следующим образом.
Game Controller - Ответственный за нерестовые монеты и отслеживание состояния игры
Сетка - класс, который хранит объекты, которые в настоящее время находятся на сетке, и связанные с ними методы несколько сетки.
GridObject - абстрактный класс, представляющий объект на сетке. например игрок, монстр или монета.
Игрок, Монстр, Монета - Все виды GridObject.
Каков самый способ ООП для обработки столкновений? Желаемый результат: Игрок ударяет по монстру - конец игры, Игрок ударяет монеты - увеличивает счет, Монстр хиты Монета - ничего.
В настоящее время, когда объект GridObject перемещается, он уведомляет объект платы, который он хочет переместить; если это вызовет столкновение, я вызываю обработчик на GameController (через шаблон прослушивателя) для обработки столкновения. В этом обработчике, который принимает два GridObjects в качестве параметров, я использую множество команд «instanceof», чтобы отличать вышеуказанные случаи.
Каков наилучший способ избежать использования всего этого «экземпляра», который я прочитал, как правило, означает плохой дизайн?
Это приятное решение, что-то мне немного неловко об осуществлении этого с моим текущим кодом, но я не могу сейчас на него надавить ... Я еще раз прокомментирую, если у меня возникнут проблемы – WMycroft
Doesn ' t означает, что каждый класс, который реализует этот интерфейс, должен будет переопределить все эти логические методы, возвращая false для всех из них, кроме одного? Я чувствую, что это намного более грязно, чем просто оставлять вызовы instanceof. –
У вас могут быть абстрактные классы с реализацией по умолчанию –