Les Tetris-Tiles sont stockés sous forme de matrice booléenne 4x4. Chaque étape de rotation a sa propre matrice, la représentation du bloc T ressemblerait à ceci:
[
0, 0, 0, 0,
0, 1, 1, 1,
0, 0, 1, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 0, 1, 1,
0, 0, 1, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 1, 1, 1,
0, 0, 0, 0,
0, 0, 0, 0
],
[
0, 0, 1, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0
]
J'essaie de trouver un moyen de calculer la position du bloc lorsqu'il tourne et entre en collision avec la carte (la carte est également une matrice). Le Tetris d'origine ne permettrait tout simplement pas la rotation d'un bloc lorsque la rotation entraînerait une collision. Des variantes modernes du jeu résoudront la collision et déplaceront le bloc vers une position valide.
Voici quelques situations qui devraient être résolues. La carte est 6x6, rouge = bloc actif, gris = blocs placés / occupés. Chaque fois, une rotation dans le sens antihoraire doit être effectuée. La superposition verte indique la matrice du bloc. La flèche indique la correction résultante pour résoudre la rotation:
- Le bloc est sur le côté gauche du plateau. Comme le bloc ne peut pas quitter la planche, il doit être replacé à l'intérieur après une rotation.
- Le bloc touche "au sol", mais n'est pas encore placé / engagé. Dans ce cas, la tuile doit être remontée pour résoudre la collision (dans le cas d'un bloc "I", le mouvement serait de 2 cases vers le haut).
- La tuile toucherait les blocs occupés, doit être déplacée vers la gauche pour résoudre la collision.
- La tuile ne peut pas être tournée.
Quelle serait la meilleure approche pour résoudre ce problème? De manière optimale, la solution doit être générique, par exemple. travailler avec des blocs de matrice 4x4 arbitraires sur une carte arbitrairement dimensionnée et peuplée.