В игре на основе спрайтов, которую я пишу, каждое поле в двумерной сетке содержит стопку спрайтов. В основном считается верхний.
В модуле правил игры у меня много кода вроде этого:
public boolean isGameWon(Board board) {
for (Point point : board.getTargetPoints())
if(!(board.getTopSpriteAt(point) instanceof Box))
return false;
return true;
}
Upadate: //Do something
считается, если есть Box
поверх каждого Target
. Я не вижу, как это можно сделать, просто добавив doSomething()
к Sprite, если только doSomething()
не возвращает 1, если спрайт является коробкой, и 0 в противном случае. (и это будет то же самое, что и instanceof).
Я знаю, что instanceof считается вредным, потому что он убивает идею объектно-ориентированного программирования.
Однако я не уверен, как исправить код в моем случае. Вот некоторые мои мысли:
isABox()
в интерфейс Sprite
. Box
будет интерфейсом, чтобы другие классы могли получить ту же привилегию? Я надеюсь, что вы уже пробовали что-то подобное и сможете направить меня в правильном направлении.