Игра 2048,рандом - C#
Формулировка задачи:
Была поставлена задача,создать метод генерации случайного числа (2 или 4) в случайной свободной клетке массива 4 на 4,свободная клетка это "0"
Сделал массив,генератор случайного числа 2 или 4 тоже сделал,но как сделать чтобы это число генерировалось именно в случайной свободной клетке,а не в определенной как у меня.
Понимание как сделать есть,но не хватает опыта и знания синтаксиса
Помогите пожалуйста
Вот мой код:
static void Main(string[] args)
{
int[,] m = new int[,] { { 0, 2, 0, 0 }, { 0, 0, 0, 0 }, { 4, 4, 16, 16 }, { 2, 64, 32, 64 } };
Show(m);
for (int x = 0; x < m.GetLength(1); x++)
random(m);
Show(m);
Console.ReadLine();
}
static void Show(int[,] a)
{
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
Console.Write("{0,5}", a[i, j]);
}
Console.WriteLine();
Console.WriteLine();
}
}
static int[,] random(int[,] a)
{
for (int x = 0; x < a.GetLength(1); x++)
for (int i = a.GetLength(1) - 1; i > 0; i--)
{
Random rand = new Random();
int newValue = (rand.Next(2) != 0) ? 2 : 4;
a[0,0] = newValue;
}
return a;
}
}
}Решение задачи: «Игра 2048,рандом»
textual
Листинг программы
Random rnd=new Random();
int rndRow, rndCol;
var zeros=m.Cast<int>()
.Select((x, i) => new {x,i})
.Where(arr=>arr.x==0)
.Select(arr=>arr.i)
.ToArray();
var rndZero=zeros[rnd.Next(0,zeros.Length)];
rndRow=rndZero/m.GetLength(1);
rndCol=rndZero%m.GetLength(0);
Console.WriteLine("{0}, {1}",rndCol,rndRow);