टाइल मानचित्र और इकाइयों के बीच निर्भरता का प्रबंधन कैसे करें


11

मेरे पास कार्यों में 2 डी टाइल-आधारित रणनीति है। मैं भटक रहा हूं कि नक्शे पर नक्शे और इकाइयों के बीच संबंधों को कैसे संभालना है।

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

मैंने इसके दो समाधान देखे हैं। पहला समाधान यह होगा कि इकाइयां एक समन्वय स्थापित करें और इसकी टाइलों में मानचित्र भंडार इकाई संदर्भों को संग्रहीत करें। यह मानचित्र और इकाइयों के बीच एक चक्रीय निर्भरता बनाता है। मुझे यह सुनिश्चित करना होगा कि यदि यूनिट चलती है तो नक्शे को किसी भी इकाई को सिंक में रखा जाएगा।

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

मैं भी नक्शे में इकाइयों को स्टोर नहीं कर सकता (या मैं कर सकता हूं?)। इकाइयां "सेनाओं" से जुड़ी होती हैं, या तो खिलाड़ी या एआई। एक सेना को अपनी सभी इकाइयों पर आसानी से पहुंचने और पुनरावृति करने में सक्षम होना चाहिए।

चूँकि यह रणनीति के खेल में एक सामान्य मुद्दा प्रतीत होता है, क्या मुझे इकाई / मानचित्र संबंधों के प्रबंधन के लिए वर्णित दो के अलावा कोई अन्य पैटर्न हैं?

जवाबों:


3

यह एक लोकप्रिय पैटर्न नहीं है, लेकिन रिलेशनल डेटाबेस दुनिया एक तीसरा तरीका प्रदान करती है: एक डेटा संरचना का उपयोग करें जिसमें कई चाबियाँ हैं। सारणीबद्ध रूप में, यह इस तरह दिख सकता है:

Unit id    Location
-------------------
  1309     13,15
  2357      7,93
  8552      7,93

आप पूछना चाहते हैं, "इकाई 2357 कहां है?" और 7,93 वापस मिलेगा। आप यह भी पूछना चाहते हैं, "7,93 में क्या है?" और 2357 और 8552 वापस प्राप्त करें। डेटा संरचनाएं हैं जो चीजों को देखने के लिए कई कुंजी की अनुमति देती हैं। यदि आप निर्भरता को दूर करना चाहते हैं तो आप इसे इकाइयों के बाहर और मानचित्र के बाहर संग्रहीत कर सकते हैं।

हालाँकि, व्यवहार में प्रत्येक इकाई में स्थान को स्टोर करना अधिक आम है, और फिर पक्ष में एक स्थानिक विभाजन डेटा संरचना का उपयोग होता है जो आपको बताता है कि किसी दिए गए क्षेत्र में कौन सी इकाइयाँ हैं। चूंकि यह एक अलग संरचना है, इसलिए क्षेत्रों को ग्रिड स्थान नहीं होना चाहिए; वे बड़े क्षेत्र हो सकते हैं।

मैं सलाह देता हूं कि जो कुछ भी आसान है (आपका दूसरा समाधान) और बाद में अगर यह एक प्रदर्शन समस्या है, तो आप लुकअप को तेज बनाने के लिए एक स्थानिक विभाजन जोड़ सकते हैं।


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

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

5

जब तक आप प्रति खिलाड़ी कई हजार इकाइयाँ नहीं देते, मैं स्मृति उपयोग के बारे में चिंता नहीं करता, और पहले समाधान का उपयोग करता हूँ। मेमोरी सीपीयू की तुलना में सस्ती है जो ऐसा लगता है।

वास्तव में, भले ही आपके पास प्रति खिलाड़ी 4000 इकाइयां हों, दो पूर्णांकों का उपयोग करके उस स्थान को स्टोर करें, और 8 खिलाड़ी, जो केवल 2MB लेता है, लेकिन पहले समाधान के साथ, आपको O (1) को-ऑर्ड गटर का उपयोग करने के लिए मिलता है, बजाय O (n) (असंबद्ध मानकर), जिसमें बहुत सारी इकाइयाँ धीमी हो सकती हैं।

ज्यादातर गेम टाइल के बजाय पिक्सेल आधारित लगते हैं, अब एक दिन इसलिए उन्हें केवल सह-ऑर्ड्स को स्टोर करने के लिए यूनिट प्राप्त करने की आवश्यकता है।


मैं मेमोरी उपयोग के बारे में चिंतित नहीं हूं, मैं निर्भरता (ऑब्जेक्ट ओरिएंटेड डिज़ाइन अर्थ में) को प्रबंधित करने में अधिक रुचि रखता हूं। यह अतिरिक्त मेमोरी नहीं है पहला समाधान मुझे चिंतित करेगा जो मुझे चिंतित करता है, यह चक्रीय निर्भरता है जो मैं लेरी हूं, जितना मैं ओ (1) सह-ऑर्ड गटर पसंद करता हूं। इसके अलावा, मुझे पता है कि बहुत सारे गेम पिक्सेल आधारित हैं, लेकिन मुझे टाइल्स पसंद हैं इसलिए मैं इसका उपयोग कर रहा हूं। : पी
एजेएम

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