टेट्रिस में ब्लॉकों को कैसे घुमाएं


16

मेरे पास एक गेमबोर्ड ग्रिड है जो 20 पंक्तियाँ ऊँची हैं और 10 स्तंभ चौड़े हैं जिनकी उत्पत्ति (0,0) शीर्ष बाएँ हाथ के कोने में है। मेरे पास प्ले में एक टेट्रीमिनो है, जो चार ब्लॉकों से बना है। मेरे पास शीर्ष बाएं कोने के मूल के सापेक्ष प्रत्येक ब्लॉक का x, y स्थान है। मेरे पास पिवट की स्थिति भी है, जिस बिंदु के चारों ओर मैं घूमना चाहता हूं जो शीर्ष बाएं हाथ के कोने की उत्पत्ति के सापेक्ष है।

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

मेरा प्रश्न है: मैं प्रत्येक ब्लॉक को धुरी के चारों ओर घुमाने के लिए किस सूत्र का उपयोग कर सकता हूं?

मैंने पहले से ही मौजूदा समान प्रश्नों और उत्तरों को देखा है, लेकिन मुझे ऐसा जवाब नहीं मिला जो मुझे काम करने के लिए मिल सके।

सहायता के लिए बहुत आभार होगा।


खेल देव पर आधारित है।

और अगर यहाँ है ... हमें कुछ डेटा संरचना

यदि आप केवल समकोण के गुणकों द्वारा घुमा रहे हैं, तो यह काफी बुनियादी होना चाहिए। बस कुछ आरेख बनाएं, और आपको पूर्णांक समाधान का पता लगाने में सक्षम होना चाहिए।
केरेक एसबी

3
मैं वास्तव में रोटेशन की गणना करने के लिए परेशान नहीं होता, बस एक सरणी में सभी चार संभव घुमा संस्करणों को डाल दिया।
fredoverflow

1
मैं यह भी सुझाव दूंगा कि @FredOverflow ने क्या कहा। यदि आप मेरे प्रश्न (जो आपके समान है) को देखते हैं, तो आप देखते हैं कि मैंने अपने कार्यान्वयन के लिए एक ब्लॉक को कैसे संग्रहीत किया।
बुमज़ैक

जवाबों:


21

मानक टेट्रिस रोटेशन लॉजिक को सुपर रोटेशन सिस्टम कहा जाता है। SRS उच्च-स्तरीय टेट्रिस प्ले के अनुकूल है, जो दीवार किक और टी-स्पिन पर कई बदलावों की अनुमति देता है।

सभी टेट्रोमिनो एक बाउंडिंग स्क्वायर के अंदर मौजूद हैं और इस वर्ग के केंद्र के बारे में तब तक घुमाते हैं जब तक कि बाधा न हो। चौड़ाई 3 (जे, एल, एस, टी, जेड) की टेट्रोमिनोइज़ को समतल पक्ष के साथ बाउंडिंग स्क्वायर और (जे, एल, और टी के लिए) की शीर्ष दो पंक्तियों में रखा गया है। मुझे शीर्ष मध्य पंक्ति में रखा गया है।

2 में सभी टेट्रोमिनोइज़ स्पैन के शीर्ष पर आमतौर पर छिपी हुई पंक्तियाँ होती हैं। उन्हें बाईं ओर गोलाई में, इन पंक्तियों के केंद्र में रखा गया है। एक बार टेट्रोमिनो लैंड करने के बाद लॉक लॉक की समय सीमा समाप्त होने तक लॉक नहीं होता है। टेट्रोमिनो द्वारा स्थानांतरित या घुमाए जाने पर लॉक विलंब व्यवहार, जिसे टेट्रिनो कंपनी द्वारा इन्फिनिटी कहा जाता है, लॉक विलंब को रीसेट करता है। आमतौर पर हार्ड ड्रॉप की मैपिंग की जाती है, जिसमें लॉक की देरी नहीं होती है।

अपने रोटेशन बाउंडिंग बॉक्स में टेट्रॉमिनो।

एआरएस नामक एक और सामान्य संस्करण है, जिसका उपयोग एरिका के टेट्रिस: द ग्रैंड मास्टर गेम्स में किया गया था।


7

मूल के चारों ओर घूमने का सामान्य सूत्र है

xNew = x * cos(a) - y * sin(a)
yNew = x * sin(a) + y * cos(a)

90 डिग्री के लिए यह बन जाता है

xNew = -y
yNew = x

इसलिए, सबसे पहले ईंट केंद्र को धुरी बिंदु पर अपेक्षाकृत समन्वित करें:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

फिर उन्हें धुरी बिंदु के चारों ओर घुमाएं:

x1 = -y = yPivot - yBrickCenter
y1 = x = xBrickCenter - xPivot

और फिर घुमाए गए बिंदु पर धुरी निर्देशांक जोड़ें:

newXBrickCenter = xPivot + x1 = xPivot + yPivot - yBrickCenter
newYBrickCenter = yPivot + y1 = yPivot - xPivot + xBrickCenter

लेकिन अगर आपको 90 डिग्री के गुणकों से घूमने की आवश्यकता है, तो आप प्रत्येक अभिविन्यास के लिए ईंट के पदों के चार सेट स्टोर कर सकते हैं और वास्तव में घूमने के बजाय उनके बीच स्विच कर सकते हैं।


0

आप सभी वर्ग वलयों को घुमा सकते हैं (2 पोजिशंस द्वारा ए-थ्रू, 4 पोजिशंस द्वारा ए-थ्रू-पी और इसी तरह) उस पिवट ब्लॉक के आसपास:

ABCDE MNOPA
पबकफ लघब
ओह। डीजी -> Kf.bC
NgfeH JedcD
MLKJI IHGFE

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