Comment faire pivoter des blocs dans Tetris

16

J'ai une grille de plateau de jeu qui est de 20 lignes de haut et 10 colonnes de large avec l'origine (0,0) dans le coin supérieur gauche. J'ai un tetrimino en jeu, qui est composé de quatre blocs. J'ai l'emplacement x, y de chaque bloc par rapport à l'origine du coin supérieur gauche. J'ai également la position du pivot, le point autour duquel je souhaite tourner qui est relatif à l'origine du coin supérieur gauche.

Chaque bloc a une position entière dans une case de plateau de jeu et donc le pivot a une position fractionnée entre les blocs, par exemple (10.5,10.5)

Ma question est: quelle formule puis-je utiliser pour faire pivoter chaque bloc autour du pivot?

J'ai déjà examiné des questions et réponses similaires existantes, mais je n'ai pas trouvé de réponse que je pourrais mettre au travail.

De l'aide serait très appréciée.


la source
appartient au jeu dev.
et si c'est ici ... montrez-nous une structure de données
Si vous ne faites que tourner par multiples d'angles droits, cela devrait être assez basique. Dessinez simplement quelques diagrammes, et vous devriez pouvoir trouver une solution entière.
Kerrek SB
3
Je ne prendrais pas la peine de calculer les rotations, il suffit de mettre les quatre versions pivotées possibles dans un tableau.
fredoverflow du
1
Je suggère également ce que @FredOverflow a dit. Si vous regardez ma question (qui est similaire à la vôtre), vous voyez comment j'ai stocké un seul bloc pour mon implémentation.
bummzack

Réponses:

21

La logique de rotation standard de Tetris est appelée Super Rotation System. SRS est adapté au jeu Tetris de haut niveau, permettant de nombreuses variations sur les coups de pied et les t-spins.

Tous les tétrominos existent à l'intérieur d'un carré englobant et tournent autour du centre de ce carré à moins qu'ils ne soient obstrués. Les tétrominos de largeur 3 (J, L, S, T, Z) sont placés dans les deux rangées supérieures du carré de délimitation et (pour J, L et T) avec le côté plat vers le bas. Je suis placé dans la rangée du milieu du haut.

Tous les tétrominos apparaissent dans 2 rangées généralement cachées en haut du terrain de jeu. Ils sont placés au centre de ces rangées, arrondis à gauche. Une fois qu'un tétromino atterrit, il ne se verrouille pas avant l'expiration du délai de verrouillage. Le comportement du délai de verrouillage, appelé Infinity par la société Tetris, réinitialise le délai de verrouillage chaque fois que le tetromino est déplacé ou tourné. La suppression matérielle est généralement mappée vers le haut, ce qui n'a aucun délai de verrouillage.

Tétrominos dans leurs boîtes de délimitation de rotation.

Il existe une autre variante commune appelée ARS, qui a été utilisée dans les jeux Tetris: The Grand Master d' Arika .


la source
7

La formule générale de rotation autour de l'origine est

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

Pour 90 degrés, il devient

xNew = -y
yNew = x

Donc, obtenez d'abord les coordonnées du centre de la brique par rapport au point de pivot:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Faites-les ensuite pivoter autour du point de pivot:

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

Et puis ajoutez les coordonnées du pivot au point pivoté:

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

Mais si vous devez faire pivoter par multiples de 90 degrés, vous pouvez stocker quatre ensembles de positions de briques pour chaque orientation et basculer entre elles au lieu de réellement tourner.

breakp01nt
la source
0

Vous pouvez faire pivoter tous les anneaux carrés (de A à H de 2 positions, de A à P de 4 positions, etc.) autour de ce bloc de pivot:

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