Я знаю, что об этом много спрашивали, но я хотел бы знать, как вращать кусок тетриса?
Я уже сделал длинное и плохое решение (~ 170 строк кода), но должен быть более простой способ сделать это.
Мои части тетриса состоят из 4 блоков, которые все знают свое местоположение (строка и столбец) в матрице. Сама матрица типизирована символами, поэтому все 4 блока - это буквы. Например, это выглядит так:
......
..T...
.TTT..
......
Я попытался смоделировать свою матрицу как систему координат, посчитав среднюю строку и столбец и использовав ее в качестве оригинала, а затем попытался применить этот простой алгоритм, который я нашел:
Поворот на 90 градусов (x, y) = (-y, x)
Похоже, что это работает, только если мой кусок находится в центре матрицы. Я понятия не имею, что мне делать, я думал об этом весь день. Вот мой метод:
public void rotatePiece(ArrayList<Block> random) {
int distance = 0; // how far is the origo
for (int i=0; i < 4; ++i)
board[random.get(i).getRow()][random.get(i).getColumn()] = '.'; // erases the current location of the piece
for (int i=0; i < 4; ++i) {
distance = Math.abs(random.get(i).getColumn()-middleColumn);
if (random.get(i).getColumn() < middleColumn)
random.get(i).setColumn(random.get(i).getColumn()+(distance*2)); // "throws" the location of the block to the other side of the origo
else
random.get(i).setColumn(random.get(i).getColumn()-(distance*2));
int help = random.get(i).getColumn();
random.get(i).setColumn(random.get(i).getRow()); // (x, y) = (-y, x)
random.get(i).setRow(help);
}
for (int i=0; i < 4; ++i)
board[random.get(i).getRow()][random.get(i).getColumn()] = random.get(0).getStyle(); // saves the new location of the piece in the matrix