Обстоятельства:
Двумерный массив представляет из себя игровое поле, где каждый элемент массива - это клеточка этого поля. Поля бывают доступные и недоступные (вода). Кроме того, по полю перемещаются персонажи (массив объектов) каждый из которых в каждый момент времени находится в той или иной клеточке поля (имеет координаты).
Задача:
Находить клетку, подходящую для того, что бы в ней появился новый персонаж. Условия "подходящести" следующие: а. она должна быть доступна; б. никакой из уже существующих персонажей не должен находиться от неё ближе чем на икс клеток.
Долгое ломание головы выявило всего два варианта решения (оба уже реализовал и опробовал):
1. в цикле с условием "пока не найду", брать рандомную клетку на игровом поле, проверять её на доступность, после чего пробегать по всем объектам, проверяя нет ли среди них такого, который бы находился на расстоянии от этой клетки, меньшем чем допустимо.
2. создавать дополнительный массив булевых, размером с игровое поле, после чего пробегаться по массиву объектов, отмечая все находящие рядом клетки, как "недоступные" в связи с близостью к уже существующему объекту. после чего бежать по массиву поля, в поисках первой же доступной клетки (и "не вода", и "не отмечена в булевом массиве как недоступная").
Оба варианта мне не нравятся. Первый, в следствии его нестабильности (непредсказуемо с какой попытки "повезёт", а кроме того невозможно определить ситуацию, когда искомого попросту несуществует), второй, потому что он оказывается в среднем на порядок более ресурсопрожорливым, чем первый.
Но ничего другого в голову не приходит. Есть какие-нибудь идеи?