Como girar blocos no tetris

17

Eu tenho uma grade de tabuleiro de jogo com 20 linhas de altura e 10 colunas de largura, com a origem (0,0) no canto superior esquerdo. Eu tenho um tetrimino em jogo, que é composto por quatro blocos. Eu tenho a localização x, y de cada bloco em relação à origem do canto superior esquerdo. Também tenho a posição do pivô, o ponto em torno do qual desejo girar que é relativo à origem do canto superior esquerdo.

Cada bloco tem uma posição inteira em um quadrado de placa de jogo e, portanto, o pivô tem uma posição fracionária entre os blocos, por exemplo (10.5,10.5)

Minha pergunta é: Qual fórmula posso usar para girar cada bloco ao redor do pivô?

Eu já examinei perguntas e respostas semelhantes existentes, mas não consegui encontrar uma resposta que pudesse começar a trabalhar.

Ajuda seria muito apreciada.


fonte
pertence ao desenvolvedor do jogo.
e se estiver aqui ... nos mostre alguma estrutura de dados
Se você estiver girando apenas por múltiplos ângulos retos, isso deve ser bastante básico. Basta desenhar alguns diagramas e você poderá descobrir uma solução inteira.
Kerrek SB 01/10/11
3
Eu não me incomodaria em calcular as rotações, basta colocar as quatro versões rotativas possíveis em uma matriz.
Fredoverflow 1/10/11
1
Eu também sugeriria o que o @FredOverflow disse. Se você examinar minha pergunta (que é semelhante à sua), verá como eu armazenei um único bloco para minha implementação.
bummzack

Respostas:

22

A lógica de rotação padrão do Tetris é chamada de Super Rotation System. O SRS é adequado para o jogo de alto nível do Tetris, permitindo muitas variações de chutes na parede e giros em t.

Todos os tetrominós existem dentro de um quadrado delimitador e giram em torno do centro desse quadrado, a menos que estejam obstruídos. Os tetrominós de largura 3 (J, L, S, T, Z) são colocados nas duas linhas superiores do quadrado delimitador e (para J, L e T) com o lado plano voltado para baixo. Eu é colocado na linha do meio superior.

Todos os tetrominos aparecem em 2 linhas geralmente escondidas no topo do campo de jogo. Eles são colocados no centro dessas linhas, arredondando para a esquerda. Quando um tetromino aterrissa, ele não trava até que o atraso do bloqueio expire. O comportamento do atraso de bloqueio, chamado Infinity pela Tetris Company, redefine o atraso de bloqueio sempre que o tetromino é movido ou girado. A queda brusca geralmente é mapeada para cima, o que não tem atraso de bloqueio.

Tetrominos em suas caixas delimitadoras de rotação.

Existe uma outra variante comum chamada ARS, que foi usada nos jogos Tetris: The Grand Master de Arika .


fonte
7

A fórmula geral para girar em torno da origem é

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

Por 90 graus, torna-se

xNew = -y
yNew = x

Portanto, obtenha primeiro as coordenadas do centro do tijolo em relação ao ponto de articulação:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Em seguida, gire-os em torno do ponto de articulação:

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

E adicione coordenadas dinâmicas ao ponto girado:

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

Mas se você precisar girar múltiplos de 90 graus, poderá armazenar quatro conjuntos de posições de tijolos para cada orientação e alternar entre elas em vez de realmente girar.

breakp01nt
fonte
0

Você pode girar todos os anéis quadrados (A a H por 2 posições, A a P por 4 posições e assim por diante) em torno desse bloco de articulação:

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