टेट्रिस में एक घुमाए गए तत्व की स्थिति निर्धारित करें


24

टेट्रिस-टाइल्स को 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
]

मैं ब्लॉक की स्थिति की गणना करने का एक तरीका खोजने की कोशिश कर रहा हूं जब इसे घुमाया जा रहा है और बोर्ड से टकराता है (बोर्ड भी एक मैट्रिक्स है)। मूल टेट्रिस बस एक ब्लॉक के रोटेशन की अनुमति नहीं देगा जब रोटेशन एक टक्कर में परिणाम होगा। गेम के आधुनिक संस्करण टकराव को हल करेंगे और ब्लॉक को एक वैध स्थिति में ले जाएंगे।

यहां कुछ स्थितियां हैं जिन्हें हल किया जाना चाहिए। बोर्ड 6x6, लाल = सक्रिय ब्लॉक, ग्रे = रखा / कब्जा किया हुआ ब्लॉक है। हर बार, एक काउंटर-क्लॉकवाइज रोटेशन किया जाना चाहिए। हरा ओवरले ब्लॉक के लिए मैट्रिक्स को इंगित करता है। तीर रोटेशन को हल करने के लिए परिणामी सुधार को इंगित करता है:

टेट्रिस ब्लॉक रोटेशन

  1. ब्लॉक बोर्ड के बाईं ओर है। चूंकि ब्लॉक बोर्ड को नहीं छोड़ सकता है, इसलिए इसे रोटेशन के बाद वापस अंदर ले जाना चाहिए।
  2. ब्लॉक हिट "ग्राउंड", लेकिन अभी तक रखा / प्रतिबद्ध नहीं है। इस मामले में, टाइल को टकराव को हल करने के लिए ऊपर ले जाना चाहिए ("आई" -ब्लॉक के मामले में, आंदोलन 2 सेल होगा)।
  3. टाइल कब्जे वाले ब्लॉकों को मारेंगे, टकराव को हल करने के लिए छोड़ दिया जाना चाहिए।
  4. टाइल को घुमाया नहीं जा सकता।

इस समस्या से निपटने के लिए सबसे अच्छा तरीका क्या होगा? वैकल्पिक रूप से, समाधान सामान्य होना चाहिए, उदा। मनमाने ढंग से आकार और आबादी वाले बोर्ड पर 4x4 मैट्रिक्स ब्लॉक के साथ काम करते हैं।


दिलचस्प .. मैंने एक साल पहले टेट्रिस किया था और मैंने सिर्फ मैट्रिक्स को घुमाया और मूल रखा। अगर कुछ ओवरलैप किया गया तो मैंने ऑर्गिनल का इस्तेमाल किया। ठीक काम किया। मैंने बहुत बार परीक्षण किया और समस्याओं में कभी नहीं भागा। बस भाग्यशाली रहा होगा। इंटरस्टिंग टॉपिक के लिए धन्यवाद!
snitch182

जवाबों:


16

आपके द्वारा वर्णित स्थिति को " दीवार किक " कहा जाता है ।

एक दीवार किक तब होती है जब कोई खिलाड़ी एक टुकड़े को घुमाता है जब कोई जगह नहीं होती है जहां वर्गों में मौजूद होता है जहां रोटेशन के बाद टेट्रोमिनो आमतौर पर कब्जा कर लेता है।

...

सबसे सरल दीवार किक एल्गोरिथ्म ... टेट्रोमिनो एक स्थान को दाईं ओर ले जाने का प्रयास करना है, और फिर बाईं ओर एक स्थान है, और यदि न तो किया जा सकता है तो विफल हो जाएगा।

विभिन्न टेट्रिस रोटेशन सिस्टम हैं, जो सभी विकिया: रोटेशन सिस्टम पर प्रलेखित हैं

SRS "आधिकारिक" टेट्रिस विनिर्देश है, और इसमें दीवार की किक के लिए तालिकाओं से युक्त एक जटिल एल्गोरिदम है । अंतिम टुकड़ा भी मूल टुकड़े को ओवरलैप नहीं कर सकता है!

DTET रोटेशन प्रणाली पांच अन्य दीवार किक जाँच के अलावा सिर्फ दाएं और बाएं से सरलतम एल्गोरिथ्म फैली हुई है। सभी टुकड़े समान नियमों का पालन करते हैं।


+1, दिलचस्प विकी। हालाँकि I को स्थानांतरित करने से एक स्थान बाएँ या दाएँ काम नहीं करेगा। अधिक उन्नत रोटेशन सिस्टम भी अलग-अलग ब्लॉकों के लिए अलग-अलग नियम लागू करते हैं .. मैं एक ऐसा तरीका खोजना चाहता हूं जो सभी ब्लॉक संभावनाओं के लिए काम करेगा (यदि बहुत महंगा नहीं है)।
बम्मुजैक

1
@ बम्ज़ैक: ठीक है, फिर डीटीईटी सिस्टम जैसे सभी ब्लॉकों के लिए एक ही तालिका का उपयोग करें। यह बस बाएं और दाएं के अलावा अधिक स्थानों का परीक्षण करता है। आप अपना स्वयं का सिस्टम बना सकते हैं और अपनी इच्छानुसार कई पदों की जाँच कर सकते हैं। हालांकि, सभी टुकड़ों के लिए एक ही तालिका का उपयोग करने से "अप्राकृतिक" दीवार किक हो सकती है।
वामपन्थ

संपादन के लिए धन्यवाद। ये वास्तव में विकिया की सामग्री से बहुत बेहतर हैं। बहुत सराहना की।
बुमज़ैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.