Tetris-Tiles, 4x4 boolean matris olarak saklanır. Her dönme adımının kendine ait bir matrisi vardır, T -Block gösterimi şöyle görünür:
[
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
]
Döndüğünde bloğun konumunu hesaplamak için bir yol bulmaya çalışıyorum ve tahta ile çarpıştı (tahta aynı zamanda bir matristir). Orijinal Tetris, rotasyon bir çarpışma ile sonuçlandığında basitçe bloğun rotasyonuna izin vermez. Oyunun modern çeşitleri çarpışmayı çözecek ve bloğu geçerli bir konuma getirecektir.
İşte çözülmesi gereken bazı durumlar. Tahta 6x6, kırmızı = aktif blok, gri = yerleştirilmiş / dolu bloklardır. Her seferinde saatin tersi yönde bir dönüş yapılmalıdır. Yeşil kaplama, blok matrisini gösterir. Ok, rotasyonu çözmek için ortaya çıkan düzeltmeyi gösterir:
- Blok tahtanın sol tarafındadır. Blok tahtayı terk edemediğinden, bir döndürme işleminden sonra tekrar içeri taşınmalıdır.
- Blok, "yere" çarptı, ancak henüz yerleştirilmedi / işlenmedi. Bu durumda, kiremit çarpışmayı gidermek için yukarı hareket ettirilmelidir ("I" -Blok durumunda, hareket 2 hücreli olur).
- Döşeme işgal edilmiş bloklara çarpacaktı, çarpışmayı çözmek için sola taşınmalı.
- Döşeme döndürülemez.
Bu sorunun üstesinden gelmek için en iyi yaklaşım ne olurdu? Optimal olarak, çözelti jenerik olmalıdır, örn. isteğe bağlı olarak boyutlandırılmış ve yerleştirilmiş bir tahtanın üzerindeki keyfi 4x4 matris bloklarıyla çalışın.