आरपीजी बोर्ड खेल के नियमों के लिए सामान्य नियम पार्सर - यह कैसे करना है?


19

मैं पेन और पेपर स्टाइल आरपीजी सिस्टम के लिए एक सामान्य नियम पार्सर बनाना चाहता हूं। एक नियम में आमतौर पर एक इकाई के कई गुणों के आधार पर एक पासा और गणना मूल्यों के 1 से एन एंटिटी 1 से एन भूमिकाएं शामिल हो सकती हैं।

उदाहरण के लिए:

खिलाड़ी के पास एसटीआर 18 है, उसका वर्तमान में सुसज्जित हथियार उसे +1 एसटीआर का बोनस देता है, लेकिन डीएक्स -1 का एक हिस्सा है। वह एक राक्षस इकाई पर हमला करता है और खेल तर्क को अब नियमों या कार्यों का एक सेट चलाने के लिए आवश्यक है:

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

सरल गणित नियमों के अलावा केवल उपयोगकर्ता के एक निश्चित वर्ग (उदाहरण के लिए योद्धा बनाम जादूगर) या किसी अन्य विशेषता के लिए आवेदन करने जैसी बाधाएं भी हो सकती हैं। तो यह सिर्फ गणितीय कार्यों तक सीमित नहीं है।

यदि आप डंगऑन और ड्रेगन जैसे आरपीजी सिस्टम से परिचित हैं तो आपको पता चल जाएगा कि मैं क्या कर रहा हूं।

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

मैं चीजों के डेटाबेस पक्ष के साथ मदद के लिए कम पूछ रहा हूं, लेकिन इसके बारे में और अधिक कि कैसे अपने नियमों को लचीला रखने के लिए एक संरचना और एक पार्सर के साथ आना है। इसके लिए पसंद की भाषा वैसे php है।

मुझे संपादित करें:

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

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

संपादित करें II:

यहाँ बहुत बुनियादी मूल्य का एक उदाहरण है, लेकिन इसे ठीक से गणना करने के लिए बहुत सी अलग-अलग चीजें और चर खाते हैं।

बेस अटैक बोनस (टर्म) आपका बेस अटैक बोनस (आमतौर पर डी 20 समुदाय द्वारा बीएबी के रूप में जाना जाता है) एक अटैक रोल बोनस है जो चरित्र वर्ग और स्तर से प्राप्त होता है। विभिन्न चरित्र वर्गों के लिए विभिन्न दरों पर बेस अटैक बोनस बढ़ता है। एक चरित्र प्रति चक्कर में दूसरा हमला करता है, जब उसका बेस अटैक बोनस +6 तक पहुंच जाता है, एक तीसरा हमला बेस बोनस +11 या उच्चतर के साथ होता है, और एक चौथाई बेस अटैक बोनस के साथ +16 या उच्चतर होता है। बेस अटैक बोनस अलग-अलग वर्गों से प्राप्त होता है, जैसे कि एक मल्टीकलर्स कैरेक्टर, स्टैक के लिए। एक चरित्र का बेस अटैक बोनस +16 तक पहुंचने के बाद किसी भी अधिक हमले को मंजूरी नहीं देता है, +0 से कम नहीं हो सकता है, और वर्ण स्तर 20 वें तक पहुंचने के बाद वर्ग स्तर के कारण नहीं बढ़ता है। कुछ करतबों के लिए न्यूनतम बेस अटैक बोनस की आवश्यकता होती है।

आप इसे यहाँ पढ़ सकते हैं http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term) कक्षाओं और करतबों के लिंक सहित जो फिर से हमले के लिए आवश्यक मानों की गणना करने के लिए अपने स्वयं के नियम हैं।

मैं सोचने लगा कि इसे यथासंभव सामान्य रखना भी एक अच्छा नियम पार्सर बनाने के लिए बहुत कठिन होगा।



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

1
@jk। यह आलेख मुझे कमांड लाइन प्रोग्राम लॉजिक पार्सिंग के लिए पसंद किए गए पैटर्न की याद दिलाता है, जो कि डिक्शनरी के Funcआधार पर तर्कों के आधार पर प्रोग्राम स्टेट को इनिशियलाइज़ करता है। हैरानी की बात यह है कि मैं Yegge से उस पोस्ट को पहले कभी नहीं मिला, बहुत अच्छा, इसे इंगित करने के लिए धन्यवाद।
जिमी होफा

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

1
ईमानदारी से मैंने सोचा कि यह साइट इस तरह के वैचारिक प्रश्नों के लिए है जबकि stackoverflow.com कोड / कार्यान्वयन समस्याओं के लिए सोचा जाता है।
बुर्जुम

जवाबों:


9

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

सबसे पहले, आदिम परिचालनों का एक समूह खोजें, जिससे अन्य प्रचालनों को कार्यान्वित किया जा सके। उदाहरण के लिए:

  • खिलाड़ी की एक संपत्ति, एक एनपीसी या एक राक्षस प्राप्त करें या सेट करें

  • डाई रोल का परिणाम प्राप्त करें

  • अंकगणितीय अभिव्यक्तियों का मूल्यांकन करें

  • सशर्त अभिव्यक्तियों का मूल्यांकन करें

  • सशर्त शाखाकरण करें

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

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

एक इंटरप्रेटर लिखें जो आपके एएसटी का मूल्यांकन करता है। यह बस पेड़ में प्रत्येक नोड को पढ़ सकता है और जो कहता है वह करता है: a = bबन new Assignment("a", "b")जाता है vars["a"] = vars["b"];। यदि यह आपके जीवन को आसान बनाता है, तो मूल्यांकन से पहले एएसटी को सरल रूप में परिवर्तित करें।

मैं सबसे सरल काम को डिजाइन करने की सलाह देता हूं जो काम करेगा और पठनीय रहेगा। यहाँ एक उदाहरण है कि कोई भाषा कैसी दिख सकती है। आपका डिज़ाइन आपकी विशिष्ट आवश्यकताओं और वरीयताओं के आधार पर आवश्यक रूप से भिन्न होगा।

ATK = D20
if ATK >= player.ATK
    DEF = D20
    if DEF < monster.DEF
        monster.HP -= ATK
        if monster.HP < 0
            monster.ALIVE = 0
        end
    end
end

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


2
एक बुरा तरीका नहीं है, लेकिन मैं लगातार डीएसएल पर संदेह कर रहा हूं, वे सही होने के लिए बहुत काम कर रहे हैं (खासकर यदि आप कस्टम सिंटैक्स और सभी के साथ एक सच्चे डीएसएल के बारे में बात कर रहे हैं, जैसा कि कुछ धाराप्रवाह एपीआई के विरोध में है जो लोग हैं "डीएसएल" को कॉल करना शुरू कर दिया, तो आप बेहतर सुनिश्चित करेंगे कि आप इसे बाहर निकालने के लिए उपयोग करने जा रहे हैं, यदि आप हैं तो इसके लायक है। अक्सर बार मुझे लगता है कि लोग एक डीएसएल का प्रयास करना चाहते हैं जहां वे केवल एक छोटे नियम इंजन के लिए इसका उपयोग करने जा रहे हैं। यहाँ मेरे अंगूठे का नियम है: यदि DSL कार्यान्वयन + उपयोग में कोई DSL की तुलना में कम कोड है, तो इसके लिए जाएं, मुझे नहीं लगता कि इस मामले में ऐसा होगा।
जिमी हॉफ

1
@ जिमीहॉफ: काफी फेयर। यह सिर्फ भाषा-आधारित समाधानों तक पहुंचने के लिए मेरे स्वभाव में है, खासकर खेलों के लिए। मैं शायद कुछ छोटा और कार्यात्मक बनाने की कठिनाई को कम करता हूं क्योंकि मैंने इसे कई बार किया है। फिर भी, यह इस मामले में एक उपयुक्त सिफारिश की तरह लगता है।
जॉन पुरडी

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

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

1
@burzum: अपने इंटरफ़ेस के बारे में लुआ लिपियों को बनाने से क्या होगा?
TMN

3

मैं प्रत्येक कार्रवाई के अलग-अलग "चरणों" का निर्धारण करके शुरू करूंगा।

उदाहरण के लिए, एक मुकाबला चरण शामिल हो सकता है:

GetPlayerCombatStats();
GetEnemyCombatStats();
GetDiceRoll();
CalculateDamage();

इन विधियों में से प्रत्येक में कुछ काफी सामान्य वस्तुओं तक पहुंच होगी, जैसे कि और- Playerऔर Monsterकुछ उचित सामान्य जांच करेंगे जो अन्य संस्थाएं मूल्यों को संशोधित करने के लिए उपयोग कर सकती हैं।

उदाहरण के लिए, आपके पास ऐसा कुछ हो सकता है जो इस तरह से आपके GetPlayerCombatStats()तरीके में शामिल हो :

GetPlayerCombatStats()
{
    Stats tempStats = player.BaseStats;

    player.GetCombatStats(player, monster, tempStats);

    foreach(var item in Player.EquippedItems)
        item.GetCombatStats(player, monster, tempStats);
}

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

एक अन्य उदाहरण के रूप में, मान लीजिए कि आप स्क्वायड को छोड़कर सब कुछ स्लेडिंग की एक तलवार चाहते थे , जो आपको सब कुछ के खिलाफ +4 देता है, जब तक कि उस चीज में तम्बू न हों, जिस स्थिति में आपको अपनी तलवार को छोड़ना होगा और मुकाबला में -10 प्राप्त करना होगा।

इस तलवार के लिए आपके उपकरण वर्ग में GetCombatStatsऐसा कुछ हो सकता है :

GetCombatStats(Player player, Monster monster, Stats tmpStats)
{
    if (monster.Type == MonsterTypes.Tentacled)
    {
        player.Equipment.Drop(this);
        tmpStats.Attack -= 10;
    }
    else
    {
        tmpStats.Attack += 4;
    }
}

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

यह पता लगाने के लिए महत्वपूर्ण चीजें हैं कि कौन से बिंदु मान बदल सकते हैं, और कौन से तत्व उन मूल्यों को प्रभावित करते हैं। एक बार जब आप उन है, अपने व्यक्तिगत घटकों का निर्माण आसान होना चाहिए :)


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

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

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

@burzum मैं सिर्फ आपके प्रश्न का संपादन पढ़ता हूं। आप केवल यूआई प्रयोग के लिए एक नियम इंजन चाहते हैं, मैं संस्थाओं (का एक पूल बनाने पर विचार करेगा Player, Monster, Dice, आदि), और एक "समीकरण" क्षेत्र में कुछ ऐसा है जो खींचें / ड्रॉप इकाई टुकड़े करने के लिए उन की अनुमति देता है की स्थापना, के मापदंडों में भरने इकाई (जैसे भरने के रूप में player.base_attack), और सरल ऑपरेटर निर्दिष्ट करें कि टुकड़े एक साथ कैसे फिट होते हैं। मेरे पास वास्तव में मेरे ब्लॉग पर कुछ पोस्ट है जो एक गणितीय समीकरण को पार्स करता है जिसे आप उपयोग करने में सक्षम हो सकते हैं।
राहेल

@Rachel जो आप वर्णन करते हैं वह आसान है, मृत OOP है, वहाँ भी कई उदाहरण जंगली में हैं जो OOP सिखाने के लिए उदाहरण के रूप में सामान की तरह आरपीजी का उपयोग करते हैं। इन वस्तुओं के होने और उनके साथ काम करना आसान हिस्सा है, मैं उन्हें डेटाबेस से डेटा के आधार पर मक्खी पर बना सकता था। आपके दृष्टिकोण में समस्या GetEnemyCombatStats () की तरह कठोर नियम हैं जो कुछ भी इस विधि को UI के माध्यम से कहीं पर परिभाषित करने और एक db में संग्रहीत करने की आवश्यकता होगी। आपका लेख उस github.com/bobthecow/Ruler या उस github.com/Trismegiste/PhpRules के समान प्रतीत होता है ।
burzum

0

मैं maptool पर विशेष रूप से रंबल के चौथे संस्करण की रूपरेखा देखूंगा । यह सबसे अच्छी प्रणाली है जिसे मैंने स्थापित करने के लिए देखा है जिसके बारे में आप बात कर रहे हैं। दुर्भाग्य से सबसे अच्छा अभी भी भयानक crufty है। उनकी "मैक्रो" प्रणाली है ... चलो कहते हैं ... समय के साथ विकसित हुआ।

"नियम पार्सर" के रूप में, मैं बस उस प्रोग्रामिंग भाषा के साथ रहना चाहता हूँ, जो आप के साथ सहज हो, भले ही वह PHP हो। आपके सिस्टम के सभी नियमों को एन्कोड करने का कोई अच्छा तरीका नहीं है।

अब, यदि आप चाहते हैं कि आपके उपयोगकर्ता THEIR OWN नियमों को लिखने में सक्षम हों, तो आप अपनी स्वयं की स्क्रिप्टिंग भाषा को लागू करने पर विचार कर रहे हैं। उपयोगकर्ता अपने स्वयं के उच्च-स्तरीय कार्यों को लिपिबद्ध करते हैं, आपकी php व्याख्या करती है कि वास्तव में डेटाबेस मूल्यों को प्रभावित करने वाली चीज़ में, और फिर यह त्रुटियों का एक गुच्छा फेंकता है क्योंकि यह एक भयावह रूप से जटिल प्रणाली है जो वर्षों से जगह-जगह जूता-सींग मार रही है। वास्तव में, जॉन पेडी का जवाब गेंद पर सही है।


0

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

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

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

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

एक जाल से आपको बचने की ज़रूरत है अपने प्रदर्शन तर्क को अपने कार्यान्वित गेम मॉडल के साथ मिलाएं। मैं आपके मॉडल के साथ आपके डिस्प्ले कोड को जोड़ने के बजाय प्रदर्शन को आपके मॉडल और डिस्प्ले को उचित रूप से पढ़ने के लिए वोट करूंगा।

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