Игра пятнашки на 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д