Заполнять массив "по умному". Не пытаться генерить номер картинки, а генерить ее положение. Допустим у нас есть массив 6х6. Сначала заполняем его нулями, картинки при этом нумеруются с 1. Теперь берем и генерируем расположение картинки в массиве. Если место уже занято (в соотв. ячейке не 0), то просто сдвигаем по кругу. далее еще раз повторяем этот алгоритм для парной картинки. Далее переходим к картинке номер 2. Для примера - на одномерном массиве (на свой перепишешь сам) для массива из 4х элементов и 2х рактинок (т.е. всего картинок будет 4):
Код:
var
A : Array [1..4] Of Integer;
procedure Generate;
procedure GenPlace(No : Integer);
var
N, I : Integer;
begin
N := Random(4) + 1; // от 1 до 4;
If A[N] = 0
Then A[N] := No // место пустое
Else // место уже занято - начинаем сдвигать, пока не найдем пустое
Begin
I := N + 1;
While I <= 4 Do
Begin
If A[i] = 0
Then A[i] := No // место пустое
Else
Begin
Inc(I);
If I > 4 Then I := 1;
End;
End;
End;
end;
var
I : Integer;
begin
// сначала очищаем массив
For I := 1 To 4 Do A[i] := 0;
// Теперь поехали генерить места картинок.
// Внешний цикл - картинки. У нас их 2.
For I := 1 To 2 Do
Begin
GenPlace(I); // первая из пары
GenPlace(I); // вторая
End;
end;
Как-то так. Код можно оптимизировать, то так более понятен алгоритм.