// Рандомное формирование первой стороки

for (short i = 0; i <9; i++)

{

short tempRand = (short)(rand.Next (45689) % (9 – i));

field [0, i].Value = numbers [tempRand];

for (short j = tempRand; j <9 – i – 1; j++)

{

numbers [j] = numbers [j +1];

}

}

// Формирование строк согласно перестановкам

numbers = new short [9] {8, 3, 4, 6, 7, 0, 5, 1, 2};

// Формирование второй строки

for (short i = 0; i <9; i++)

{

field [1, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {5, 6, 8, 2, 0, 7, 1, 3, 4};

// Формирование третьей строки

for (short i = 0; i <9; i++)

{

field [2, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {2, 8, 6, 4, 3, 1, 7, 0, 5};

// Формирование четвертой строки

for (short i = 0; i <9; i++)

{

field [3, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {7, 5, 3, 1, 2, 6, 4, 8, 0};

// Формирование пятой строки

for (short i = 0; i <9; i++)

{

field [4, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {4, 2, 1, 7, 8, 3, 0, 5, 6};

// Формирование шестой строки

for (short i = 0; i <9; i++)

{

field [5, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {6, 0, 5, 8, 1, 4, 3, 2, 7};

// Формирование седьмой строки

for (short i = 0; i <9; i++)

{

field [6, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {3, 4, 7, 0, 5, 8, 2, 6, 1};

// Формирование восьмой строки

for (short i = 0; i <9; i++)

{

field [7, numbers[i]].Value = field [0, i].Value;

}

numbers = new short [9] {1, 7, 0, 5, 6, 2, 8, 4, 3};

// Формирование девятой строки

for (short i = 0; i <9; i++)

{

field [8, numbers[i]].Value = field [0, i].Value;

}

// Переменивание строк/столбцов/регионов

MixHorizontalLines ();

MixVerticalLines ();

MixHorizontalRegions ();

MixVerticalRegions ();

// Освобождение клеток на поле

DeleteNumbersFromField ();

}

// Перестановка строк/столбцов в каждом регионе (блок из трех строк/столбцов)

public void MixHorizontalLines ()

{

Random rand = new Random ();

short line1, line2;

//Переставляем две строки в первой тройке

line1 = (short)(rand.Next (12432) % 3);

line2 = (short)(rand.Next (87457) % 3);

ExchangeValuesOfHorizontalLines (line1, line2);

//Переставляем две строки во второй тройке

line1 = (short)(rand.Next (12432) % 3 +3);

line2 = (short)(rand.Next (87457) % 3 +3);

ExchangeValuesOfHorizontalLines (line1, line2);

//Переставляем две строки в третьей тройке

line1 = (short)(rand.Next (12432) % 3 +6);

line2 = (short)(rand.Next (87457) % 3 +6);

ExchangeValuesOfHorizontalLines (line1, line2);

}

public void ExchangeValuesOfHorizontalLines (short line1, short line2)

{

if (line1!= line2)

{

short lineTemp;

for (short i = 0; i <9; i++)

{

lineTemp = field [line1, i].Value;

field [line1, i].Value = field [line2, i].Value;

field [line2, i].Value = lineTemp;

}

}

}

public void MixVerticalLines ()

{

Random rand = new Random ();

short line1, line2;

//Переставляем две строки в первой тройке

line1 = (short)(rand.Next (12432) % 3);

line2 = (short)(rand.Next (87457) % 3);

ExchangeValuesOfVerticalLines (line1, line2);

//Переставляем две строки во второй тройке

line1 = (short)(rand.Next (12432) % 3 +3);

line2 = (short)(rand.Next (87457) % 3 +3);

ExchangeValuesOfVerticalLines (line1, line2);

//Переставляем две строки в третьей тройке

line1 = (short)(rand.Next (12432) % 3 +6);

line2 = (short)(rand.Next (87457) % 3 +6);

ExchangeValuesOfVerticalLines (line1, line2);

}

public void ExchangeValuesOfVerticalLines (short line1, short line2)

{

if (line1!= line2)

{

short lineTemp;

for (short i = 0; i <9; i++)

{

lineTemp = field [i, line1].Value;

field [i, line1].Value = field [i, line2].Value;

field [i, line2].Value = lineTemp;