Сформировать массив, представляющий собой поле для игры в «Пятнашки» - C#
Формулировка задачи:
Надо сформировать массив, представляющий собой поле для игры в «Пятнашки». Поле является массивом 4x4, в клетках которого располагаются числа от 1 до 15 в случайном порядке без повторений. Одна клетка игрового поля остается свободной.
Решение задачи: «Сформировать массив, представляющий собой поле для игры в «Пятнашки»»
textual
Листинг программы
static void Main(string[] args)
{
const int N = 4;
int l = N * N;
//формируем сначала одномерный массив (0, 1, , ... , 15), 0 - пустая клетка
//будем работать пока с этим массивом
var array = Enumerable.Range(0, l).ToArray();
var rnd = new Random();
//переставляем элементы массива в случайном порядке
for(int i = l - 1; i >= 0; i--)
{
var j = rnd.Next(i);
Swap(ref array[i], ref array[j]);
}
//пусть наш массив - функция подстановки из индексов в значения
//определим четность подстановки
int count = 0;
for(int i = 0; i < l; i++)
{
for(int j = 0; j < i; j++)
if (array[i] < array[j])
count++;
}
//если подстановка нечетна - делаем еще одну транспозицию
if(count % 2 != 0)
{
int i = rnd.Next(l - 2);
Swap(ref array[i], ref array[i + 1]);
}
int[,] field = new int[N, N];
//приводим одномерный массив к двумерному полю
for(int i = 0; i < l; i++)
{
field[i / N, i % N] = array[i];
}
}
static void Swap(ref int a, ref int b)
{
var t = a;
a = b;
b = t;
}