создать таблицу стран
Содержит информацию о смежности, каждая страну обычно до 7 соседей, если у вас есть маленькие государства, как Ватикан, Люксембург, ... Таким образом, для равномерного отображения разбиения можно использовать статическое число соседей , Что-то вроде этого:
int map[countries_max][neighbors_max];
Единая карта деление
Есть несколько способов получить информацию о смежности. Для равномерно разделенной карты вы можете вычислить среднюю точку пограничного пути, которая обычно находится недалеко от центра страны. Возьмите каждую точку страны и найдите ближайшие страны (точки). Если расстояние меньше, то перечислите индекс страны в списке соседей. Тревога может быть вокруг размера страны (для разделения прямоугольников вам нужно 2 трески на одну ось).
родовой карта деление
Вы должны проверить, если какая-либо часть границы пути страны рядом/параллельно с любой частью другой страны границы пути. Если да, то сохраните индекс страны в списке соседей. Это можно сделать только в том случае, если у вас есть пограничные пути.
родовое карта деление (без пограничных путей)
В случае, если ваша карта растр или вектор, но не в виде замкнутых многоугольников/путей в стране (например, вы можете иметь деление пути вместо), то выше подходы непригодны. Когда вы атакуете, вы знаете начальную и конечную позицию атаки так, чтобы лить линию от начала до конца (DDA или Bresenham) и подсчитывать, сколько пересекаемых границ пересекаются (подсчет краев цвета). Если счетчик равен 1, действительный. У этого будут ложные негативы, если вы будете атаковать несколько раз подряд, пересекая одну и ту же границу.
В чем проблема? эти пути, которые вы хотите сохранить - от куда и куда они идут? –
http://i.imgur.com/hNpThyB.jpg Итак, на этой карте. Игрок1, у которого есть зеленая территория, должен быть способен атаковать желтую территорию 2, но не 3, так как у Игрока 1 нет границ с территорией 3. Моя проблема в том, что мне нужно найти способ предотвратить нападение на территорию 3. – LazyHands
Тогда все, что вы нужна карта смежности. Все, что вам нужно знать, заключается в том, есть ли на территории, на которой будет атакован, сосед, принадлежащий атакующему игроку ... –