Tetris-Tiles werden als 4x4-Boolesche Matrix gespeichert. Jeder Rotationsschritt hat eine eigene Matrix, die Darstellung des T- Blocks würde so aussehen:
[
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
]
Ich versuche einen Weg zu finden, um die Position des Blocks zu berechnen, wenn er gedreht wird und mit dem Board kollidiert (das Board ist auch eine Matrix). Das ursprüngliche Tetris würde einfach keine Drehung eines Blocks zulassen, wenn die Drehung zu einer Kollision führen würde. Moderne Spielvarianten lösen die Kollision auf und bringen den Block an eine gültige Position.
Hier sind einige Situationen, die gelöst werden sollten. Die Karte ist 6x6, rot = aktiver Block, grau = platzierte / belegte Blöcke. Jedes Mal sollte eine Drehung gegen den Uhrzeigersinn durchgeführt werden. Das grüne Overlay zeigt die Matrix für den Block an. Der Pfeil zeigt die resultierende Korrektur an, um die Drehung aufzulösen:
- Der Block befindet sich auf der linken Seite der Tafel. Da der Block die Platine nicht verlassen kann, sollte er nach einer Drehung wieder nach innen bewegt werden.
- Block trifft "Boden", ist aber noch nicht platziert / festgeschrieben. In diesem Fall muss das Plättchen nach oben verschoben werden, um die Kollision zu beheben (im Fall eines "I" -Blocks beträgt die Bewegung 2 Zellen nach oben).
- Die Kachel würde belegte Blöcke treffen und muss nach links verschoben werden, um die Kollision zu beheben.
- Fliesen können nicht gedreht werden.
Was wäre der beste Ansatz, um dieses Problem anzugehen? Optimalerweise sollte die Lösung generisch sein, z. Arbeiten Sie mit beliebigen 4x4-Matrixblöcken auf einer beliebig großen und bestückten Karte.