Tetris-Tiles ถูกเก็บไว้เป็น matrix 4x4 แบบบูล แต่ละขั้นตอนการหมุนมีเมทริกซ์เป็นของตัวเองการเป็นตัวแทนของT -Block จะมีลักษณะเช่นนี้:
[
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
]
ฉันพยายามหาวิธีคำนวณตำแหน่งของบล็อกเมื่อมันถูกหมุนและชนกับบอร์ด (บอร์ดก็เป็นเมทริกซ์ด้วย) Tetris ดั้งเดิมจะไม่อนุญาตให้มีการหมุนของบล็อกเมื่อการหมุนจะทำให้เกิดการชน รูปแบบที่ทันสมัยของเกมจะแก้ไขการชนและย้ายบล็อกไปยังตำแหน่งที่ถูกต้อง
นี่คือบางสถานการณ์ที่ควรแก้ไข คณะกรรมการคือ 6x6, สีแดง = บล็อกที่ใช้งาน, สีเทา = บล็อกที่วาง / ครอบครอง แต่ละครั้งควรทำการหมุนทวนเข็มนาฬิกา การซ้อนทับสีเขียวแสดงเมทริกซ์สำหรับบล็อก ลูกศรแสดงการแก้ไขผลลัพธ์เพื่อแก้ไขการหมุน:
- บล็อกอยู่ทางด้านซ้ายของกระดาน เนื่องจากบล็อกไม่สามารถออกจากบอร์ดได้ควรย้ายกลับเข้าไปด้านในหลังจากการหมุน
- บล็อกยอดนิยม "กราวด์" แต่ยังไม่ได้วาง / ส่ง ในกรณีนี้ต้องเลื่อนไทล์ขึ้นเพื่อแก้ไขการชน (ในกรณีของ "I" -Block การเคลื่อนไหวจะเป็น 2 เซลล์ขึ้นไป)
- ไทล์จะโดนบล็อกที่ถูกครอบครองจะต้องย้ายไปทางซ้ายเพื่อแก้ไขการชน
- ไม่สามารถหมุนไทล์ได้
อะไรจะเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ ในที่สุดโซลูชั่นควรเป็นแบบทั่วไปเช่น ทำงานกับบล็อกเมทริกซ์ 4x4 โดยพลการบนบอร์ดที่มีขนาดและประชากรโดยพลการ