So drehen Sie Blöcke in Tetris

17

Ich habe ein Spielbrettraster, das 20 Zeilen hoch und 10 Spalten breit ist, wobei sich der Ursprung (0,0) in der oberen linken Ecke befindet. Ich habe einen Tetrimino im Spiel, der aus vier Blöcken besteht. Ich habe die x, y-Position jedes Blocks relativ zum Ursprung in der linken oberen Ecke. Ich habe auch die Position des Pivots, den Punkt, um den ich drehen möchte, relativ zum Ursprung der linken oberen Ecke.

Jeder Block hat eine ganzzahlige Position in einem Spielfeldquadrat und somit hat der Drehpunkt eine gebrochene Position zwischen Blöcken, z. B. (10.5,10.5).

Meine Frage ist: Mit welcher Formel kann ich jeden Block um den Drehpunkt drehen?

Ich habe mir bereits ähnliche Fragen und Antworten angesehen, konnte aber keine Antwort finden, die ich zur Arbeit bringen könnte.

Hilfe wäre sehr dankbar.


quelle
gehört zum Spielentwickler
und wenn es hier ist ... zeige uns eine Datenstruktur
Wenn Sie nur um ein Vielfaches des rechten Winkels drehen, sollte dies ziemlich einfach sein. Zeichnen Sie einfach ein paar Diagramme, und Sie sollten in der Lage sein, eine ganzzahlige Lösung zu finden.
Kerrek SB
3
Ich würde nicht die Mühe machen, die Rotationen tatsächlich zu berechnen, sondern einfach alle vier möglichen gedrehten Versionen in ein Array einfügen.
Fredoverflow
1
Ich würde auch vorschlagen, was @FredOverflow sagte. Wenn Sie sich meine Frage ansehen (die Ihrer ähnlich ist), sehen Sie, wie ich einen einzelnen Block für meine Implementierung gespeichert habe.
Bummzack

Antworten:

22

Die Standard-Tetris-Rotationslogik heißt Super Rotation System. SRS eignet sich für anspruchsvolles Tetris-Spiel und ermöglicht viele Variationen von Wall Kicks und T-Spins.

Alle Tetrominos existieren innerhalb eines Begrenzungsquadrats und drehen sich um die Mitte dieses Quadrats, sofern sie nicht behindert werden. Tetrominos der Breite 3 (J, L, S, T, Z) werden mit der flachen Seite nach unten in die oberen beiden Reihen des Begrenzungsquadrats und (für J, L und T) platziert. Ich bin in der oberen mittleren Reihe platziert.

Alle Tetrominos erscheinen in 2 normalerweise versteckten Reihen oben auf dem Spielfeld. Sie befinden sich in der Mitte dieser Reihen und sind nach links gerundet. Sobald ein Tetromino landet, wird er erst nach Ablauf der Sperrverzögerung gesperrt. Das von der Tetris Company als Infinity bezeichnete Sperrverzögerungsverhalten setzt die Sperrverzögerung zurück, wenn der Tetromino bewegt oder gedreht wird. Hard Drop wird im Allgemeinen auf up abgebildet, was keine Sperrverzögerung hat.

Tetrominos in ihren Rotationsbegrenzungsboxen.

Es gibt eine weitere verbreitete Variante namens ARS, die in Arikas Tetris verwendet wurde: The Grand Master Games.


quelle
7

Die allgemeine Formel für das Drehen um den Ursprung lautet

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

Für 90 Grad wird es

xNew = -y
yNew = x

Holen Sie sich also zunächst die Mittelpunktskoordinaten des Ziegels relativ zum Drehpunkt:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Dann drehen Sie sie um den Drehpunkt:

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

Fügen Sie dann dem gedrehten Punkt Pivot-Koordinaten hinzu:

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

Wenn Sie jedoch um ein Vielfaches von 90 Grad drehen müssen, können Sie vier Sätze von Ziegelpositionen für jede Ausrichtung speichern und zwischen diesen wechseln, anstatt sie tatsächlich zu drehen.

breakp01nt
quelle
0

Sie können alle quadratischen Ringe (a bis h um 2 Positionen, A bis P um 4 Positionen usw.) um diesen Drehblock drehen:

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