ट्रेडिंग कार्ड गेम के "स्पेशल इफेक्ट्स कार्ड" को कैसे लागू करें?


16

मैं यहां एक तरह का ट्रेडिंग कार्ड गेम लिखने की कोशिश कर रहा हूं, किसी तरह यह मैजिक द गैदरिंग या यू-गि-ओह के समान है! कार्ड खेल।

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

आपको यह पता लगाने के लिए कि ये कार्ड किस तरह के प्रभाव डाल सकते हैं, यहाँ यू-गि-ओह में मौजूद स्पेल कार्ड इफेक्ट्स के कुछ उदाहरण दिए गए हैं ! कार्ड खेल:

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

कोंमी ने गेम के कई वीडियो गेम बनाए हैं, जो AI और हजारों कार्ड विविधता के साथ पूरा किया गया है। मुझे नहीं लगता कि पूरे डेटाबेस को हार्ड-कोड करना वास्तव में संभव है, क्या यह है?

अब, निश्चित रूप से मैं जो करने की कोशिश कर रहा हूं वह उन खेलों की तरह जटिल नहीं है, लेकिन मैं उत्सुक हूं, वे इन पर कैसे अमल करते हैं?

जवाबों:


17

इस प्रकृति की कई ओपन-सोर्स परियोजनाएं हैं, जिसमें नियमों को लागू करने के विभिन्न दृष्टिकोण हैं। यहाँ एक ब्लॉग प्रविष्टि है अधिक प्रसिद्ध MtG कार्यान्वयन, कार्डफॉर्ज के निर्माता से है। यह पूरी सूची नहीं हो सकती है, लेकिन इसमें कई ओपन-सोर्स प्रोजेक्ट शामिल हैं जहां आप बस कोड ब्राउज़ कर सकते हैं, या विशिष्ट प्रश्नों के लिए फ़ोरम पर जा सकते हैं।

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

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

फिर आप गेम के नियमों के अनुसार उन स्टैक को काम करते हैं, जब तक कि स्टैक खाली न हो, जिस बिंदु पर नए कार्य किए जा सकते हैं आदि।

आदर्श रूप से, यदि आप गेम के नियमों को पूरी तरह से लागू करते हैं, तो आपके नियमों के कोड में एक भी हार्डकोड कार्ड नहीं है। हार्डकोडिंग कार्ड सुविधाजनक शॉर्टकट बना सकते हैं, लेकिन लंबे समय में, यह आपके कोड को ब्लोट करेगा और संभावित नुकसान पैदा करेगा, जैसे कि जब नए कार्ड जारी किए जाते हैं जो उन कार्डों के साथ एक उपन्यास तरीके से बातचीत करते हैं। MtG जैसे गेम में 12,000 से अधिक विशिष्ट कार्ड और दृष्टि में कोई अंत नहीं है, ऐसे कई इंटरैक्शन हैं।


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

अतिरिक्त लिंक: github.com/Fluorohydride/ygopro-core एक प्रसिद्ध ओपन सोर्स YGO कार्यान्वयन के लिए, क्योंकि YGO का भी प्रश्न में उल्लेख किया गया था।
SK19

2

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


या जैसे हैकवर्ट ने सुझाव दिया, कुछ प्रकार के सामान्य ब्लॉक होने चाहिए जो आवश्यक व्यवहार को प्राप्त करने के लिए संयुक्त हों। मुझे लगता है कि इसके अलावा कुछ लॉजिक-ब्लॉक की आवश्यकता होगी। व्यवहार के साझा ब्लॉक होने से कार्ड के लिए फ़िल्टर करना आसान हो सकता है जिसमें कुछ प्रकार के साझा गुण होते हैं।
टोनी

1

मैं mysql db के साथ वेब भाषाओं का उपयोग करके कार्ड गेम की योजना भी बना रहा हूं। मैं वर्तमान में एक बहुत ही सामान्य सेटअप के लिए जा रहा हूं, इसलिए यह नए अनूठे कार्डों के लिए बहुत लचीला है। इसके बजाय उदाहरण के लिए:

reduceHitPoints() { } 
reduceMana() { }
reduceSpeed() { }

यह आसानी से हो सकता है:

reduce($attacker, $target, $reduceWhat, $amount) { }
massReduce($attacker, Array $targets, $reduceWhat, $amount) { }

सभी कार्यों के लिए इस अवधारणा को लागू करने से कक्षाएं सरल हो जाएंगी, नए कार्डों को केवल आपके कार्ड्स टेबल में एक पंक्ति जोड़कर बनाया जा सकता है।

सभी विकल्पों और क्षमताओं को उस एकल पंक्ति में db में परिभाषित किया जाएगा।

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