как мой личный проект, я разрабатываю игру, к которой пользователи могут присоединиться в любое время.
У меня есть мозаичная карта мира, созданная из простого растрового изображения, в котором есть ресурсы в случайных положениях по всей карте, кроме океанов.
Когда игрок присоединяется, я хочу создать свою начальную позицию в месте, где есть хотя бы 1 клетка каждого из 4-х ресурсов в диапазоне (круг с неподвижным, чтобы определить диаметр, я думаю о 3-4 клетках), но нет плитки океана (Tile.Type! = "ocean") и не конфликтуют с полем, принадлежащим другому игроку (Tile.Owner == null).
Размер карты может варьироваться, в настоящее время он равен 600x450, и он реализован в виде простого массива: Tile [] [], где Tile.Resource имеет значение null или имеет Tile.Resource.Type в качестве строки имени ресурса (так как он настраивается текстовыми файлами, подходящими для любого пейзажа, в который я хочу его вставить, поэтому встроенные перечисления невозможны).
В настоящее время у меня есть простой цикл, который проходит через каждую возможную позицию, проверяет каждое поле в диапазоне и подсчитывает количество каждого поля ресурса и сбрасывает его, если его нет для одного из них или если один из них принадлежит игроку или это поле океана.
Я бы предпочел, чтобы он обнаружил случайную позицию, но это не является обязательным требованием, однако моносовместимость является требованием.
Как лучше всего реализовать алгоритм для этого в C #?
Редактировать
Область игроков может и будет увеличиваться / изменяться, ресурсы могут быть использованы и могут даже появляться случайным образом (=> "Ваши поисковики нашли новую золотую жилу"), поэтому предварительно Расчетные позиции, вероятно, не будут работать.