กำหนดตำแหน่งขององค์ประกอบที่หมุนได้ใน Tetris


24

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, สีแดง = บล็อกที่ใช้งาน, สีเทา = บล็อกที่วาง / ครอบครอง แต่ละครั้งควรทำการหมุนทวนเข็มนาฬิกา การซ้อนทับสีเขียวแสดงเมทริกซ์สำหรับบล็อก ลูกศรแสดงการแก้ไขผลลัพธ์เพื่อแก้ไขการหมุน:

การหมุนบล็อกเตตริส

  1. บล็อกอยู่ทางด้านซ้ายของกระดาน เนื่องจากบล็อกไม่สามารถออกจากบอร์ดได้ควรย้ายกลับเข้าไปด้านในหลังจากการหมุน
  2. บล็อกยอดนิยม "กราวด์" แต่ยังไม่ได้วาง / ส่ง ในกรณีนี้ต้องเลื่อนไทล์ขึ้นเพื่อแก้ไขการชน (ในกรณีของ "I" -Block การเคลื่อนไหวจะเป็น 2 เซลล์ขึ้นไป)
  3. ไทล์จะโดนบล็อกที่ถูกครอบครองจะต้องย้ายไปทางซ้ายเพื่อแก้ไขการชน
  4. ไม่สามารถหมุนไทล์ได้

อะไรจะเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ ในที่สุดโซลูชั่นควรเป็นแบบทั่วไปเช่น ทำงานกับบล็อกเมทริกซ์ 4x4 โดยพลการบนบอร์ดที่มีขนาดและประชากรโดยพลการ


ที่น่าสนใจ .. ฉันทำเตตริสเมื่อปีที่แล้วและฉันเพิ่งหมุนเมทริกซ์และเก็บต้นฉบับไว้ หากสิ่งที่ทับซ้อนกันฉันใช้เดิม ทำงานได้ดี ฉันทดสอบเล่นบ่อยและไม่เคยเจอปัญหา ต้องโชคดีแน่ ๆ ขอบคุณสำหรับหัวข้อที่สนใจ!
snitch182

คำตอบ:


16

สถานการณ์ที่คุณอธิบายเรียกว่า " เตะกำแพง "

กำแพงเตะเกิดขึ้นเมื่อผู้เล่นหมุนชิ้นหนึ่งเมื่อไม่มีที่ว่างอยู่ในช่องสี่เหลี่ยมซึ่งโดยปกติจะใช้พื้นที่ tetromino หลังจากการหมุน

...

อัลกอริทึมเตะผนังที่ง่ายที่สุด ... คือการลองเคลื่อนย้ายพื้นที่ tetromino ไปทางขวาจากนั้นหนึ่งช่องทางด้านซ้ายและล้มเหลวหากไม่สามารถทำได้

มีระบบการหมุนรอบตัว Tetris ทั้งหมดมีการบันทึกไว้ใน Wikia: ระบบการหมุน

SRS เป็นข้อกำหนดของ "Tetris" อย่างเป็นทางการและมีอัลกอริธึมที่ค่อนข้างซับซ้อนสำหรับการเตะบนกำแพงที่เกี่ยวข้องกับตาราง ชิ้นสุดท้ายอาจไม่ทับซ้อนกับต้นฉบับเลย!

ระบบหมุน DTETขยายขั้นตอนวิธีการที่ง่ายที่สุดโดยการตรวจสอบห้าเตะผนังอื่น ๆ นอกเหนือจากเพียงขวาและซ้าย ทุกชิ้นปฏิบัติตามกฎเดียวกัน


+1, วิกิที่น่าสนใจ แม้ว่าการย้ายฉันบล็อกหนึ่งช่องว่างไปทางซ้ายหรือขวาจะไม่ทำงาน ระบบการหมุนขั้นสูงยิ่งขึ้นดูเหมือนจะใช้กฎที่แตกต่างกันสำหรับบล็อกที่แตกต่างกัน .. ฉันต้องการค้นหาวิธีที่เหมาะกับความเป็นไปได้ทั้งหมดของบล็อก (ถ้าไม่แพงเกินไป)
bummzack

1
@bummzack: งั้นก็ใช้ตารางเดียวกันสำหรับบล็อกทั้งหมดเช่นระบบ DTET มันเพียงทดสอบที่ตั้งเพิ่มเติมนอกเหนือจากซ้ายและขวา คุณสามารถสร้างระบบของคุณเองและตรวจสอบตำแหน่งที่ต้องการได้มากมาย อย่างไรก็ตามการใช้ตารางเดียวกันสำหรับทุกชิ้นอาจอนุญาตให้เตะผนัง "ผิดธรรมชาติ"
Leftium

ขอบคุณสำหรับการแก้ไข เหล่านี้ดีกว่าวัสดุใน wikia ชื่นชมมาก
bummzack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.