लड़ने वाले दो सेनाओं के उत्पादन की गणना


20

मैं फ्लैश का उपयोग करके एक रणनीतिक गेम प्रोग्रामिंग कर रहा हूं। खेल प्रसिद्ध खेल "ट्रावियन" के समान काम करता है।

मेरी समस्या इस प्रकार है: मैं दो सेनाओं के बीच लड़ाई के परिणामस्वरूप खो गए सैनिकों की गणना करने की कोशिश कर रहा हूं। दोनों सेनाओं की अलग-अलग प्रकार की इकाइयाँ हैं। उनमें से कुछ कुछ अन्य इकाइयों के खिलाफ मजबूत हैं और अन्य प्रकारों के खिलाफ कमजोर हैं।

मैं इस मतभेद के प्रभाव को लड़ाई के समीकरण में कैसे डाल सकता हूं?

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


6
क्या आपकी लड़ाइयों का परिणाम विशुद्ध रूप से निर्धारक होना चाहिए या आप किसी तरह की यादृच्छिकता का उपयोग करना चाहते हैं?
sum1stolemyname

4
मुझे नहीं लगता कि इसे मल्टीप्लेयर गेम के रूप में टैग किया जाना चाहिए क्योंकि यह ओपी द्वारा नहीं दिया गया है, यह मानव बनाम एआई हो सकता है। और 'प्रकार निर्भरता' के द्वारा, क्या हम क्लासिक रॉक-> कैंची-> पेपर-> रॉक प्रकार की बात कर रहे हैं?
कम्युनिस्ट डक

जवाबों:


10

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

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

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


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

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

15

सौर स्थानों के अभिजात वर्ग के लिए मैं लैंचेस्टर के समीकरणों से मॉडलिंग युद्ध के लिए प्रेरित था । मैं युद्ध के प्रत्येक दौर में एक साथ कई झगड़े करता था।

पहली लड़ाई में, सभी ने सैनिकों पर हमला किया। एसआरई में सैनिक सैनिकों के खिलाफ सबसे अच्छा है (यह रॉक पेपर कैंची नहीं है, लेकिन पैदल सेना, हवाई हमले और गहरी जगह है)। मैंने एक आक्रमण और रक्षा शक्ति स्थापित की जहाँ सैनिकों ने सबसे अच्छा हमला किया:

attack_strength = 3*soldiers + 1*fighters + 2*cruisers
defense_strength = 10*soldiers

दूसरी लड़ाई में, सभी ने रक्षा स्टेशनों पर हमला किया। SRE में सेनानियों (वायु) रक्षा स्टेशनों (जैसे विमान-रोधी) के खिलाफ सबसे अच्छे हैं:

attack_strength = 1*soldiers + 4*fighters + 2*cruisers
defense_strength = 25*defense_stations

तीसरी लड़ाई में, सभी ने भारी क्रूज़र्स पर हमला किया। एसआरई में भारी क्रूजर अंतरिक्ष में हैं और अन्य भारी क्रूजर के खिलाफ सर्वश्रेष्ठ हैं:

attack_strength = 1*soldiers + 1*fighters + 10*cruisers
defense_strength = 15*cruisers

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

जमीन पर फायरिंग के रास्ते में पैदल सेना के लिए गहरी जगह बनाने के लिए यह यथार्थवादी नहीं था, लेकिन गेमप्ले के कारणों से बेहतर था कि सभी इकाइयां अन्य इकाइयों (कम प्रभावशीलता पर) से लड़ने में सक्षम हों।


12

मेरा कहना है कि 'यदि आप एक स्पष्ट समाधान नहीं ढूंढ सकते हैं, तो एक निहित की तलाश करें'। आप आंतरिक रूप से लड़ाई का अनुकरण कर सकते हैं जब तक कि एक सेना का सफाया या पीछे हटना (आपके खेल के संभावित परिणामों पर निर्भर करता है)।

मैं कुछ इस तरह का उपयोग करेंगे:

लड़ाई के प्रत्येक पुनरावृत्ति के लिए, सभी इकाइयां अवसरवादी हैं, इसलिए वे सबसे अधिक नुकसान करने की कोशिश करते हैं जो वे कर सकते हैं। प्रत्येक इकाई एक दुश्मन इकाई का चयन करती है जो ज्ञात लाभ / नुकसान के आधार पर इस दौर पर हमला करने वाली है।

फिर, सभी सबफ़ेट्स का प्रदर्शन किया जाता है। एक उदाहरण:

बता दें कि स्पीयरमैन कैवेलरी के खिलाफ प्रभावी होते हैं, आर्सेलर के खिलाफ कैवलराय और स्पाइडरमैन के खिलाफ प्रभावी होते हैं।

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

प्रत्येक यूनिट-अटैक-यूनिट ईवेंट को अलग-अलग हल किया जाता है, जिससे हारने वाली यूनिट क्षतिग्रस्त हो जाती है या नष्ट हो जाती है।

सभी व्यक्तिगत झगड़े हल हो जाने के बाद, उन सभी इकाइयों को हटा दें जिन्हें गंभीर रूप से क्षतिग्रस्त या नष्ट कर दिया गया है।

अगला पुनरावृत्ति अब कम हुई सेनाओं का उपयोग करना शुरू कर देता है।


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

मुझे आपका उत्तर बहुत पसंद है, और मुझे लगता है कि मैं इसे यादृच्छिकता के साथ लागू करूंगा :)
अली अलबरानी

3

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

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

मैंने लड़ाई को दो चरणों में तोड़ने का फैसला किया (अमित के मॉडल में तीन के अनुरूप): हवा और जमीन। मैं हमले और बचाव शक्ति की गणना करता हूं, और हमले की ताकत को एक अंश से नीचे समायोजित करता हूं (रक्षक को लाभ देने के लिए)। उस बिंदु पर, यदि हमले की ताकत और बचाव की शक्ति बराबर है, तो हमले में जीत की 50% संभावना है। वहां से, मैं बचावकर्ता की तुलना में हमलावर की ताकत को कम या ज्यादा (या कम) के आधार पर जीत के प्रतिशत की संभावना को समायोजित करता हूं। यहाँ हवा के लिए कुछ सरलीकृत समीकरण हैं:

air_attack_strength = 1 * soldiers + 10 * fighters
air_defence_strength = 2 * soldiers + 25 * stations

differential = (air_attack_strength - air_defence_strength) * constant

chance_of_victory = 50 - differential

मैं निर्दिष्ट करता हूं कि chance_of_victory कभी भी 80 से बड़ा या 5 से कम नहीं हो सकता है। वहां से, मैं सिर्फ 100 में से एक यादृच्छिक संख्या उत्पन्न करता हूं, और फिर उस लड़ाई को आगे बढ़ाता हूं जिसके परिणामस्वरूप भूमि की लड़ाई होती है।

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

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