Come ruotare i blocchi in tetris


17

Ho una griglia di gioco che è alta 20 righe e larga 10 colonne con l'origine (0,0) nell'angolo in alto a sinistra. Ho un tetrimino in gioco, che è composto da quattro blocchi. Ho la posizione x, y di ciascun blocco rispetto all'origine dell'angolo in alto a sinistra. Ho anche la posizione del perno, il punto attorno al quale desidero ruotare che è relativo all'origine dell'angolo in alto a sinistra.

Ogni blocco ha una posizione intera in un quadrato del tabellone e quindi il perno ha una posizione frazionaria tra i blocchi, ad es. (10.5,10.5)

La mia domanda è: quale formula posso usare per ruotare ciascun blocco attorno al perno?

Ho già esaminato domande e risposte simili esistenti, ma non sono riuscito a trovare una risposta per poter lavorare.

L'aiuto sarebbe molto apprezzato.


appartiene al gioco dev.

e se è qui ... mostraci qualche struttura di dati

Se stai solo ruotando per multipli di angoli retti, questo dovrebbe essere abbastanza semplice. Basta disegnare alcuni diagrammi e dovresti essere in grado di capire una soluzione intera.
Kerrek SB

3
Non mi preoccuperei di calcolare effettivamente le rotazioni, semplicemente mettere tutte e quattro le possibili versioni ruotate in un array.
Fredoverflow

1
Vorrei anche suggerire ciò che ha detto @FredOverflow. Se osservi la mia domanda (che è simile alla tua), vedi come ho archiviato un singolo blocco per la mia implementazione.
Bummzack,

Risposte:


22

La logica di rotazione standard di Tetris si chiama Super Rotation System. SRS è adatto per il gioco di alto livello su Tetris, consentendo molte varianti di calci a muro e tiri a T.

Tutti i tetromini esistono all'interno di un quadrato di delimitazione e ruotano attorno al centro di questo quadrato a meno che non siano ostruiti. I tetromini di larghezza 3 (J, L, S, T, Z) sono posizionati nelle due file superiori del quadrato di delimitazione e (per J, L e T) con il lato piatto rivolto verso il basso. Sono posizionato nella riga centrale superiore.

Tutti i tetromini si generano in 2 file solitamente nascoste nella parte superiore del campo di gioco. Sono posizionati al centro di queste file, arrotondando a sinistra. Una volta che un tetromino atterra, non si blocca fino alla scadenza del ritardo di blocco. Il comportamento del ritardo di blocco, chiamato Infinity dalla società Tetris, reimposta il ritardo di blocco ogni volta che il tetromino viene spostato o ruotato. L'hard drop è generalmente mappato verso l'alto, che non ha alcun ritardo di blocco.

Tetrominos nelle loro caselle di selezione della rotazione.

C'è un'altra variante comune chiamata ARS, che è stata utilizzata nei giochi Tetris: The Grand Master di Arika .


7

La formula generale per ruotare attorno all'origine è

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

Per 90 gradi diventa

xNew = -y
yNew = x

Quindi, innanzitutto ottenere le coordinate del centro del mattone relativamente al punto di articolazione:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Quindi ruotali attorno al punto di articolazione:

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

Quindi aggiungi le coordinate pivot al punto ruotato:

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

Ma se devi ruotare di multipli di 90 gradi, puoi memorizzare quattro serie di posizioni in mattoni per ciascun orientamento e passare da una all'altra invece di ruotare effettivamente.


0

È possibile ruotare tutti gli anelli quadrati (a-through-h di 2 posizioni, A-through-P di 4 posizioni e così via) attorno a quel blocco perno:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.