Игра пятнашки на C#: как обеспечить перемешивание кнопок
Формулировка задачи:
Добрый день, уважаемые господа.
Наткнулся я на один интересный код, авторство которого увы не известно, однако дабы была справедливость, приведу здесь на него ссылку http://vstdp.ru/Joomla/index.php/15.
Так вот, заинтересовала меня функция запуска новой игры:
В данном случае, все кнопки располагаются в порядке возрастания.
А как может выглядеть функция перемешивания кнопок?
Спасибо.
private void Start_Click(object sender, EventArgs e)
{
int i = 0;
for (int y = 0; y < 4; y++)
for (int x = 0; x < 4; x++)
{
Butons[i].Location = new Point(12 + x * 56, 41 + y * 56);
Butons[i++].Pozition = new Point(x, y);
}Решение задачи: «Игра пятнашки на C#: как обеспечить перемешивание кнопок»
textual
Листинг программы
unsafe int[,] GenerateBoard()
{
var board = new int[4, 4];
int length = board.Length;
int blank = 0;
var r = new Random();
fixed (int* arr = board)
{
// Генерация выигрышной комбинации упорядоченных тайлов от 1 до 15 с пустой клеткой в нижнем правом углу.
for (int i = 0; i < length - 1; i++)
arr[i] = i + 1;
// Перемешивание поля
for (int i = length - 1; i > 0; i--)
{
int j = r.Next(i);
Swap(ref arr[i], ref arr[j]);
if (arr[i] == 0) blank = i;
}
// Проверка на наличие решения
if (blank % 2 == length % 2)
{
int a = (blank + 1) % length;
int b = (blank + 2) % length;
Swap(ref arr[a], ref arr[b]);
}
}
return board;
}
void Swap<T>(ref T a, ref T b)
{
T c = a;
a = b;
b = c;
}