खेल बनाने के लिए कौन सी कार्यात्मक भाषा सबसे उपयुक्त है? [बन्द है]


19

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

मैंने हास्केल, एफ #, स्काला, इत्यादि के बारे में बात की है। लेकिन मुझे भाषाओं और उनके समुदायों के बीच कोई अंतर नहीं है, न ही मुझे विशेष रूप से परवाह है; खेल के विकास के संदर्भ में छोड़कर।

तो, एक खेल विकास के दृष्टिकोण से, कौन सी कार्यात्मक प्रोग्रामिंग भाषा में गेम प्रोग्रामिंग के लिए सबसे अधिक सुविधाएँ हैं? उदाहरण के लिए, क्या कार्यात्मक भाषाओं के लिए कोई कार्यात्मक गेम डेवलपमेंट लाइब्रेरी / इंजन / फ्रेमवर्क या ग्राफिक्स इंजन हैं? क्या कोई ऐसी भाषा है जो कुछ डेटा संरचनाओं को संभालती है जो आमतौर पर खेल के विकास में बेहतर होते हैं?

निचला रेखा: कार्यात्मक गेम प्रोग्रामिंग के लिए कौन सी कार्यात्मक प्रोग्रामिंग भाषा सबसे अच्छी है और क्यों?

मेरा मानना ​​है कि उम्मीद है कि यह प्रश्न एक स्पष्ट सर्वश्रेष्ठ भाषा घोषित करेगा, इसलिए मैंने इसकी व्यक्तिपरक प्रवृत्ति के बावजूद इसे सीडब्ल्यू चिह्नित नहीं किया है।


2
"आपका क्या मतलब है, 2 डी गेम, या 3 डी गेम?" "हुह? मुझे नहीं पता - aeeeee "
साइक्लोप्स

@ साइक्लोप्स उह, क्या? मुझे समझ नहीं आता ...
Ricket

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

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

1
मुझे नहीं लगता कि सर्वश्रेष्ठ भाषा के बारे में कोई निश्चित उत्तर है।
वी हू

जवाबों:


12

माइक्रोसोफेट्स .net परिवार का F # हिस्सा होने से XNA की पहुंच है, जो खेल के निर्माण के लिए एक शानदार आधार है। थोड़ा सा googling कुछ ट्यूटोरियल, वीडियो और लेख को बदल देता है। महान XNA डॉक्स को भी मदद करनी चाहिए।

हास्केल के लिए खेलों में कुछ आंदोलन हुआ है, यहां देखें । आप शायद ओपेनलाइन बाइंडिंग का उपयोग कर रहे होंगे।

चूंकि स्काला जावा भूमि में खेलता है, यह सभी उपलब्ध जावा इंजन / बाइंडिंग के साथ एकीकृत होता है, इस एसओ पोस्ट को देखें।

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

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


2
जेवीएम के साथ समस्याओं और संकलक कार्यान्वयन की अपरिपक्वता के बीच, मैंने कार्यात्मक शैली का उपयोग करते समय स्काला के प्रदर्शन को अस्वीकार्य पाया है, भले ही भाषा स्वयं इसे अच्छी तरह से समर्थन करती हो। यह समाप्त होता है के बारे में उपवास के रूप में, कहते हैं, पायथन या रूबी, एफ # या OCaml नहीं। (स्काला की गति अधिक OO / प्रक्रियात्मक शैलियों के लिए प्रतिस्पर्धी है।)

मुझे वास्तव में XNA चलाने वाला एक F # प्रोजेक्ट मिला (जो कि कॉर्नफ्लावर ब्लू के साथ एक खाली XNA विंडो है, केवल कोड F # था न कि C #।
RCIX

8

मैं कहूँगा लिस्प।

यह एक स्क्रिप्टिंग भाषा के रूप में गेम में इस्तेमाल किया गया है, शरारती कुत्ते पर कम से कम (या मुझे लगता है) था, और एक बहुत ही परिपक्व भाषा है।

लिस्प का लाभ डीसर्बलाइजेशन में है, जिसे हम परिसंपत्ति प्रबंधन कहते हैं। Deserializing लिस्प तुच्छ है, कोड और डेटा एक हैं। इससे एसेट्स और बिहेवियर के लिए फाइल फॉर्मेट करना आसान हो जाता है। यह आपके लिए json / xml / yaml / bin और AI के लिए एक F # फ़ाइल की तरह नहीं है। आप एस-एक्सप्रेशन के रूप में सब कुछ बचा सकते हैं जो परिसंपत्ति पाइपलाइन को बहुत सरल बनाने जा रहा है।


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

7
यदि मॉडर्स को डराना कुछ ऐसा है जो आपको चिंतित करता है, तो कार्यात्मक भाषा के लिए जाना शायद सही कदम नहीं है।
पॉल विक्स

3
@RCIX & @ जो - नेक्रो शक्तियां सक्रिय होती हैं। वैसे भी, योजना का उपयोग शिक्षण भाषा के रूप में किया जाता है। SICP एक पुस्तक में आधे CS डिग्री की तरह है और इसका उपयोग स्कूलों के एक समूह (हाल ही में MIT सहित) द्वारा किया जाता है, और HTDP एक कम कट्टर परिचय है।
जेसी मिलिकन

1
@ क्रिस और जो वास्तव में। लिस्प और योजना कई विश्वविद्यालयों में परिचयात्मक भाषाएं हैं।
ओबेरहासी

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

8

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

कारण:

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

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

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