Есть фигура из тетриса (любая из 7), а в коде прописан массив из Point
. Этот массив состоит из 4 элементов, так как в тетрисе каждая фигура — это 4 квадрата.
Point[] cord = new Point[4] { new Point(0,4), new Point(0,5),
new Point(0,6), new Point(0,6) }
И есть игровое поле:
int[] field = new int[10, 20];
Оно заполнено нулями, кроме координат из cord (они заполнены единицами).
Так вот, как поворачивать эту фигуру на 90? Может есть какая-нибудь формула, а то прописывать в коде 4 положения каждой фигуры это не очень.
Если исходный массив [0 1 2 3] выглядит как
0 1
2 3
То его ротация будет выглядеть как
1 3
0 2
То есть массив превращается в [1 3 0 2]
Чтобы это сделать для 4 элементов, не надо ни цмклов, ничего, например
public void Rotate<T>(T[] input)
{
T i00 = input[0];
T i01 = input[1];
T i10 = input[2];
T i11 = input[3];
input[0] = i01;
input[1] = i11;
input[2] = i00;
input[3] = i10;
}
Проверка
Для общего случая я позаимствовал и немного допилил реализацию отсюда
static void Rotate<T>(int width, T[] mat)
{
for (int x = 0; x < width / 2; x++)
{
for (int y = x; y < width - x - 1; y++)
{
T temp = mat[GetIndex(x, y, width)];
mat[GetIndex(x, y, width)] =
mat[GetIndex(y, width - 1 - x, width)];
mat[GetIndex(y, width - 1 - x, width)] =
mat[GetIndex(width - 1 - x, width - 1 - y, width)];
mat[GetIndex(width - 1 - x, width - 1 - y, width)] =
mat[GetIndex(width - 1 - y, x, width)];
mat[GetIndex(width - 1 - y, x, width)] = temp;
}
}
}
static int GetIndex(int i, int j, int width)
{
return i*width+j;
}
Проверка
Сделал по простой формуле, все заработало:
x2 = px + py - y1
y2 = x1 + py - px
Где px
и py
это координаты квадрата, вокруг которого крутятся все остальные, а x1
и y1
это текущие координаты.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Пытаюсь выполнить подключение к WCF сервису через проксиНа прокси настроена авторизация по логину-паролю
Необходимо создать таблицу, которая будет иметь следующую шапку, желательно использовать MVVM
Есть служба Windows, которая является хостом для WCF-службыПри инициализации службы Windows подписываюсь на событие