Игра пятнашки на 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;
}

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы