Таким образом, мы имеем 5x5 2d-массив так:Рассчитать «ограничивающий прямоугольник» для многомерного массива
gridmodel:
[
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]
]
Это означает, как блочный объект выглядит и как она рисуется на сетке, чтобы мы могли иметь что-то вроде этого, например:
gridmodel:
[
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 1, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0]
]
Что представляет собой простой Т-блок от тетриса. Если форма не начинается с верхнего левого угла, форма просто сдвигается во время выполнения, так что она работает правильно.
В любом случае, это не имеет никакого значения. Мне нужен способ вычисления ограничивающей рамки для любой формы в этой сетке 5x5. Форма может иметь отверстия или форма может состоять только из одного 1 в массиве, в основном 5x5 может быть любой комбинацией 1 и 0.
Чтобы вычислить ограничительную рамку, я решил, что мне просто нужно найти, какая из них самая верхняя и левая, а какая - самая правая и самая нижняя.
Я сделал это, который должен найти верхний левый 1:
var bb =
{
x1: null,
y1: null,
x2: null,
y2: null
}
var toppest = null;
var leftest = null;
for(var y = 0; y < gridmodel.length; y++)
{
for(var x = 0; x < gridmodel[y].length; x++)
{
if(gridmodel[y][x] === 1)
{
if(toppest === null)
{
toppest = { x: x, y: y };
}
if(leftest === null)
{
leftest = { x: x, y: y };
}
else
{
if(x < leftest.x)
{
leftest = { x: x, y: y };
}
}
}
}
}
Но это уже выглядит путь более сложным, и это едва ли решение половину проблемы.
@Teemu Ahh, я забыл indexOf и lastIndexOf. Спасибо за напоминание вам тоже! – Piwwoli