Позвольте мне попробовать, чтобы вы начали. Я не думаю, что я действительно понимаю ваш код в данный момент, но давайте разберем проблему:
В функции есть пара основных элементов:
- Назначение изображения случайным образом для каждой плитки внутри цикла
- Отслеживать, какие изображения были назначены
Есть как минимум два способа сделать это:
- Переберите доску и назначьте случайное изображение для каждой плитки. Отслеживайте, сколько раз каждое изображение используется в отдельном массиве по индексу.
- Выполните итерацию по списку возможного значения плитки и случайным образом назначьте каждый элемент мозаике дважды. Это учитывает подсчет назначений, но вам нужно проверить каждую плитку, чтобы убедиться, что ей ранее не было назначено изображение.
В любом случае, вы, скорее всего, будете использовать java.util.Random для получения случайных целых чисел. Вы можете сделать это следующим образом:
Random randomizer = new Random();
int randomint = randomizer.nextInt(rowLength);
Очевидно, что для первого метода, описанного выше, вам нужно сгенерировать одно случайное число для каждой итерации внутреннего цикла, в то время как для второго вы будете генерировать два случайных числа для каждой итерации, чтобы получить координаты для доски.
Возьмите вышесказанное и посмотрите, где вы можете получить его Я буду рад помочь в дальнейшем.
Edit:
Хорошо, взглянем на ваш переделанный код, есть несколько проблем. Я не уверен, что такое getFoo () и addFoo (). Если вы создаете вспомогательные функции, пожалуйста, включите их в код.
Вот несколько псевдокодов для вас:
int[rowSize] timesTileUsed
for x_index = 0 to rowLength - 1
for y_index = 0 to rowLength - 1
{
do
randomNumber = generator.nextInt(rowLength)
while timesTileUsed[randomNumber] > 1
board[x_index][y_index] = new Tile(possibleTileValues[randomNumber])
timesTileUsed[randomNumber]++
}
Теперь обратите внимание, что это ужасно наивный способ сделать это, но я не думаю, что вы должны быть умны в этом.