Как повернуть 2D массив целых чисел

Примерно так:

Я не был уверен, что вы также хотите ограничить ввод 50 символами.

let max = 200;
const a = document.querySelector('#a'); // input
const b = document.querySelector('#b'); // textarea 
const c = document.querySelector('#c'); // output

a.addEventListener('input', e => {
    //  update textarea max length
    b.maxLength = max - a.value.length;

    //  update characters left
    c.textContent = max - a.value.length - b.value.length;
})
b.addEventListener('input', e => {
    //  use this if you don't want to limit the input
    //  update input max length
    //  a.maxLength = max - b.value.length;

    // use this if you want to limit the input to 50 or less
    // (if textarea has more than 150 characters)
    a.maxLength = Math.min(max - a.value.length, 50);

    //  update characters left
    c.textContent = max -  a.value.length - b.value.length;
})

//  initial characters left
c.textContent = max;
input,
textarea { 
  border: 1px solid #ccc; 
  width: 50%; 
  margin:5px 0;
  font-size: 16px;
}
<input id="a" maxlength="50" />
<textarea id="b" rows="4" maxlength="200"></textarea>
<p>Characters left: <output id="c"></output></p>

17
задан Brock Woolf 12 August 2010 в 13:33
поделиться

5 ответов

Если они - 2D массив, можно реализовать вращение путем копирования с различными заказами доступа к массиву.

т.е. для по часовой стрелке вращения, попробуйте:

int [,] newArray = new int[4,4];

for (int i=3;i>=0;--i)
{
    for (int j=0;j<4;++j)
    {
         newArray[j,3-i] = array[i,j];
    }
}

Против часовой стрелки подобно.

29
ответ дан 30 November 2019 в 10:39
поделиться

Не поворачивайте части с кодом. Просто сохраните массив различных ориентаций части и цикла через них, когда часть будет повернута. Нет никакой потребности динамично повернуть их в игре Тетриса.

, Поскольку проблемной областью является Тетрис, Вы найдете, что алгоритм вращения вызывает нежелательные эффекты, такие как длинный тонкий Tetronimo, не чередующийся между двумя положениями (как это делает в реальной вещи).

11
ответ дан 30 November 2019 в 10:39
поделиться

В классическом Тетрисе существует очень немного перестановок объектов. У меня просто был бы постоянный массив для каждого "tetromino" в каждом из этих 4 положений и простой логике для выбора соответствующей на основе входа.

, Почему ненужные циклы ЦП, пытающиеся поворачивать это?

6
ответ дан 30 November 2019 в 10:39
поделиться

Если Вы хотите повернуть блок 4 x 4, Вы просто перемещаете положения:

A B C A
C D D B
B D D C
A C B A

Каждый перемещения к следующему A и то же для B, C и D.

   /-----\
   |     |
   |     V
   A B C A
/->C D>D B--\
|  B D D C  |
|  A C B A  |
|    | ^    |
|    | |    |
\----/ \----/     
4
ответ дан 30 November 2019 в 10:39
поделиться

Я сохранил бы (x, y) координаты "ячеек" и матрицы вращения использования для вращения их. См. Тянуть Повернутый Прямоугольник , например. У Вас, вероятно, есть к раунду результат к самым близким 0,5 инкрементам.

1
ответ дан 30 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: