2008-12-10 13 views
5

में मॉडल या नियंत्रक का हिस्सा यह मॉडल का हिस्सा हो सकता है क्योंकि यह गेम के व्यावसायिक तर्क का हिस्सा है।दुश्मन/बॉट एआई है। एक एमवीसी गेम

यह नियंत्रक का हिस्सा हो सकता है क्योंकि इसे प्लेयर इनपुट सिमुलेट करने के रूप में देखा जा सकता है, जिसे नियंत्रक का हिस्सा माना जाएगा, है ना? या यह होगा?

मारियो में एक गोम्बा की तरह एक सामान्य दुश्मन के बारे में क्या?

अद्यतन: वाह, वास्तव में वह उत्तर नहीं है जिसका मैं उम्मीद कर रहा था। जहां तक ​​मैं कह सकता था, एआई। स्वायत्त गेम सिस्टम का एक आंतरिक हिस्सा है, इसलिए मॉडल। मैं अभी भी आश्वस्त नहीं हूँ।

उत्तर

5

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

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

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

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

1

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

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

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

मैं मॉडल में व्यवहार कर दिया जाएगा:

Goomba.move() 
{ 
    /* Move Goomba forward one unit. */ 
} 

और फिर उस व्यवहार का आमंत्रण नियंत्रक में जाओ।

Controller.advanceTime() 
{ 
    foreach(Goomba goomba in state.getGoombas()) 
    { 
     goomba.move(); 
    } 
} 
7

टिक-टैक-टो जैसे साधारण गेम के बारे में सोचें जहां आप विभिन्न कंप्यूटर कठिनाई के स्तर के खिलाफ खेलने के लिए चाहते हैं। यदि आप प्रत्येक कठिनाई का स्तर Strategy बनाते हैं, तो विभिन्न कार्यान्वयन में छोड़ना आसान है।

7

दुश्मन ऐ एक मॉडल है - अपने बुद्धिमान धर्मशाला कैसे खेल खेलने के लिए निर्दिष्ट करते हैं कि - और यह नियंत्रकों दोनों मानव खिलाड़ियों और NPCs के लिए उपलब्ध का उपयोग करता है खेल के माहौल में अपने राज्य में हेरफेर करने के।

+0

एक गेम में मॉडल अपने स्वयं के राज्य को बदल सकता है, तो आपको नियंत्रक के माध्यम से जाने की आवश्यकता क्यों है? – Iain

+0

यदि आप किसी अन्य मॉडल की स्थिति बदल रहे हैं तो आपको नियंत्रक की आवश्यकता है। यह ठीक है कि मॉडल अपने आंतरिक को बदल सकता है, लेकिन अन्य कोड को नियंत्रक के माध्यम से जाना चाहिए। उचित प्रतिक्रिया के लिए –

1

दुश्मन एआई मॉडल को खेल के नियमों का ज्ञान होगा और उन नियमों के अनुसार अपनी आंतरिक स्थिति बदल जाएगी। खेल नियंत्रक एआई को बाहरी गेम के राज्य के ज्ञान के साथ प्रदान करता है जिसका उपयोग यह तय करने के लिए किया जा सकता है कि इसे अपनी आंतरिक स्थिति कैसे बदलनी चाहिए।

(क्या मैं पहली बार यहाँ लिखा :)

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

एक Goomba के लिए, खेल नियंत्रक मारियो के स्थान के साथ Goomba मॉडल अपडेट होगा (अगर यह अपनी दृष्टि में है) और Goomba मॉडल जहां इसे स्थानांतरित करने का इरादा रखता है के लिए के रूप में खुद को अद्यतन करेगा। नियंत्रक फिर गोम्बा को स्थानांतरित करेगा (यानी।, मॉडल के स्थान को अपडेट करें) यदि कोई बाधा नहीं है और गोम्बा के नए राज्य के साथ दृश्य प्रस्तुत करें।

10

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

यदि आप स्वयं को पैटर्न में एक समस्या को "मजबूर करने" की कोशिश कर रहे हैं, तो शायद यह सही पैटर्न नहीं है। यूआई के लिए एमवीसी का उपयोग करें - एआई के लिए अन्य पैटर्न (संदेश बस, या पर्यवेक्षक/श्रोता, आदि ...) या अन्य ओओ तकनीकों का उपयोग करें (@ बिल्डर के रणनीति का सुझाव अभी भी लागू होता है)।

अपने पूरे टूलबॉक्स का उपयोग करें - न केवल हथौड़ा। ;-)

+0

+1। जब भी लोग मुझे उद्धृत करते हैं और अधिक उत्साह प्राप्त करते हैं, तब भी मुझे इससे नफरत है। :) –

+0

अच्छी तरह से कहा। मुझे लगता है कि लोग सोचते हैं कि एमवीसी इन दिनों चीजों को करने का एकमात्र तरीका है। @ बिल - ऐसा नहीं है कि आप कम हैं, हालांकि यह है? – Draemon

0

मुझे यकीन नहीं है कि यह एमवीसी में फिट होगा। यह psudo कोड एक बेहद सरलीकृत संस्करण है कि मैंने ए * पथ खोज एआई कैसे किया है।

sprite { 
    x,y 
    image // this object contains everything about drawing 
    path[] // an array of path nodes generated by my AI 
    onNode(node) { 
    if (x == node.x) && (y == node.y) return true 
    return false 
    } 
    update() { 
    moveto(path.last()) 
    if (onNode(path.last())) path.pop() 
    if (path.empty()) path = doAI() 
    } 
    doAI() { 
    ... 
    return newPath 
    } 
    moveto(node) { 
    ... 
    } 
    draw (screen) { 
    if (screen.over(x, y)) image.draw(x-screen.x, y-screen.y) 
    } 
} 

screen = //something the platform would create 
spriteCollection = //my game objects 

foreach (sprite in spriteCollection) { 
    sprite.update() 
    sprite.draw(screen) 
} 
+0

एक गेम परिदृश्य में एमवीसी का बिंदु प्रत्येक दुश्मन (दृश्य) के दृश्य व्यवहार को उनके व्यवहार, स्वास्थ्य आदि (मॉडल) से अलग करना है। तो यदि आप एक 3 डी गेम में एक आइसोमेट्रिक गेम से बदलना चाहते हैं, तो आप एक नया दृश्य जोड़ सकते हैं और मॉडल को बिना छूटे हुए छोड़ सकते हैं। – Iain

0

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

चीयर्स, एलन

-1

न तो। मैं एक एआई को एक स्वतंत्र एजेंट के रूप में नियंत्रक के माध्यम से मॉडल के साथ संचारित करता हूं। या यदि आप चाहें, एआई मॉडल है, लेकिन मॉडल नहीं है।

संबंधित मुद्दे