कार्यात्मक भाषा के साथ खेल लिखने की चुनौतियाँ और लाभ क्या हैं?


81

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

इसके अलावा, .NET परिवार के .NET सदस्य के रूप में F # के साथ, इसका उपयोग सीधे XNA के साथ किया जा सकता है, उदाहरण के लिए, जो थ्रेशोल्ड को थोड़ा कम करता है, जैसा कि LISP, हास्केल, एर्लैंग, आदि के साथ जाने का विरोध करता है।

अगर किसी को कार्यात्मक कोड के साथ गेम लिखने का अनुभव है, तो सकारात्मक और नकारात्मक क्या निकला है? यह किसके लिए अनुकूल था, क्या नहीं?

संपादित करें: यह तय करना कठिन है कि इसके लिए एक ही अच्छा उत्तर है, इसलिए यह संभवतः सामुदायिक विकि पोस्ट के रूप में बेहतर है।


3
मेरे पसंदीदा खेलों में से एक (रोग) LISP में लिखा जा रहा है, यह प्रश्न (और इसकी उत्तर क्षमता) मेरे लिए बहुत दिलचस्प है।
जस्टिन एल।

पता नहीं Rogue LISP में लिखा गया था, लेकिन यह दिलचस्प है। क्लासिक खेल। :)
McMuttons

2
निश्चित नहीं कि आप किस बारे में बात कर रहे हैं। दुष्ट सी। में लिखा गया था। roguebasin.roguelikedevelopment.org/index.php?title=Rogue
Mason Wheeler

2
मुझे यकीन है कि आप मूल रोग सी में होने के बारे में सही हैं, क्योंकि यह यूनिक्स पर लिखा गया था, लेकिन लिस्प में निश्चित रूप से कई दुष्ट क्लोन हैं : cl-user.net/asp/root-dir (प्रत्यक्ष गेम लिंक नहीं) , इसमें बहुत सारे विशेष पात्र थे जो टूटी हुई कड़ी लगते हैं)।
साइक्लॉप्स

जवाबों:


57

मैं वर्तमान में हास्केल में एक खेल पर काम कर रहा हूं। मैं सामान्य रूप से कार्यात्मक प्रोग्रामिंग के लिए नहीं बोल सकता, लेकिन विशेष रूप से हास्केल के लिए:

अच्छा

ये भयानक चीजें हैं जो हास्केल को वास्तव में बाहर खड़ा करती हैं।

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

खराब

ये चीजें हैं जो अच्छा नहीं हैं, लेकिन बिना चारों ओर काम किया जा सकता है भी बहुत प्रयास।

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

बदसूरत

ये ऐसी चीजें हैं जिन्हें दूर करने के लिए काफी प्रयास करने होंगे।

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

2
FRP से आप क्या समझते हैं?
वी हू

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

1
एक अनाम उपयोगकर्ता ने "बदसूरत" भाग को पोंछते हुए इस उत्तर को संपादित करने की कोशिश की। "हास्केल में कचरा संग्रहकर्ता अब समवर्ती, समानांतर और जनरेशनल है , जैसा कि 2011 ( ghc.haskell.org/trac/ghc/blog/new-gc-preview )"
जरी कोम्प्ले जूल

1
दुर्भाग्य से, यह वास्तव में सच नहीं है। समवर्ती जीसी को छोटे समग्र सुधार को सही ठहराने के लिए बहुत जटिल पाया गया, और इसमें विलय नहीं किया गया।
जेक मैकआर्थर

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

19

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

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

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

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


7
जब से आपने यह उत्तर पोस्ट किया है, यह 5 साल तक आ रहा है; क्या आप इसे अपडेट करने के लिए तैयार होंगे? वाणिज्यिक गेम इंजन ने कैसे काम किया है? कौन से टुकड़े मूल्यवान साबित हुए? क्या आप आशावाद की तरह समानता का लाभ उठा पाए हैं?
लेवी मॉरिसन

17

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

आपके पास (और मैं गेम प्रोग्रामिंग और हास्केल दोनों को सीखने की कोशिश कर रहा हूँ), इन पंक्तियों के साथ और अधिक चुनौतियाँ हैं। (ये सभी हास्केल-विशिष्ट हैं, क्योंकि मैं वास्तव में अभी तक किसी भी अन्य एफपी भाषाओं के साथ गहराई से नहीं गया हूं।)

  • एफपी लर्निंग कर्व: एफपी को पुनरावृति प्रोग्रामिंग से मानसिकता की पूरी शिफ्ट की आवश्यकता होती है। यदि आप इसके लिए अभ्यस्त नहीं हैं तो लूप के बजाय नक्शे और सिलवटों के संदर्भ में सोचना सीखना एक मानसिक कसरत की आवश्यकता है।
  • मैटी लर्निंग कर्व: हास्केल अपने डिजाइनरों के गणितीय परिष्कार द्वारा धन्य और शापित दोनों है, क्योंकि आप एफपी की मूल बातें जानने के बाद, आप भिक्षुओं, आकृति विज्ञान, तीर, और अन्य विचारों के एक पूरे मेजबान के साथ फंस गए हैं, जबकि कठिन अपने आप में, बहुत सार हैं।
  • मोनाड्स: ये पिल्ले अपने दिमाग को चारों ओर लपेटने के लिए विशेष रूप से कठिन नहीं हैं, खासकर यदि आप एरिक रेमंड के बयान को स्वीकार करते हैं कि वे "फ़ंक्शन कॉल की अनुक्रमण मजबूर करने के तरीके में फ़ंक्शन रचना को चालू करने के लिए हैक हैं।" दुर्भाग्य से (हालांकि यह लोकप्रियता में हास्केल के लाभ के रूप में बेहतर हो रहा है), कई प्रोग्रामर्स के सिर का उद्देश्य या तो अधिकांश प्रोग्रामर के सिर पर होता है ("वे एंडोफुन्नेर्स की श्रेणी में मोनॉयड हैं!"), या पूरी तरह से अनफेलो एनालॉग पर (जैसे) , ब्रेंट यॉर्गी के व्यथित रूप से सटीक उदाहरण, "भिक्षु बर्रिटोस की तरह हैं !" आपको लगता है कि वह मजाक कर रहा है? कोई भी कभी भी इस तरह के नासमझ सादृश्य के साथ एक ट्यूटोरियल में नहीं आ सकता है । फिर से सोचें । "
  • पारिस्थितिक तंत्र: यदि आप सड़क के अन्य सभी धक्कों से परे जाने में कामयाब रहे हैं, तो आप अभी भी बड़े पैमाने पर प्रयोगात्मक भाषा के साथ काम करने के व्यावहारिक दिन-प्रतिदिन की वास्तविकता के खिलाफ गाल-और-जोल करेंगे। यहां पहुंचने पर भगवान आपकी मदद करते हैं। यहाँ जहां मैं गंभीरता से शुरू कर दिया स्काला, या एफ #, या किसी अन्य भाषा जहां वहाँ कम से कम है के लिए jonesing है कुछ अन्य पुस्तकालयों के साथ अंतर की गारंटी। एक बार, मुझे ओपनसेल को विंडोज में लिंक करने और लोड करने के लिए हास्केल मिला। इससे मुझे काफी अच्छा महसूस हुआ। तब ओपनजीएल बाइंडिंग को फिर से जारी किया गया था, और मैंने जो कुछ भी किया था उसे तोड़ दिया। हास्केल-भूमि में वह जीवन है। ईमानदारी से, यह एक दर्द हो सकता है। आप बुलेट इंजन के लिए एक आवरण चाहते हैं? यह Hackage में है - के रूप में abandonwareपिछले साल के नवंबर से। आपको Ogre3d पसंद है? हैकेज में पुस्तकालय के केवल सबसेट के लिए बाइंडिंग है । लब्बोलुआब यह है कि यदि आप खेल के विकास के लिए पीटा पथ से एक भाषा से चिपके रहते हैं, तो आप बुनियादी प्लंबिंग पर काम करने में बहुत अधिक समय बिताएंगे यदि आप सिर्फ झुंड का पालन करते हैं और सी ++ के साथ फंस जाते हैं।

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

एंटटी सलोनन का एक दिलचस्प ब्लॉग है, जो हास्केल गेम्स प्रोग्रामिंग के साथ अपने फिर से ऑफ-ऑफ-अफेयर का विवरण देता है। यह पढ़ने लायक है।

संपादित करें (एक वर्ष बाद): अब जब मैंने स्टेट मोनाड का अधिक अध्ययन किया है, तो मुझे एहसास हुआ कि यह राज्य के लिए एक विशेष रूप से अच्छा समाधान नहीं है जिसका उद्देश्य किसी विशेष कार्य के बाहर बने रहना है। स्टेटलेसनेस के असली समाधान IOVar, ST, MVar (थ्रेड सेफ्टी के लिए) में Haskell में पाए जाते हैं, या Yampa जैसी किसी चीज़ के माध्यम से, जो आंतरिक स्थिति को प्रबंधित करने के लिए Arrows और FRP का उपयोग करता है जो फिर भी डेवलपर से छिपा हुआ है। (यह सूची कठिनाई के क्रम में है, हालांकि पहले तीन विशेष रूप से मुश्किल नहीं हैं एक बार जब आप भिक्षुओं को समझते हैं।)


1
वहाँ कुछ अच्छे विचार, भले ही हास्केल विशिष्ट हों, मुझे लगता है कि वे विचार ऐसे हैं जो अधिकांश फ्रिंज भाषाओं पर लागू होते हैं। जैसा कि आपने संक्षेप में उल्लेख किया है, मुझे लगता है कि यह वह जगह है जहां एफ # जैसी भाषाओं को चमकने की क्षमता है। उदाहरण के लिए, C # के साथ स्थिति / UI को
हैंडल करना

5

ऑब्जेक्टिव कैमल!

अधिकांश प्रकार के सॉफ़्टवेयर विकास में कार्यात्मक भाषाओं का उपयोग करना एक बड़ा लाभ हो सकता है, ज्यादातर क्योंकि वे विकास के समय में काफी कटौती करते हैं। मैं गेम में सर्वर बैकएंड, या क्लाइंट पर AI और तर्क परतों को एक कार्यात्मक भाषा में लिखने की एक बड़ी क्षमता देख सकता हूं। और जैसा कि सभी जानते हैं, LISP का उपयोग NPC स्क्रिप्टिंग के लिए किया गया है।

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

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

वहाँ भी पुस्तकालयों के टन कर रहे हैं। कंप्यूटर साइंस के सामान से लेकर बाइंडिंग से लेकर हर तरह की लाइब्रेरी।


4

वास्तव में किसी भी चीज का जवाब नहीं है, लेकिन मुझे लगता है कि कार्यात्मक भाषाओं में गेम प्रोग्रामिंग की चर्चा कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग (एफआरपी) के उल्लेख के बिना अधूरी है - http://www.haskell.org/frp/ - और इसका सबसे आम कार्यान्वयन ( मुझे लगता है कि), YAMPA - http://www.haskell.org/yampa/


3

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

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


2

मेरे दृष्टिकोण से सबसे बड़ी चुनौतियां होंगी:

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

इस सूची का विस्तार करने के लिए स्वतंत्र महसूस करें (और शायद कुछ सकारात्मक बिंदुओं को जोड़ने के लिए ^ ^)।


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

1

आप अपना कोड C / C ++ में लिख सकते हैं और अपनी स्क्रिप्टिंग के लिए एंबेडेड कॉमन लिस्प जैसी एम्बेडेड भाषा का उपयोग कर सकते हैं। हालांकि इन्हें अलग प्लेटफॉर्म पर कंपाइल करना मुश्किल हो सकता है। अपनी स्क्रिप्टिंग भाषा लिखने का तरीका सीखने के लिए आप लिस्प इन स्माल पीस देख सकते हैं। यह वास्तव में मुश्किल नहीं है, अगर आपके पास समय हो।


0

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

मैंने F # नहीं सीखा है, लेकिन इसके साथ काम करना बहुत आसान हो सकता है।


मेरा प्रारंभिक विचार मचान और राज्य को एक अनिवार्य भाषा के साथ संभालना लिखना हो सकता है, और फिर खेल तर्क और ऐसे कार्यात्मक बिट्स के साथ हो सकता है। .NET और C # / F # के साथ, यह बहुत आसान होगा, उदाहरण के लिए, चूंकि वे एक ही लाइब्रेरी का उपयोग करते हैं और एक दूसरे से बिना किसी वास्तविक जुर्माना के बात कर सकते हैं जो मुझे पता है।
मैकमुर्टन

-1

सकारात्मक प्रदर्शन और पोर्टेबिलिटी होगा और नेगेटिव जटिलता का प्रबंधन करेगा , खेल आज गंभीर रूप से जटिल हैं और ऐसे टूल या प्रोग्रामिंग लैंग्वेज की आवश्यकता है जो जटिलता को बेहतर तरीके से प्रबंधित कर सकें, जैसे कि ऑब्जेक्ट-ओरिएंटेड मेथडोलॉजी या जेनेरिक प्रोग्रामिंग जो कार्यात्मक प्रोग्रामिंग में लागू करना कठिन है भाषा: हिन्दी।


11
क्या आप मेरे साथ मजाक कर रहे हैं? एफपी स्टेरॉयड पर सामान्य प्रोग्रामिंग है। दोनों प्रकार के डेटा प्रकारों और कार्यों को सामान्य करने में सक्षम होने से एफपी को जटिलता का प्रबंधन करने की गंभीर शक्ति मिलती है।
सितंबर को rtperson

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