Примерно так:
Я не был уверен, что вы также хотите ограничить ввод 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>
Если они - 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];
}
}
Против часовой стрелки подобно.
Не поворачивайте части с кодом. Просто сохраните массив различных ориентаций части и цикла через них, когда часть будет повернута. Нет никакой потребности динамично повернуть их в игре Тетриса.
, Поскольку проблемной областью является Тетрис, Вы найдете, что алгоритм вращения вызывает нежелательные эффекты, такие как длинный тонкий Tetronimo, не чередующийся между двумя положениями (как это делает в реальной вещи).
В классическом Тетрисе существует очень немного перестановок объектов. У меня просто был бы постоянный массив для каждого "tetromino" в каждом из этих 4 положений и простой логике для выбора соответствующей на основе входа.
, Почему ненужные циклы ЦП, пытающиеся поворачивать это?
Если Вы хотите повернуть блок 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 |
| | ^ |
| | | |
\----/ \----/
Я сохранил бы (x, y) координаты "ячеек" и матрицы вращения использования для вращения их. См. Тянуть Повернутый Прямоугольник , например. У Вас, вероятно, есть к раунду результат к самым близким 0,5 инкрементам.