टर्न-आधारित, दूरस्थ-आधारित रणनीति गेम में संभावित आंदोलन की सीमा का निर्धारण कैसे करें?


11

मैं c ++ और SFML-2.0 का उपयोग करके 2-आयामी, टर्न-आधारित रणनीति गेम बना रहा हूं। आंदोलन ग्रिड-आधारित के बजाय दूरी-आधारित है, जिसमें कई अलग-अलग त्रिकोण-आकार के टुकड़े होते हैं, जो किसी दिए गए मोड़ पर, प्रत्येक स्थान पर घूम सकते हैं या आगे बढ़ सकते हैं।

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

मेरा सवाल यह है कि मुझे उन संभावित स्थानों की सीमा का निर्धारण कैसे करना चाहिए, जिनके लिए खिलाड़ी टुकड़ा-चाल चल सकता है?

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

मैं उस इकाई को कैसे निर्धारित कर सकता हूं जो एक इकाई को स्थानांतरित कर सकती है, इसकी त्रिज्या को ध्यान में रखते हुए?

उदाहरण के लिए, नीचे की छवि में। लाल, नीली और हरी रेखाएँ सभी समान लंबाई की होंगी। बैंगनी सर्कल निरूपित करता है जो आंदोलन इकाई को स्थानांतरित कर सकता है। (आकार संभवतः गलत है और लाइनें वास्तव में समान लंबाई नहीं हैं, लेकिन आपको यह विचार मिलता है)

यहाँ छवि विवरण दर्ज करें


यह अभी भी केवल (कुल) दूरी को स्थानांतरित करने में सक्षम होने जा रहा है। तो सवाल वास्तव में यह पता लगाने के बारे में है कि "यह कितनी दूर है?" / "इसे चालू करने की कितनी आवश्यकता है?" / " इसे कहाँ मोड़ना है?"। आपको संभवतः नियमित मार्ग निर्धारित करने से शुरू करने की आवश्यकता है, फिर एक निश्चित राशि से ऊपर के कोणों के लिए एक स्टार्ट-ऑफ-टर्न वापस करें; ध्यान दें कि अंतिम दूरी वक्रों की तुलना में एक सीधी-रेखा पथ (नवीनतम मोड़) में लंबी होगी।
क्लॉकवर्क-म्यूजियम

हां, यात्रा की जाने वाली दूरी मुख्य सीमित कारक है। यहां मेरी सबसे बड़ी बाधा यह है कि मुझे इस बात का ध्यान रखना होगा कि टुकड़ा मुड़ सकता है, और मुड़ना जारी रख सकता है, किसी भी बिंदु पर यह तब तक पहुंच सकता है, जब तक कि यह अभी भी दूरी उपलब्ध है।
sfphilli

आपका क्या मतलब है, वह इकाई जो एक इकाई को स्थानांतरित कर सकती है? आप इसका मतलब है कि यह करने के लिए कदम कर सकते हैं? आप रैखिक बीजगणित (वैक्टर) से कितने परिचित हैं?
ब्लूराजा - डैनी पफ्लुगुएफ्ट

1
क्या वास्तविक जीवन परिदृश्य आप मॉडल करने की कोशिश कर रहे हैं? आपकी समस्या आवश्यकताओं पर बहुत अस्पष्ट है, जिसके परिणामस्वरूप बहुत अधिक समाधान दृष्टिकोण प्रस्तावित किए जा रहे हैं। (लगभग) इस क्षेत्र की हर विशिष्ट समस्या के लिए एक प्रसिद्ध दृष्टिकोण हैं, लेकिन हर कोई अनुमान लगा रहा है कि आप इन समस्याओं में से कौन सी समस्या से जूझ रहे हैं।
पीटर गेकरेंस

1
@PieterGeerkens मुझे लगता है क्योंकि ओपी कोड का अनुरोध नहीं कर रहा है, वे एक एल्गोरिथ्म का अनुरोध कर रहे हैं। और इस परिदृश्य के बारे में पर्याप्त विवरण प्रदान किया है कि एक एल्गोरिथ्म की कल्पना की जा सकती है। यह सामान्य और स्वीकार्य है।
MichaelHouse

जवाबों:


4

Dijsktra का उपयोग करके एक प्रवाह या दूरी क्षेत्र उत्पन्न करें।

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

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


नहीं काफी कैसे मैं अवधारणा है, या मैं इसे कैसे लागू होगा, लेकिन निश्चित रूप से सही दृष्टिकोण की व्याख्या करता है।
पीटर जार्जेंस

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

@ टिप्पणी: अच्छी बात है, मुझे नहीं लगता कि पूरी तरह से एक के माध्यम से। एल्गोरिथ्म तो शायद थोड़ा बंद है लेकिन दृष्टिकोण काम करना चाहिए।
शॉन Middleditch

@ पीटरगर्केन्स: मैं मानता हूँ कि यह एक बुरा स्पष्टीकरण है। आपको अपना जवाब देना चाहिए जो इसे बेहतर तरीके से समझाए।
शॉन मिडिलडविच

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

4

एक जानवर बल समाधान होगा:

  1. केंद्र में इकाई के साथ, इकाई के चारों ओर चक्कर का एक चक्र बनाएं। सर्कल की त्रिज्या अधिकतम आंदोलन दूरी है। शीर्षकों का घनत्व इस आधार पर बदल सकता है कि आप अंतिम परिणाम कितना विस्तृत चाहते हैं।
  2. प्रत्येक शीर्ष स्थिति के लिए, उस स्थिति की ओर जाने वाली इकाई के संचलन का अनुकरण करें। यह रेंडरिंग के बिना एक तंग लूप में किया जाता है।
  3. जब अधिकतम दूरी स्टीयरिंग सिमुलेशन में पहुंच जाती है, तो शीर्ष को सिम्युलेटेड यूनिट के बिंदु पर ले जाएं। यह बिंदु निकटतम इकाई है जो वर्तमान मोड़ खत्म होने से पहले उस शीर्ष पर पहुंच सकता है। यह सर्कल को वास्तविक आंदोलन के आकार तक सिकोड़ने का प्रभाव है।
  4. संभव आंदोलन दूरी को खींचने के लिए प्रदान किए गए सर्कल बनाने के लिए यूनिट पर केंद्रित एक शीर्ष के साथ उन कोने का उपयोग करें।

यहाँ छवि विवरण दर्ज करें

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


3

मैं एक अलग उत्तर में शॉन के समाधान पर विस्तार करने जा रहा हूं, क्योंकि यह शुरू में एक अलग दृष्टिकोण का प्रतिनिधित्व करता है जो मैं शुरू में प्रस्तावित कर रहा था।

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

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

अब के लिए 2-आयामों को मानते हुए, आप 3 के लिए एक्सट्रपलेशन कर सकते हैं:

आमतौर पर, आपको प्रत्येक स्वीकार्य, असतत समन्वय स्थिति के लिए एक नोड की आवश्यकता होगी। उदाहरण के लिए:

(0,0) - (1,0) - (2,0)
  | \  /  |  \  / |
(0,1) - (1,1) - (2,1)

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

रोटेशन के साथ प्रयोग करने योग्य होने के लिए इस विधि का विस्तार करने के लिए, 3 आयामों में इसी नोडग्राफ की कल्पना करें। Z- दिशा रोटेशन / सामना करने से मेल खाती है, और चक्रीय है, जिसका अर्थ है कि यदि आप + Z दिशा में यात्रा करते रहते हैं तो आप वापस वहीं पहुंच जाते हैं जहाँ से आपने शुरुआत की थी। अब, आसन्न पदों के अनुरूप नोड्स केवल उस दिशा में जुड़े हुए सामने से जुड़े होते हैं। आप हमेशा की तरह पहले से ही खोजे गए नोड्स से जुड़े नोड्स पर पुनरावृति करते हैं। मैं इस योजना में एन, एनई, ई, एसई, एस, एसडब्ल्यू, डब्ल्यू, एनडब्ल्यू को प्रतिबंधित करने की सिफारिश करूंगा।

यह समाधान आपको अंतरिक्ष के सभी सुलभ क्षेत्रों, साथ ही वहां पहुंचने के लिए सबसे अच्छा रास्ता बता सकता है, जब आप वहां पहुंचते हैं तो आपके पास कितना रोटेशन होता है, और वहां पहुंचने पर आपके सभी झुकाव हो सकते हैं।

फिर, जब वास्तव में पथ को निष्पादित करते हैं, तो आप इसे और अधिक प्रामाणिक दिखने के लिए अपने तरीके से प्रक्षेपित करने के लिए स्वतंत्र हैं।


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

1

ऐसा लगता है कि आपको पहले यह तय करने की आवश्यकता हो सकती है कि आप काम पर जाने वाले मोड़ को कितना पसंद करेंगे। जैसे विकल्प:

  • यदि वे शंकु के भीतर चले जाते हैं, तो पहले घूमते हैं, फिर चलना शुरू करते हैं। यह लागू करने और पथ के लिए आसान उपाय है। यह भी कम दिलचस्प नहीं है इसलिए मैं इसका इस्तेमाल नहीं करना चाहता।

  • चलते समय लगातार मोड़, कुल 45 डिग्री तक। यह एक बहुत पेचीदा मामला है, और उम्मीद है कि आप एक के बाद हो। संख्यात्मक रूप से एक निश्चित टाइमस्टेप का उपयोग करते हुए पथ पर एकीकृत करना संभवतः इस दृष्टिकोण का सबसे आसान तरीका है। आपका शंकु अधिकतम (+ X डिग्री हर चरण) और न्यूनतम (-X डिग्री हर चरण) मोड़ से घिरा होगा।

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

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


मैं निश्चित रूप से दूसरे विकल्प का उपयोग करना चाहता हूं, किसी भी समय (उदाहरण के लिए) 45 डिग्री तक, और संभवतः हर तरफ, एक मार्ग के साथ इंगित करता हूं। इसमें बाधाएं भी होंगी, प्रत्येक टुकड़े से बड़ा होगा (विशालकाय चट्टानें सोचें)। जिस तरह से मैं मूल रूप से इस बारे में सोच रहा था वह संभव समापन बिंदुओं का एक शंकु उत्पन्न करना था, और फिर उन समापन बिंदुओं में से प्रत्येक के लिए एक नया शंकु उत्पन्न करना था, और इसलिए हर संभावित स्थान के लिए जब तक कि यह अधिकतम दूरी की यात्रा नहीं करता। उस ने कहा, मैं पूरी तरह से निश्चित नहीं हूं कि क्रेज़ी ओवरकम्प्लिकेशन के बिना इसे लागू करने के बारे में कैसे जाना जाए।
एसफिल्ली

हम्म, ऐसा लगता है कि मैं कुछ विवरणों के बारे में थोड़ा अस्पष्ट था। इस सवाल पर पीछे मुड़कर देखें कि मैं आपको 'टर्न-बेस्ड' निर्दिष्ट कर रहा हूं और यह कि इकाइयाँ अपनी बारी पर 'घुमा या मूव' कर सकती हैं। क्या इसका मतलब यह है कि तब, खिलाड़ी अपने कार्यों को अग्रिम रूप से बदल देता है, और आप चलते समय पथ-प्रदर्शक करना चाहते हैं? आंदोलन को काम करने के तरीके के बारे में कुछ और स्पष्टीकरण मददगार होगा।
TASagent

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

ठीक है, तो यह वास्तव में ऐसा लगता है, दुर्भाग्य से, आपकी इच्छित विशेषताएं संभवतः उस दिक्जिस्त्रा एल्गोरिथ्म के लिए बहुत अधिक प्रतिबंधात्मक हैं जो हम ऊपर बता रहे हैं: - \। संभवतः। जब मैं घर जाऊंगा तो मैं बाद में इसके लिए कुछ चीजों को स्केच करूंगा।
TASagent

आप मूल प्रश्न में समस्या को स्पष्ट करने के लिए एकत्रित की गई इस जानकारी को संपादित करना चाहते हैं, इसलिए बाद में आने वाले लोग अधिक जानकारी के साथ शुरुआत कर सकते हैं।
TASagent
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.