У меня есть простая 2D игра, в которой есть квадраты, игрок (сиреневый) и враги (красный).
class Game {
List<List<Square>> map;
Player player;
List<Enemy> enemies; ...
Моя проблема в том, что я не знаю, как лучше всего хранить координаты (int x, int y) врагов. Сейчас каждый враг содержит свои координаты.
class Enemy {
int x;
int y; ...
Если я хочу проверить, содержит ли квадрат (map[x][y]) врага, мне придется перебрать всех врагов в списке. Это не очень хорошо, потому что проверка наличия врага в квадрате выполняется в игре часто. Я мог бы попытаться использовать Map<Coordinate, Enemy> enemies
, где ключом является координата врага, но тогда координата будет храниться в двух местах, и это может создать некоторые раздражающие ошибки.
Как мне организовать код, чтобы я мог легко и быстро получить доступ к координатам врага и проверить, есть ли в квадрате враг? Плохая ли это идея - хранить местоположение врага в классе врага? Какие-нибудь архитектурные/дизайнерские паттерны, которые могли бы мне помочь?
быстрый доступ к координатам врага (или вообще любой фигуры)
быстро определить, какая часть находится на заданной координате.
Следовательно, ваша идея использовать дополнительную карту (вместе с хранением пары координат внутри врага) хороша. Вам нужно убедиться, что в вашем коде будет только одно место, которому разрешено изменять координаты фрагмента, и этот код всегда синхронно обновляет как координаты фрагмента, так и содержимое карты. Это поможет держать под контролем избыточность и избежать упомянутых вами «раздражающих ошибок».
Конечно, то, что писали другие о переносе координат из класса enemy
, тоже возможно. Хотя это и не решает описанную проблему напрямую, но может помочь сделать реализацию замены координат в одном месте более жесткой.