2009-10-30 14 views
7

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

जिस गेम पर मैं काम कर रहा हूं वह बड़ी, बहुत बड़ी दुनिया होगी। यह कुछ हद तक URW जैसा होगा, लेकिन एक बड़ी दुनिया और एक 'आरपीजी' की तरह।

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

किसी के पास इस बारे में कोई सुझाव है कि मुझे इस बारे में क्या जाना चाहिए या अन्य संग्रहण विधियों के लिए विचारों को कैसे जाना चाहिए?

यहाँ मेरी खेल के लिए आवश्यकताएँ हैं:

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

उत्तर

11

रिलेशनल डेटाबेस के साथ गड़बड़ न करें जबतक कि आपको बाहरी कारकों से उनका उपयोग करने के लिए मजबूर नहीं किया जाता है।

पायथन के pickle, shelve पर देखें।

शेल्व तेज़ और स्केल अच्छी तरह से है। यह पायथन और गैर पायथन प्रतिनिधित्व के बीच गन्दा रूपांतरण को समाप्त करता है।


संपादित करें।

अधिक महत्वपूर्ण सलाह। तकनीकी विकल्पों में फंस न जाएं। कार्य पर स्थान, आइटम, वर्ण, नियम इत्यादि प्राप्त करें। पायथन में यथासंभव सरल और सही के रूप में।

चीजों को साबित करने के लिए कोर मॉडल, शुद्धता और मूलभूत फीचर सेट पर एक मस्तिष्क कैलोरी जलाएं काम

एक बार आपके पास एक मॉडल है जो वास्तव में काम करता है, और आप कुछ परिष्कृत यूनिट परीक्षणों के साथ अभ्यास कर सकते हैं, तो आप तकनीकी विकल्प बना सकते हैं।

एक बार आपके पास मॉडल होने के बाद, आप अर्थपूर्ण रूप से लाखों स्थानों तक इसे स्केल कर सकते हैं और देख सकते हैं कि किस प्रकार की संग्रहण की आवश्यकता है। मॉडल बदल नहीं सकता है - यह एप्लिकेशन का सार है। प्रदर्शन को समायोजित करने के लिए केवल एक्सेस लेयर और दृढ़ता परत बदल सकती है।

+0

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

+0

एसक्यूएलएट सीमित समेकन समर्थन भी है। यह सवाल से स्पष्ट नहीं है कि यह भी मायने रखता है। –

+0

मुझे पूरा यकीन नहीं है कि यह मेरे लिए काम करेगा या नहीं। लेकिन मैं उसमें देख लूंगा, धन्यवाद। क्या शेल्फ स्मृति में पूरे 'शेल्फ' रखता है? मैं दस्तावेज़ों से नहीं बता सका। साथ ही, किसी भी विचार में लाखों चीजों के साथ यह कितना अच्छा है? – Echo

3

ऐसा लगता है कि आप जो पूछ रहे हैं वह spacial index का एक प्रकार है। एक बहुत बड़े 2 डी गेम के लिए मैं quadtree का उपयोग करने की सलाह दूंगा। क्वाड्री अच्छी तरह से काम करता है जब आपके पास एक बड़ा क्षेत्र होता है और गतिविधि क्षेत्र के स्थानीय क्षेत्रों में होती है, जो अधिकांश आरपीजी-प्रकार के गेम के मामले में होती है।यह आपकी स्टोरेज आवश्यकताओं को कम रखेगा और आशा है कि टकराव का पता लगाने की गति भी बढ़ेगी।

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

1

मैं बड़ी मात्रा में डेटा स्टोर करने के लिए गैर-संबंध डेटाबेस का उपयोग कर रहा हूं। यदि आप 64 बिट्स हार्डवेयर पर काम कर सकते हैं, MongoDB इसके Python driver के साथ वास्तव में बहुत अच्छा है। मुझे नहीं पता कि यह बेकार के साथ ठीक है, लेकिन यह एक possiblity है।