टेट्रिस-टाइल्स को 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, लाल = सक्रिय ब्लॉक, ग्रे = रखा / कब्जा किया हुआ ब्लॉक है। हर बार, एक काउंटर-क्लॉकवाइज रोटेशन किया जाना चाहिए। हरा ओवरले ब्लॉक के लिए मैट्रिक्स को इंगित करता है। तीर रोटेशन को हल करने के लिए परिणामी सुधार को इंगित करता है:
- ब्लॉक बोर्ड के बाईं ओर है। चूंकि ब्लॉक बोर्ड को नहीं छोड़ सकता है, इसलिए इसे रोटेशन के बाद वापस अंदर ले जाना चाहिए।
- ब्लॉक हिट "ग्राउंड", लेकिन अभी तक रखा / प्रतिबद्ध नहीं है। इस मामले में, टाइल को टकराव को हल करने के लिए ऊपर ले जाना चाहिए ("आई" -ब्लॉक के मामले में, आंदोलन 2 सेल होगा)।
- टाइल कब्जे वाले ब्लॉकों को मारेंगे, टकराव को हल करने के लिए छोड़ दिया जाना चाहिए।
- टाइल को घुमाया नहीं जा सकता।
इस समस्या से निपटने के लिए सबसे अच्छा तरीका क्या होगा? वैकल्पिक रूप से, समाधान सामान्य होना चाहिए, उदा। मनमाने ढंग से आकार और आबादी वाले बोर्ड पर 4x4 मैट्रिक्स ब्लॉक के साथ काम करते हैं।