Płytki Tetris są przechowywane jako macierz boolowska 4x4. Każdy krok obrotu ma własną matrycę, reprezentacja bloku T- Block wyglądałaby następująco:
[
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
]
Próbuję znaleźć sposób, aby obliczyć pozycję bloku, gdy jest on obracany i zderza się z płytką (tablica jest również matrycą). Pierwotny Tetris po prostu nie pozwalałby na obrót bloku, gdy obrót spowodowałby kolizję. Nowoczesne warianty gry rozstrzygną kolizję i przestawią blok na prawidłową pozycję.
Oto kilka sytuacji, które należy rozwiązać. Plansza ma wymiary 6 x 6, czerwony = aktywny blok, szary = umieszczone / zajęte bloki. Za każdym razem należy wykonać obrót w lewo. Zielona nakładka wskazuje macierz dla bloku. Strzałka wskazuje wynikową korektę rozwiązującą obrót:
- Blok znajduje się po lewej stronie planszy. Ponieważ blok nie może opuścić planszy, po obrocie należy go przenieść z powrotem do środka.
- Zablokuj trafienia „na ziemi”, ale nie zostało jeszcze umieszczone / popełnione. W takim przypadku kafelek musi zostać przesunięty w górę, aby rozwiązać kolizję (w przypadku blokady „I” ruch byłby o 2 komórki w górę).
- Płytka uderzy w zajmowane bloki, musi zostać przesunięta w lewo, aby rozwiązać kolizję.
- Płytki nie można obracać.
Jakie byłoby najlepsze podejście do rozwiązania tego problemu? Optymalnie rozwiązanie powinno być ogólne, np. pracować z dowolnymi blokami macierzy 4x4 na dowolnej wielkości i wypełnionej płycie.