Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Тетрис

Автор: Ivs 26.03.2003 23:26

На днях написал тетрис и возникла небольшая проблемка, дело в том что у меня фигуры крутятся на 90 гр., т.е. происходит поворот 2х мерного массива на 90 гр, но это немного не то что надо, в тетрисе как известно имеются разные степени вращения фигур

 8
88
8  

Например у такой всего две степени вращения это против часовой и обратно, у квадрата вообще их нет. Так вот приведу пример из своей программы :

Код

Procedure Rotate;
begin
  { Здесь поворот на 90 гр. массива  }
  for i:=1 to 4 do
     for j:=1 to 4 do
      B[1,4-j+1,i]:=Figures[Choice,i,j]; {Choice - указатель на фигуру в 3х мерном массиве}
 
  { Проверка на возможность такого поворота }
  if tChek then
     for i:=1 to 4 do
      for j:=1 to 4 do Figures[Choice,i,j]:=B[1,i,j];
end;


Так вот у кого какие идеи по этому поводу ? , высказывайтесь не стесняйтесь :-)
Пример всей программы приведу позже.

Автор: AlaRic 27.03.2003 20:34

Все решили подождать оставшийся код.

Автор: GLuk 28.03.2003 0:14

Попробуй, то, что я юзал в написании своего первого тетриса, а именно - определение массива 5,5 и задание реперной точки (точки поворота).

Предположим у нас есть массив 5х5 :

00000
00000
00Х00      - Х - это реперная точка*
00000
00000

* реперная точка - это точка вокруг которой происходит поворот объекта.

Теперь прикинем варианты:

00100
00100
11Х11           - 1- возможные части объекта
00100
00100

Для них код будет выглядеть след. образом, если:

If (X=3) or (Y=3) then Z:=X; X:=Y; Y:=Z;

След.:

10001
01010
00Х00
01010
10001

If abs(x-R[x]) = abs(y-R[x]) then
If X<>Y then X:=Y
else
     Y:=Y-(X DIV 2)???

Вот такой алгоритм  :P

Конечно легче всего вертеть квадратную матрицу, но от этого сбивается угол поворота