हल करने के लिए समस्या: एक टाइल आधारित गेम के लिए एक यादृच्छिक 2 डी डंगऑन मानचित्र बनाएं जहां सभी कमरे जुड़े हुए हैं।
मैं वर्तमान में जो कुछ है उससे बेहतर समाधान की तलाश में हूं।
मेरा वर्तमान समाधान यह है कि मैं दो एल्गोरिदम चलाऊं। पहले अपने कमरों के साथ कालकोठरी उत्पन्न करता है। दूसरा यह सुनिश्चित करता है कि सभी कमरे जुड़े हुए हैं। मैं उत्सुक हूं कि अन्य समाधान क्या हो सकते हैं। तेजी और / या आसान आदि गति वास्तव में एक चिंता का विषय नहीं है, लेकिन अगर गति को वास्तविक कीमत पर प्राप्त किया जा सकता है, तो अच्छी तरह से, यह एक अच्छी बात है। अधिक महत्वपूर्ण यह है कि मैं और अन्य लोग जो पढ़ते हैं, समस्या के दृष्टिकोण और समाधान के विभिन्न तरीके सीख सकते हैं।
नीचे मेरे वर्तमान कार्यान्वयन हैं। वर्तमान में कमरों में 2 या 3 या 4 दिशाओं में कोई निकास या निकास नहीं है।
कालकोठरी के कमरे बनाना
सेटअप: वर्तमान कमरे को ऊपरी बाएँ कमरे में सेट करें।
- कमरे के लिए एक वैध कमरा प्रकार प्राप्त करें (जहाँ वैध कमरे का प्रकार एक प्रकार है जिसमें कालकोठरी से बाहर नहीं निकलता है और जो बाहर निकलता है जो ऊपर के कमरे और बाईं ओर के कमरे से बाहर निकलता है। केवल ऊपर की जाँच करने की आवश्यकता है। नीचे चरण 2 के कारण छोड़ दिया गया)।
- कमरे के नीचे रखें और एक्स-समन्वय को एक कदम आगे बढ़ाएं। यदि x-निर्देशांक कालकोठरी चौड़ाई से अधिक है, तो x-निर्देशांक को 0 पर सेट करें और y-निर्देशांक एक चरण को आगे बढ़ाएं। यदि y-निर्देशांक कालकोठरी ऊंचाई से अधिक है, तो हम कर रहे हैं।
- # 1 से दोहराएं।
फिर मैं यह देखने के लिए जांच करता हूं कि क्या सभी कमरे जुड़े हुए हैं यदि वे सभी जुड़े हुए नहीं हैं तो मैं एक दूसरा एल्गोरिथ्म चलाता हूं, जो एक गैर-सेक्सी लेकिन निश्चित रूप से अच्छे तरीके से पर्याप्त कालकोठरी लेआउट के संदर्भ में, कमरों के माध्यम से जाता है और उन्हें बदल देता है ताकि सभी समाप्त हो जाएं जुड़ा रहा।
यह देखने के लिए जाँच की जा रही है कि सभी कमरे जुड़े हुए हैं या नहीं
सेटअप: पथों का प्रतिनिधित्व करने वाले पूर्णांकों का 2 डी मानचित्र बनाएं और प्रविष्टियों को एक "अनप्रोसेस्ड" (अभी तक ट्रैवर्स नहीं किया गया) मान -1 से शुरू करें। प्रारंभ पथ इंडेक्स पूर्णांक सेट करें जो वर्तमान पथ का ट्रैक रखता है। वर्तमान कमरे को चेक करने के लिए कमरों के ढेर में जोड़कर शीर्ष बाएं कमरे में सेट करें।
- यदि स्टैक में जांच के लिए कमरे हैं, तो इसे कमरे के पथ सूचकांक को वर्तमान पथ सूचकांक पर सेट करें। यदि स्टैक में कोई कक्ष नहीं है, तो पथ अनुक्रमणिका बढ़ाएं और स्तंभ द्वारा पंक्ति, पंक्ति द्वारा स्तंभ को आगे बढ़ाकर एक कमरा प्राप्त करने का प्रयास करें, जब तक कि हमें एक कमरा नहीं मिलता है जिसे अभी तक संसाधित नहीं किया गया है। अगर कोई कमरा नहीं मिल सकता है, तो हम कर रहे हैं।
- यह देखने के लिए जांचें कि कमरे में बाईं ओर निकास है या नहीं। यदि यह पहले से ही वहाँ पर नहीं है, तो स्टैक के लिए बाएं कमरे को जोड़ दिया है।
- नीचे, दाईं और शीर्ष दिशाओं के लिए चरण 2 को दोहराएं (क्योंकि हम एक स्टैक का उपयोग कर रहे हैं, जिसका अर्थ है कि कमरे को दक्षिणावर्त क्रम में लगाया गया है, शीर्ष दिशा से शुरू होता है)।
- चरण 1 से दोहराएँ।
- यदि पथ सूचक गणना एक से अधिक है, तो डिस्कनेक्ट किए गए कमरे हैं।
यदि डिस्कनेक्ट किए गए कमरे हैं, तो मैं उनके पथ सूचकांक द्वारा कमरों को समूहित करता हूं, सबसे बड़े पथ का सूचकांक प्राप्त करता हूं और अन्य सभी कमरों को उन कमरों से जोड़ता हूं। यह प्रगति पर एक कार्य है, लेकिन मेरी (वर्तमान, "क्रूर") योजना एक कमरे के समूह में प्रत्येक कमरे के माध्यम से जाने की है (पहले को छोड़कर) यह देखने के लिए जांचें कि क्या बड़े कमरे के समूह के लिए एक क्षैतिज या ऊर्ध्वाधर रास्ता है, और यदि ऐसा है, तो कमरे में इनबेटीन को इंजेक्ट / अपडेट करके एक क्षैतिज / ऊर्ध्वाधर पथ बनाएं। धोये और दोहराएं। बदसूरत, हाँ, लेकिन यह ऐसा कुछ है जो दृश्य पैटर्न के संदर्भ में ध्यान देने योग्य नहीं होगा इसलिए यह उस अर्थ में काम करता है।