Какую структуру использовать для хранения карты игровых полей со сложными границами?

Есть карта игровых полей(см. рис). Есть активное поле. Перемещаться можно через любую синюю границу. Перемещаться через красные нельзя.
33c6f904.png

Вопрос как хранить такое в памяти? Полей будет большое число (несколько сот тысяч), требования к ресурсам высокие. В принципе, чтобы хранить карту, достаточно просто записывать координаты правых верхних углов(это ее полностью определит, хотя остается вопрос красных/синих границ), но тогда перемещение между полями будет затрачивать много ресурсов.
  • Вопрос задан
  • 3172 просмотра
Решения вопроса 1
TheHorse
@TheHorse
Cell: struct {
x,y, height, width: float/double/int/bool (про bool пошутил)
neighbors: list of cell;
isLeftRed, isRightRed, itTopRed, isBottomRed: bool;
}

Каждая ячейка хранит инфу о своем положении, ссылки на соседей и набор параметров указывающих на допустимость пересечения конкретной границы (на примере не нарисовано, и я надеюсь, что нет случаев когда для какой-то ячейки одна из границ может быть пересекаемой только в конкретном положении).
По такой структуре можно легко и быстро определять куда можно ходить, куда нельзя. Не сложно оптимизировать структуру для меншего потребления ОП сжав все параметры в некий набор байт.
И тогда может очень большая карта влезет в 10 мб, что, я верю, достаточный результат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
ertaquo
@ertaquo
Может просто линиями? Пересечения линий довольно легко проверить, да и будет более гибко — можно будет строить любые фигуры, а не только прямоугольники.
Ответ написан
Комментировать
ramilexe
@ramilexe
Может хранить только красные границы? Те, через которые запрещено ходить.
Ответ написан
Комментировать
Не надо придумывать велосипедов, используйте стандартную схему:

— Карту с границами в файл php. Обращение напрямую, поиска не надо. У каждой ячейки свой порядковый номер, параметры возможности перемещения и связи с другими ячейками.
— Положение объектов на карте (и игроков тоже) в memcached, можно с дублированием в БД.
— Profit
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы