मैं एक मामूली खेल बनाना चाहता हूं। यह मेरी प्रोग्रामिंग भाषा की पसंद को कैसे प्रभावित करता है? [बन्द है]


26

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

तो, क्या प्रोग्रामिंग भाषा की विशेषताएँ भाषा को सुपाच्य खेलों के लिए अधिक अनुकूल बनाती हैं?


3
यदि आप एक संयमित खेल बनाना चाहते हैं, तो PhysicsFS के बारे में जानने के लिए एक बहुत ही उपयोगी पुस्तकालय हो सकता है। (इसका भौतिकी से कोई लेना-देना नहीं है, नाम को मूर्ख मत बनने दो। :))
पॉल मंटा

10
"लेकिन किसी ने मुझे बताया कि मुझे जावा से चिपके रहने की जरूरत है अगर मैं चाहता हूं कि खेल मध्यम हो", वैसे, यह बी.एस.
रे डे

जवाबों:


18

यह इस बात पर निर्भर करता है कि आप अपने मॉड सिस्टम को कैसे डिजाइन करना चाहते हैं। मैं उनमें से दो का पता लगाऊंगा।

एसडीके

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

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

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

स्क्रिप्टिंग

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

यहां पहली समस्या यह है कि अधिकांश स्क्रिप्टिंग भाषाओं की व्याख्या की जाती है, जो वास्तविक समय प्रणालियों के लिए स्वीकार्य नहीं हो सकती हैं (हालांकि, लुजाना देखें); जैसे खेल।

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

अंत में एक पटकथा इंजन के साथ बातचीत की लागत निषेधात्मक हो सकती है - फिर से Lua को एक उदाहरण के रूप में लेते हुए, C #: C # के साथ संयुक्त जब देशी कार्यों (P / Invoke) के माध्यम से पर्याप्त ओवरहेड होता है और Lua काफी एक '' चैटी '' एपीआई है। यदि आप जिस तरह से 'स्क्रिप्ट एसडीके' डिजाइन करते हैं, तो आपकी प्राथमिक भाषा और आपकी स्क्रिप्टिंग भाषा के बीच बहुत अधिक चैटिंग की आवश्यकता होती है (सी ध्यान दें कि वास्तव में यह समस्या नहीं है)। फिर से आप अपनी स्वयं की स्क्रिप्टिंग भाषा (और C # के मामले में इसे MSIL में संकलित) लिखकर और इसे अपने [आभासी] पर्यावरण के तहत त्वरित तरीके से निष्पादित करके चकमा दे सकते हैं।

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

निष्कर्ष

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


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

1
@DavidGouveia मेरा मानना ​​है कि यूरोपा युनिवर्सलिस (और अलग-अलग समय अवधि के लिए समान गेम) के लिए उपयोग किए जाने वाले इंजन विरोधाभास के कम से कम एक संस्करण ने बाइनरी पैचिंग के एक रूप का समर्थन किया (हालांकि यह मॉड्रेड पैच के स्रोत के रूप में हो सकता है और एक को फिर से शुरू करना चाहिए। डेटा फ़ाइल कार्यान्वयन को बदलकर अधिक सामान्यतः उपयोग किए जाने वाले मॉड के अलावा गेम्स डीएलएल को उचित एसडीके समर्थन होने के बजाय)।
डैन नीली

2
@DavidGouveia देखें: स्रोत इंजन; या यहाँ तक कि Winamp प्लगइन्स। मुझे लगता है कि क्वेक भी इसी तरह काम करता है। मैंने यह समझा है कि आप C # का उपयोग करते हैं; इसलिए आप MEF (प्रबंधित एक्स्टेंसिबिलिटी फ्रेमवर्क) में देखना चाहते हैं: एक इंटरफ़ेस का पर्दाफाश करें, इसे प्रतिबिंब और बॉब के अपने चाचा के माध्यम से लोड करें।
जोनाथन डिकिंसन 20

@JonathanDickinson ओह, मुझे नहीं पता था कि स्रोत इंजन इस मॉडल के तहत चलता है। हमेशा बड़ों के स्क्रॉल निर्माण सेट जैसे उपकरणों के एक सेट की कल्पना की। जानकारी के लिए धन्यवाद (मेरे पास एक विचार है कि यह कैसे काम करता है, बस सोचा कि यह सामान्य मोडर के उपयोग के लिए बहुत जटिल हो सकता है)। और मैं वास्तव में "बॉब के अपने चाचा भाग" पर हँसा । :-)
डेविड गौवेया

1
Re Lua: इन लोगों के पास एक सैंडबॉक्स वाला लुआ है जो विकी सॉफ्टवेयर में उपयोग के लिए उपयुक्त है (और पर्याप्त रूप से अंग्रेजी विकिपीडिया इसका उपयोग करता है)। मुझे यकीन है कि आप इसे अपनी आवश्यकताओं के लिए अनुकूलित कर सकते हैं, लेकिन विस्तार के कुछ हिस्से आपके वकील के साथ GPL'd हैं।
केविन

16

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

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

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

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


5

आपके द्वारा चुनी गई भाषा वास्तव में यह निर्धारित नहीं करती है कि खेल कितना मामूली है, जिस तरह से आप भाषा का उपयोग करते हैं वह अधिक मायने रखता है।

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

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

सबसे अच्छी सलाह जो मैं आपको दे सकता हूं, वह है उन साधनों का उपयोग करना, जिन्हें आप उपयोग करना चाहते हैं; यदि आप किसी NPC को किसी फ़ाइल से परिभाषित करते हैं, तो इसे मॉड्यूल्ड किया जा सकता है, यदि आप विशेष केस में इसे कोड करते हैं तो यह संभवतः नहीं हो सकता है।


1

एक मॉडैलेबल गेम लिखने के लिए जावा पूरी तरह उपयुक्त है।

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

विचार करने के लिए कुछ गतिशील भाषा विकल्प:

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

-2

जावा में ऐसा करने का एक आसान तरीका है, हालांकि यह थोड़ा टेढ़ा है। आप सभी एक फ़ोल्डर में डॉट जावा फाइलों को लेना चाहते हैं और फिर फ़ोल्डर के साथ इस बैच फ़ाइल को डालें, इसे नाम दें: चलाएँ:

javac /src/.java जावा / src /

नोट: आप जितने चाहें उतने वर्ग जोड़ सकते हैं। नोट: अंतिम पंक्ति में सुनिश्चित करें कि कोई एक्सटेंशन aj .java, .exe, .bat, ect नहीं डालें।

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


जैकब मुझे नहीं लगता कि आप इस प्रश्न को समझ पाए हैं, कृपया उत्तरों के माध्यम से पढ़ें और देखें कि क्या इससे आपको यह समझने में मदद मिलती है कि यहाँ क्या चर्चा की जा रही थी।
विक्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.