2009-06-10 10 views
7

मैं Same Game जैसे गेम का निर्माण कर रहा हूं, जब मुझे एक नया स्तर बनाना है तो मैंने बस भरने के लिए एल्गोरिदम चलाया है एन रंग वाले बोर्ड, यह एल्गोरिदम बोर्ड को यादृच्छिक रूप से भरता है, लेकिन स्पष्ट रूप से इस तरह से उत्पन्न स्तरों में सभी का कोई समाधान नहीं है।उसी गेम का एक हल करने योग्य स्तर कैसे बनाएं (उर्फ चेन-शॉट, उर्फ। क्लिकोमैनिया)

मैं इस समस्या को हल करने के लिए एक समारोह बनाने के लिए है, तो खेल कभी के लिए एक आदर्श खिलाड़ी द्वारा खेला जा सकता है।

मैं 6 रंग की एक अधिकतम और 2 की एक न्यूनतम है और बोर्ड एक उचित आकार (14x12) है, लेकिन संशोधित किया जा सकता।

भाषा अप्रासंगिक है।

संपादित करें: मैं मैं का स्तर कम से कम एक समाधान है कि बनाने के लिए की जरूरत है, पहेली को हल करने की जरूरत नहीं है।

उत्तर

3

मैंने उबंटू पर खेल के लगभग पांच अलग-अलग संस्करणों की जांच की है और मुझे एक जवाब मिला है जिसे आप सेला कर सकते हैं!

Simon Tatham's Portable Puzzle Collection

मैं के बारे में पाँच अपने खेल लगातार लेकिन वरीय ही सूक्ति के खेलते हैं। मैंने बस अपना वही गेम लोड किया है और कस्टम गेम बनाने के दौरान इसमें घुलनशीलता सुनिश्चित करने का विकल्प है। यहां तक ​​कि एक अनुकूलन स्कोरिंग सिस्टम भी है। यह सब बहुत ही उन्नत है।

उपरोक्त लिंक से एक exe और स्रोत कोड उपलब्ध है।

और लाइसेंस एमआईटी है (अर्थात आपका वाणिज्यिक खेल में स्वतंत्र रूप से उपयोग कर सकते हैं - लेकिन उसे कुछ दान कृपया अगर तुम इसे बर्दाश्त कर सकते)

+0

महान! धन्यवाद :) –

3

एक विधि है, जो, मैं जोड़ देंगे, शायद ही कभी सबसे कुशल, है रिवर्स में स्तर का निर्माण करना है।

हालांकि इस मामले में ऐसा करना काफी आसान है। आप बस कुछ भी नहीं शुरू करते हैं और कुछ यादृच्छिकता के साथ क्लिक करने योग्य समूह जोड़ते हैं ... मैं कुछ यादृच्छिकता कहता हूं, क्योंकि आपको यह सुनिश्चित करने के लिए अतिरिक्त ब्लॉक जोड़ने की आवश्यकता हो सकती है कि सभी कॉलम भर गए हों।

लेकिन इसके बारे में सोच, यहां तक ​​कि फिर वहाँ एक संभावना दो क्लिक करने योग्य समूहों आप एक दूसरे को स्पर्श करेगा और कारण एक अप्रत्याशित पतन, एक unfinishable खेल में जिसके परिणामस्वरूप जोड़ने है। तो यह विधि एक सुलभ खेल की गारंटी नहीं देगी।

आप Same GNOME की तरह एक खुला स्रोत संस्करण के लिए स्रोत पर एक नज़र हो सकता था और देखते हैं कि वे यह कर (अगर वे यह बिल्कुल करते हैं!)

+0

पहला दृष्टिकोण बोर्ड को पीछे की ओर बनाना था जैसा कि आप कहते हैं, लेकिन मुझे उस दृष्टिकोण पर कई त्रुटिएं आई हैं। और मैंने जो गेम देखा है, वे केवल यादृच्छिक उपयोग करते हैं (उसी गनोम उनमें से एक है) –

+0

शायद एक हल करने योग्य ग्रिड होना आवश्यक नहीं है जिसके लिए आपको लक्ष्य बनाना चाहिए। वही गनोम आपको समाशोधन के लिए बोनस देता है लेकिन वे एक घातीय स्कोरिंग स्केल का भी उपयोग करते हैं (उदाहरण के लिए 2 बार 2 अंक एक बार, 4 में 3 के लिए 4, 4 के लिए 8, 5 के लिए 16, आदि)। इससे एक ऐसी रणनीति शामिल होती है जिसे उपयोगकर्ता को चुनना पड़ता है: या तो लक्ष्य को पूरा करने या पूरा करने का लक्ष्य पर्याप्त नहीं है। – Oli

+0

हाँ, आप सही हैं, लेकिन मेरे बॉस को बताओ। :( –

1

एक "हल" बोर्ड, और फिर उपयोग करके इसे बदल एन वैध लेकिन यादृच्छिक पीछे की ओर चालें। प्रत्येक पिछड़े कदम को जोड़ने के बाद, आप एक हल करने योग्य पहेली को सत्यापित करने के लिए आगे बढ़ने (एक अस्थायी बोर्ड पर) चला सकते हैं।

+0

एल्गोरिदम यह जानने के लिए कि क्या यह है हल करने योग्य कोई समस्या नहीं है, समस्या एक पहेली बनाने के लिए है जो हल करने योग्य हो सकती है (यदि मैं बस बोर्ड को यादृच्छिक रूप से भरता हूं और "सत्यापन" एल्गोरिदम चलाता हूं तो इसमें अधिक समय लगेगा जिसे मैं गणना नहीं करना चाहता) –

+0

पूरी तरह से यादृच्छिक होने की आवश्यकता नहीं है, एक नियंत्रित तरीके से यादृच्छिक रहें। जब आप बोर्ड को पीछे की ओर बनाते हैं, तो यादृच्छिक रूप से यह तय करें कि रंग को बाएं/दाएं/नीचे इत्यादि से मेल खाना चाहिए या नहीं, एक हल करने योग्य गेम के लिए क्या काम करेगा। –

1

यदि आप समय की बाधाओं के कारण सत्यापन एल्गोरिदम नहीं चला सकते हैं, तो शायद आपको पहेली के पुस्तकालय के साथ काम करने की आवश्यकता है। आपके पास हर समय नए यादृच्छिक पहेली उत्पन्न करने वाला पृष्ठभूमि थ्रेड हो सकता है, और यह जांचने के लिए कि वे वैध हैं या नहीं, उनके लिए सत्यापन एल्गोरिदम चला रहे हैं। जब एक वैध पहेली पाई जाती है, तो यह पहेली की आपकी लाइब्रेरी में जोड़ा जाता है (माना जाता है कि वही पहेली पहले से मौजूद नहीं है)।

तब आपका गेम लाइब्रेरी से यादृच्छिक रूप से लोड हो जाता है। यह आपको यह सुनिश्चित करने की अनुमति देता है कि आपके पास हमेशा वैध पहेली हों, लेकिन फिर भी आपको यादृच्छिक रूप से उन्हें उत्पन्न करने और पहेली-लोडिंग को धीमा किए बिना सत्यापित करने की अनुमति मिलती है।

-1

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

संबंधित मुद्दे