IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Тетрис
сообщение
Сообщение #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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


Все решили подождать оставшийся код.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

Конечно легче всего вертеть квадратную матрицу, но от этого сбивается угол поворота
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.09.2020 2:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name