Итак, я делаю игру в тетрис, и одна из проблем, с которыми я сталкиваюсь, - это частичное вращение. Я знаю, что могу просто записать его, но это не правильный способ сделать это. Как работает система, у меня есть 2d-массив объекта 'Tile', объект 'Tile' имеет x, y coords, boolean isActive и цвет. Логическое значение isActive в основном указывает компьютеру, на котором фактически используются фрагменты (так как формы tetris не являются совершенными квадритералями).Тетрис: Поворот кусков?
Вот как я хотел бы сделать форму в моей системе:
public static Tile[][] shapeJ() {
Tile[][] tile = new Tile[3][2];
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 2; y++) {
tile[x][y] = new Tile(false, Color.blue);
}
}
tile[0][0].setActive(true);
tile[0][0].setX(0);
tile[0][0].setY(0);
tile[1][0].setActive(true);
tile[1][0].setX(50);
tile[1][0].setY(0);
tile[2][0].setActive(true);
tile[2][0].setX(100);
tile[2][0].setY(0);
tile[2][1].setActive(true);
tile[2][1].setX(100);
tile[2][1].setY(50);
return tile;
}
Теперь мне нужно повернуть этот объект, я не знаю, как сделать это без жесткого кодирования позиции. Для этого должен быть алгоритм. Может ли кто-нибудь помочь?
Hardcoding, какие позиции? Где каждая плитка тетронимо принадлежит в новой конфигурации? Если это то, что вы имеете в виду, спросите себя, что так плохо о «жесткой кодировке»? Обычно этот термин зарезервирован для входных или конфигурационных данных, которые могут быть изменены и должны быть сохранены в поле, но это было встроено непосредственно в код в качестве значения. Бит для изменения темы - это то, что делает жесткую кодировку плохой практикой в большинстве случаев. То, что вы описываете, в этом смысле не является жестким. – MarsAtomic
Значит, ты говоришь, что мне нужно его жестко записать? Думаю, я попробую. – zfollette
Почему бы не инкапсулировать свои фрагменты в 'class' или' enum' и реализовать интерфейс? Я бы включил в этот интерфейс 'void rotateLeft()' и 'void rotateRight()'. –