Le piastrelle Tetris sono memorizzate come una matrice booleana 4x4. Ogni passaggio di rotazione ha la sua matrice, la rappresentazione del T- Block sarebbe simile a questa:
[
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
]
Sto cercando di trovare un modo per calcolare la posizione del blocco quando viene ruotato e si scontra con la scheda (la scheda è anche una matrice). Il Tetris originale non consentirebbe semplicemente la rotazione di un blocco quando la rotazione provocherebbe una collisione. Le moderne varianti del gioco risolveranno la collisione e sposteranno il blocco in una posizione valida.
Ecco alcune situazioni che dovrebbero essere risolte. La scheda è 6x6, rossa = blocco attivo, grigia = blocchi posizionati / occupati. Ogni volta, deve essere eseguita una rotazione antioraria. La sovrapposizione verde indica la matrice per il blocco. La freccia indica la correzione risultante per risolvere la rotazione:
- Il blocco si trova sul lato sinistro del tabellone. Poiché il blocco non può lasciare la tavola, dovrebbe essere spostato all'interno dopo una rotazione.
- Il blocco colpisce "terra", ma non è ancora piazzato / impegnato. In questo caso, la piastrella deve essere spostata verso l'alto per risolvere la collisione (nel caso di un blocco "I", il movimento sarebbe di 2 celle in alto).
- La tessera colpirebbe i blocchi occupati, deve essere spostata a sinistra per risolvere la collisione.
- La piastrella non può essere ruotata.
Quale sarebbe l'approccio migliore per affrontare questo problema? In modo ottimale, la soluzione dovrebbe essere generica, ad es. lavorare con blocchi di matrice 4x4 arbitrari su una scheda di dimensioni e popolamento arbitrari.