Tetris-Tiles disimpan sebagai matriks boolean 4x4. Setiap langkah rotasi memiliki matriks sendiri, representasi T -Block akan terlihat seperti ini:
[
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
]
Saya mencoba mencari cara untuk menghitung posisi blok ketika sedang diputar dan bertabrakan dengan papan (papan juga merupakan matriks). Tetris asli tidak akan memungkinkan rotasi blok ketika rotasi akan menghasilkan benturan. Varian modern dari gim ini akan menyelesaikan tabrakan dan memindahkan blok ke posisi yang valid.
Inilah beberapa situasi yang harus diselesaikan. Papan adalah 6x6, merah = blok aktif, abu-abu = blok ditempatkan / ditempati. Setiap kali, rotasi berlawanan arah jarum jam harus dilakukan. Overlay hijau menunjukkan matriks untuk blok. Panah menunjukkan koreksi yang dihasilkan untuk menyelesaikan rotasi:
- Blok ada di sisi kiri papan. Karena blok tidak dapat meninggalkan papan, itu harus dipindahkan kembali ke dalam setelah rotasi.
- Blokir hit "ground", tetapi belum ditempatkan / dilakukan. Dalam hal ini, ubin harus dipindahkan ke atas untuk menyelesaikan tabrakan (dalam kasus "I" -Blok, gerakan akan menjadi 2 sel ke atas).
- Ubin akan mengenai blok yang ditempati, harus dipindahkan ke kiri untuk menyelesaikan tabrakan.
- Ubin tidak dapat diputar.
Apa yang akan menjadi pendekatan terbaik untuk mengatasi masalah ini? Secara optimal, solusinya harus generik, mis. bekerja dengan blok matriks 4x4 sewenang-wenang pada papan ukuran dan penduduk sewenang-wenang.
sumber
Jawaban:
Situasi yang Anda gambarkan disebut " tendangan dinding ".
...
Ada berbagai sistem rotasi Tetris, semua didokumentasikan di Wikia: Sistem Rotasi
SRS adalah spesifikasi Tetris "resmi", dan memiliki algoritma yang cukup kompleks untuk tendangan dinding yang melibatkan tabel. Potongan terakhir bahkan mungkin tidak tumpang tindih dengan aslinya!
Sistem rotasi DTET memperluas algoritma paling sederhana dengan memeriksa lima tendangan dinding lain di samping kanan dan kiri. Semua bagian mengikuti aturan yang sama.
sumber