Чтобы создать подобную карту без использования матрицы, я рекомендую начать с центральной плитки, а затем заполнить карту наружу, используя модифицированный алгоритм поиска в ширину. Прежде всего, нам нужно что-то немного лучше, чем список соседних плиток. Вы можете просто иметь четыре переменные, по одной для каждого направления, в котором хранится следующая плитка:
private Tabellone up = null;
private Tabellone down = null;
private Tabellone left = null;
private Tabellone right = null;
Скажем, мы начинаем с самой центральной плитки. Все, что вам нужно сделать сейчас, это выяснить, сколько направлений пустые, и создать новый объект Tablellone для каждого направления, убедившись в том, чтобы установить каждую из переменных в этом текущем объекте и установить соответствующую противоположную переменную в созданном объекте. .
Tabellone adj = new Tabellone();
up = adj;
adj.setDown(this);
После того, как вы заполнили все направления на этой плитке, затем выберите одну из других созданных вами плиток и выполните ту же операцию. Вот здесь и вступает в действие алгоритм поиска в ширину. Вы можете использовать очередь, чтобы просмотреть каждую созданную плитку и заполнить направления. Чтобы остановить алгоритм, просто установите ограничение на количество плиток, которые вы хотите создать, и используйте счетчик, чтобы отслеживать, сколько их было создано.
int count = 0;
ArrayList<Tabellone> queue = new ArrayList<Tabellone>()
queue.add(/*center tile*/);
while (count < 100) { //if we want 100 tiles
//take out the center tile from the beginning of the array list, create a tile for each direction and add those tiles to the array list, then increment count by 1.
}
Примечание: Этот алгоритм в его нынешнем виде создаст карту ромбовидной формы. Если вам нужен квадрат, вам потребуется переменная для каждого диагонального направления.
Конечно, если это кажется немного сложнее, чем вы хотели бы, я бы порекомендовал систему координат.