Тетрис |
Тетрис |
Ivs |
26.03.2003 19:26
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 209 Репутация: 0 |
На днях написал тетрис и возникла небольшая проблемка, дело в том что у меня фигуры крутятся на 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; Так вот у кого какие идеи по этому поводу ? , высказывайтесь не стесняйтесь :-) Пример всей программы приведу позже. -------------------- Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
|
AlaRic |
27.03.2003 16:34
Сообщение
#2
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Все решили подождать оставшийся код.
|
GLuk |
27.03.2003 20:14
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Попробуй, то, что я юзал в написании своего первого тетриса, а именно - определение массива 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 Конечно легче всего вертеть квадратную матрицу, но от этого сбивается угол поворота |
Текстовая версия | 27.09.2024 18:14 |