Я сделал колхознее вариант.
Делаю рандом цифр от 1 до 9 и через 3 ифа проверяю равенство с 1-4-7, 2-5-8, 3-6-9 и, соответственно, спавню блоки, если цифры совпадают с рандомным значением
Попробуй спавнить блоки по сетке. Не нужно записывать сетку, просто заспавнил блок - сдвинул спавн линию дальше на шаг. Если нужно заспавнить больше одного блока в линии то хэндли позиции и запоминай где в текущей линии ставить нельзя