테트리스에서 블록을 회전하는 방법


16

높이가 20 행, 폭이 10 개인 게임 보드 그리드가 있는데 원점 (0,0)이 왼쪽 상단에 있습니다. 4 개의 블록으로 구성된 테 트리 미노가 있습니다. 왼쪽 상단 모서리 원점을 기준으로 각 블록의 x, y 위치가 있습니다. 또한 왼쪽 상단 모서리 원점을 기준으로 회전하려는 지점 인 피벗의 위치도 있습니다.

각 블록은 게임 보드 정사각형에서 정수 위치를 가지므로 피벗은 블록 사이에서 분수 위치를 갖습니다 (예 : (10.5,10.5)).

내 질문은 : 피벗을 중심으로 각 블록을 회전시키는 데 사용할 수있는 수식은 무엇입니까?

기존의 유사한 질문과 답변을 이미 보았지만 일할 수있는 답변을 찾을 수 없었습니다.

도움을 주시면 감사하겠습니다.


게임 개발자에 속합니다.

하고 여기에 있다면 ... 우리에게 약간의 데이터 구조를 보여

여러 개의 직각으로 만 회전하는 경우 이것은 매우 기본적이어야합니다. 몇 개의 다이어그램을 그리면 정수 솔루션을 알아낼 수 있습니다.
Kerrek SB

3
나는 실제로 회전을 계산하지 않고 단순히 네 개의 가능한 회전 버전을 모두 배열에 넣습니다.
fredoverflow

1
@FredOverflow가 말한 것을 제안합니다. 당신이 보면 내 질문 (당신과 유사), 당신은 내 구현을위한 하나의 블록을 저장하는 방법을 참조하십시오.
bummzack

답변:


21

표준 테트리스 회전 로직을 슈퍼 회전 시스템이라고합니다. SRS는 높은 수준의 테트리스 플레이에 적합하여 벽 차기 및 t- 스핀을 다양하게 변형 할 수 있습니다.

모든 테트로 미노는 경계 사각형 안에 존재하며 방해받지 않는 한이 사각형의 중심을 중심으로 회전합니다. 너비 3 (J, L, S, T, Z)의 테트라 미노는 경계 사각형의 상단 두 행에 배치되고 평평한면을 아래로하여 (J, L 및 T의 경우) 배치됩니다. 나는 상단 가운데 줄에 배치됩니다.

모든 테트로 미노는 일반적으로 운동장 상단에 2 개의 숨겨진 줄로 나타납니다. 이 열의 중앙에 배치되어 왼쪽으로 둥글게됩니다. 테트로 미노가 착륙하면 잠금 지연이 만료 될 때까지 잠기지 않습니다. Tetris Company에서 Infinity라고하는 잠금 지연 동작은 tetromino를 이동하거나 회전 할 때마다 잠금 지연을 재설정합니다. 하드 드롭은 일반적으로 위로 지연되며 잠금 지연이 없습니다.

회전 경계 상자에있는 테트로 미노.

Arika의 Tetris : The Grand Master 게임 에서 사용 된 ARS라는 또 다른 일반적인 변형이 있습니다 .


7

원점을 중심으로 회전하는 일반 공식은 다음과 같습니다.

xNew = x * cos(a) - y * sin(a)
yNew = x * sin(a) + y * cos(a)

90 도는

xNew = -y
yNew = x

따라서 먼저 피벗 점에 상대적으로 벽돌 중심 좌표를 얻습니다.

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

그런 다음 피벗 점을 중심으로 회전하십시오.

x1 = -y = yPivot - yBrickCenter
y1 = x = xBrickCenter - xPivot

그런 다음 회전 지점에 피벗 좌표를 추가하십시오.

newXBrickCenter = xPivot + x1 = xPivot + yPivot - yBrickCenter
newYBrickCenter = yPivot + y1 = yPivot - xPivot + xBrickCenter

그러나 90 도의 배수로 회전해야하는 경우 각 방향에 대해 4 개의 브릭 위치 세트를 저장하고 실제로 회전하는 대신 이들 사이를 전환 할 수 있습니다.


0

해당 피벗 블록을 중심으로 모든 사각 링 (a-h, 2 위치, A-P, 4 위치 등)을 회전 할 수 있습니다.

ABCDE MNOPA
PabcF LghaB
Oh.dG-> Kf.bC
NgfeH JedcD
MLKJI IHGFE

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.