Tetris-Tiles được lưu trữ dưới dạng ma trận boolean 4x4. Mỗi bước xoay có ma trận riêng, biểu diễn của T -Block sẽ như thế này:
[
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
]
Tôi đang cố gắng tìm cách tính toán vị trí của khối khi nó bị xoay và va chạm với bảng (bảng cũng là một ma trận). Tetris ban đầu đơn giản là không cho phép xoay một khối khi xoay sẽ dẫn đến va chạm. Các biến thể hiện đại của trò chơi sẽ giải quyết va chạm và di chuyển khối đến vị trí hợp lệ.
Dưới đây là một số tình huống cần được giải quyết. Bảng có kích thước 6x6, màu đỏ = khối hoạt động, màu xám = khối được đặt / chiếm. Mỗi lần, một vòng quay ngược chiều kim đồng hồ nên được thực hiện. Lớp phủ màu xanh lá cây biểu thị ma trận cho khối. Mũi tên chỉ ra hiệu chỉnh kết quả để giải quyết xoay vòng:
- Khối nằm ở bên trái của bảng. Vì khối không thể rời khỏi bảng, nên nó được di chuyển trở lại bên trong sau khi xoay.
- Chặn "chạm đất", nhưng chưa được đặt / cam kết. Trong trường hợp này, ô phải được di chuyển lên để giải quyết xung đột (trong trường hợp "I" -Block, chuyển động sẽ là 2 ô trở lên).
- Ngói sẽ đánh các khối bị chiếm đóng, phải được di chuyển sang trái để giải quyết va chạm.
- Ngói không thể được xoay.
Điều gì sẽ là cách tiếp cận tốt nhất để giải quyết vấn đề này? Tối ưu, giải pháp nên chung chung, ví dụ. làm việc với các khối ma trận 4 x 4 tùy ý trên một bảng có kích thước và dân số tùy ý.