Игра пятнашки на C#: как обеспечить перемешивание кнопок

Узнай цену своей работы

Формулировка задачи:

Добрый день, уважаемые господа. Наткнулся я на один интересный код, авторство которого увы не известно, однако дабы была справедливость, приведу здесь на него ссылку http://vstdp.ru/Joomla/index.php/15. Так вот, заинтересовала меня функция запуска новой игры:
Листинг программы
  1. private void Start_Click(object sender, EventArgs e)
  2. {
  3. int i = 0;
  4. for (int y = 0; y < 4; y++)
  5. for (int x = 0; x < 4; x++)
  6. {
  7. Butons[i].Location = new Point(12 + x * 56, 41 + y * 56);
  8. Butons[i++].Pozition = new Point(x, y);
  9. }
В данном случае, все кнопки располагаются в порядке возрастания. А как может выглядеть функция перемешивания кнопок? Спасибо.

Решение задачи: «Игра пятнашки на C#: как обеспечить перемешивание кнопок»

textual
Листинг программы
  1. unsafe int[,] GenerateBoard()
  2. {
  3.     var board = new int[4, 4];
  4.  
  5.     int length = board.Length;
  6.     int blank = 0;
  7.     var r = new Random();
  8.  
  9.     fixed (int* arr = board)
  10.     {
  11.         // Генерация выигрышной комбинации упорядоченных тайлов от 1 до 15 с пустой клеткой в нижнем правом углу.
  12.         for (int i = 0; i < length - 1; i++)
  13.             arr[i] = i + 1;
  14.  
  15.         // Перемешивание поля
  16.         for (int i = length - 1; i > 0; i--)
  17.         {
  18.             int j = r.Next(i);
  19.             Swap(ref arr[i], ref arr[j]);
  20.             if (arr[i] == 0) blank = i;
  21.         }
  22.  
  23.         // Проверка на наличие решения
  24.         if (blank % 2 == length % 2)
  25.         {
  26.             int a = (blank + 1) % length;
  27.             int b = (blank + 2) % length;
  28.  
  29.             Swap(ref arr[a], ref arr[b]);
  30.         }
  31.     }
  32.  
  33.     return board;
  34. }
  35.  
  36. void Swap<T>(ref T a, ref T b)
  37. {
  38.     T c = a;
  39.     a = b;
  40.     b = c;
  41. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы