У меня есть задача, основанная на формациях тетриса, которую я должен поместить в очередь, а затем из очереди (если выполняется условие) поместить формацию в двумерный массив с наиболее оптимальным заполнением массива.
Я сделал формирования из 2D-массивов и поместил их в очередь, но я не знаю, как получить формирования из очереди в 2D-массив. Условие, которое определяет, попадет ли формация в двумерный массив, состоит в том, достаточно ли места для него. Если нет, формирование должно быть enqueue () d до конца очереди, чтобы использовать его позже.
int[,] I1 = new int[4, 1] { { 1 }, { 1 }, { 1 }, { 1 } };
int[,] I2 = new int[1, 4] { { 1, 1, 1, 1 } };
int[,] Z1 = new int[3, 2] { { 0, 1 }, { 1, 1 }, { 1, 0 } };
и т.д..
В этой очереди:
Queue<int[,]> myqueue = new Queue<int[,]>();
myqueue.Enqueue(I1);
myqueue.Enqueue(I2);
myqueue.Enqueue(Z1);
И я попытался скопировать их в 2D-массив следующим образом:
int[,] Drawer = new int[10, 20];
for (int i = 0; i < Drawer.GetLength(0); i++)
{
for (int j = 0; j < Drawer.GetLength(1); j++)
{
while (Drawer[i,j]==0&& myqueue.Count >0)
{
int[,] dequeued = myqueue.Dequeue();
for (int k = 0; k < dequeued.GetLength(0); k++)
{
for (int l = 0; l < dequeued.GetLength(1); l++)
{
Drawer[i, j] = dequeued[k, l];
}
}
}
}
}
Но это не работает. Я также подумал не о точном копировании элемента в массив, а просто о заполнении массива соответствующим количеством единиц, основываясь на элементе из очереди.
(Я отредактировал код и изменил венгерские переменные на английский и добавил условие, чтобы оно не было бесконечным циклом. Также массив Drawer [,] - это матрица, которая должна отображать ящик, содержащий элементы, например, автоматический тетрис, который заполняет всю матрицу, не оставляя пустого пространства.)