2009-06-10 8 views
16

मैं कुछ साधारण 2 डी गेम बनाने की कोशिश करने के बारे में सोच रहा हूं, लेकिन मुझे अभी तक कोई भाषा चुननी नहीं है। बहुत से लोग एसडीएल या पायथन के साथ पाइगम के साथ सी ++ की सलाह देते हैं। मैं सुनता रहता हूं कि सी ++ पर विकास काफी धीमा है, और पायथन के साथ विकास का समय काफी तेज़ है।सी ++ धीमी, अजगर तेजी से? (विकास के समय के मामले में)

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

+0

बस एक त्वरित नोट - पीडीजीएम एसडीएल ढांचे के शीर्ष पर बनाया गया है। आप www.pyglet.org – Josip

उत्तर

1

यह समय लेने वाला है क्योंकि सी ++ में आपको अधिक निम्न स्तर के कार्यों से निपटना होगा। पायथन में आप स्मृति प्रबंधन आदि से निपटने के बजाय वास्तविक गेम के विकास पर ध्यान केंद्रित करने के लिए स्वतंत्र हैं

1

ऐसी कई चीजें हैं जो सी ++ को विकसित करने में अधिक समय देती हैं। इसका निचला स्तर, पॉइंटर्स, अलग-अलग पुस्तकालयों के लिए अलग-अलग पुस्तकालय हैं सिस्टम, टाइप सिस्टम, और अन्य हैं मुझे यकीन है कि मैं याद कर रहा हूं।

+0

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

9

मैंने इन शिकायतों को सी ++ से पहले सुना है, लेकिन तथ्य यह है कि, किसी भी भाषा में प्रोग्रामिंग जिसमें आप अपरिचित हैं, समय लेने वाली है।

मैं अच्छा सी ++ प्रोग्रामर शायद ठीक से पाइथन प्रोग्रामर और वीज़ा बनाम ऐप से बहुत तेजी से क्रैंक कर सकता हूं।

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

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

मुझे एक गैर-उत्तर के बारे में पता है।

+4

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

+1

भाषा परिचितता के बारे में प्रारंभिक बिंदु मान्य है, लेकिन मौलिक भाषा मतभेद हैं जो डेवलपर उत्पादकता को सीधे प्रभावित करते हैं, जिन्हें आप स्वीकार या संबोधित नहीं करते हैं। –

+4

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

23

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

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

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

+0

प्लस मैंने सुना है कि आज अधिकांश कंसोल गेम सी ++ (बहुत ही कुशल) इंजन के साथ विकसित किए जाते हैं, लेकिन खेल (पात्र, घटनाएं इत्यादि) का मांस स्क्रिप्ट किया जाता है, क्या यह सच है? –

+0

मैं "अधिकांश गेम" से बात नहीं कर सकता, लेकिन डेस्कटॉप गेम के लिए, यह मेरी समझ है कि आप जो कहते हैं वह सही है। कंसोल गेम्स के लिए, मुझे संदेह होगा कि यह मामला नहीं है। आज के राक्षस कंसोल पर भी, एक व्याख्या की गई भाषा (जैसे पायथन या लुआ) का उपर एक लक्जरी है जो आपके ए-लिस्ट गेम के लिए बहुत महंगा है। अब, यदि आपका मतलब है कि इन वस्तुओं, पात्रों आदि को कच्चे कोड की तुलना में उच्च स्तर पर उपकरण के भीतर बनाया गया है जो तब किसी प्रकार के बाइनरी ऑब्जेक्ट मॉडल में संकलित हो जाते हैं ... तो हाँ, यह मामला होगा। – Lee

+0

@Lee: (मुझे पता है, बहुत देर हो चुकी है) मुझे संदेह है कि पाइथन का उपयोग कंसोल पर किया जाता है, लेकिन मुझे संदेह नहीं है कि लुआ का उपयोग किया जाता है। यह __very__ तेज़ है, और इसकी बहुत कम स्मृति पदचिह्न है। – orlp

0

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

एक बार जब आप ढांचे को चुन लेते हैं, तो भाषा पसंद आसान हो जाती है - उस भाषा का उपयोग करें जिसके लिए ढांचा लिखा गया है।

सी ++ में गेम फ्रेमवर्क के लिए कई विकल्प हैं - पायगैम पाइथन के लिए काम करता है। वहाँ कई कि रूप में अच्छी तरह अन्य भाषाओं/उपकरण के साथ काम (.NET सहित लुआ, आदि)

1

लघु उत्तर

हाँ अजगर विकास समय के संदर्भ में तेजी से होता है कर रहे हैं। वास्तविक जीवन में कई केस स्टडीज हैं जो इसे दिखाते हैं। हालांकि, आप पायथन में 3 डी ग्राफिक्स इंजन नहीं करना चाहते हैं।

+1

पाइथन के साथ कुशल 3 डी का मतलब नहीं लिया जाना चाहिए। मुझे नहीं लगता कि कोई भी पाइथन में एक 3 डी इंजन लिखता है, लेकिन सीओ/सी ++ पुस्तकालयों जैसे कि पीओओपेनजीएल पर कई बाध्यकारी हैं। –

15

पाइथन की शक्ति आपको स्मृति आवंटन जैसे निम्न स्तर के मुद्दों के परीक्षण से निपटने की तुलना में समस्या पर अधिक ध्यान केंद्रित करने की अनुमति देने की क्षमता में है। मैं गिनती नहीं कर सकता कि सी या सी ++ में मेमोरी लीक को ट्रैक करने के विकास के कितने दिन बर्बाद हो गए हैं। सभी उच्च स्तरीय भाषाओं का लाभ।

सी ++ की तुलना में पाइथन सीखना बहुत आसान है, इसलिए आप बुनियादी प्रोग्रामिंग कार्यों को करने में बहुत तेज़ी से बढ़ सकते हैं। इसलिए, आप उन्नत कार्यों में भी तेजी से आगे बढ़ेंगे।

सी ++ में बहुत सारी शक्ति है लेकिन पाइथन की तुलना में पैर में खुद को शूट करने के कई तरीके हैं (यह नहीं कह रहा कि पाइथन में नहीं किया जा सकता है)।

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

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

पायथन भी कई सी तरीकों से मौजूदा सी/सी ++ कोड के साथ बहुत अच्छी तरह से इंटरफेस करता है। इस तरह यदि आपके द्वारा बनाया गया एक नया व्हिजबैंग पायथन मॉड्यूल वास्तव में धीमा है, तो आप उसे सी/सी ++ में सूप कर सकते हैं, फिर इसे ctypes, Boost::Python, या SWIG के माध्यम से पाइथन के साथ लपेटें।

और सबसे अधिक, पायथन एक महान मानक पुस्तकालय के साथ आता है जिसमें आपके लिए बहुत सी चीजें हैं। यह सिर्फ टुकड़े डालने की बात है! इसके पीछे एक महान समुदाय है, इसलिए यदि यह मानक पुस्तकालय में नहीं है, तो वहां कोई अच्छा मौका है कि किसी ने समस्या को हल किया है (PyGame, Numpy, SciPy, Pyserial, PyWin, आदि) आपके लिए। आप इसे सिर्फ Google पर ले जा सकते हैं, इसे पकड़ सकते हैं और सीधे अपने प्रोग्राम में कोड प्लॉप कर सकते हैं ... दूर जाओ!

+5

ध्यान रखें कि आधुनिक सी ++ में मेमोरी प्रबंधन अक्सर स्मार्ट पॉइंटर्स का उपयोग करने का मामला है। –

+0

सच है, यह आसान बनाता है, लेकिन हम स्मार्ट पॉइंटर्स के साथ भी समस्याओं में आ गए हैं। –

+0

मुझे कचरा संग्रह में भी समस्याएं आई हैं, हालांकि मुझे नहीं पता कि पाइथन अभी कितना अच्छा है। सही होना मुश्किल है। फिर भी, यह केवल यहां से बेहतर होगा, और सी ++ में जीसी की ओर कुछ आंदोलन है (हालांकि इस मानक संशोधन में कुछ भी नहीं है)। –

0

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

0

ध्यान दें कि एसडीएल वर्तमान में धीमा है, क्योंकि यह मूल रूप से हार्डवेयर त्वरण का उपयोग नहीं करता है। SFML पसंद का एक विकल्प है, और पायथन में भी उपलब्ध है।

+0

ऐसा नहीं है: http://www.libsdl.org/faq.php?action=listentries&category=2#13 –

2

पायथन के पास सी ++ जैसी प्रोग्रामिंग भाषाओं पर कुछ बड़े फायदे हैं। मैंने स्वयं सी ++, सी और अन्य प्रोग्रामिंग भाषाओं के साथ बहुत कुछ प्रोग्राम किया है। हाल ही में मैं पाइथन में भी प्रोग्रामिंग कर रहा हूं और मुझे इसे बहुत पसंद आया!

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

पूरी भाषा शक्तिशाली सुविधाओं के साथ पैक की गई है और इसमें पुस्तकालयों का एक अच्छा और पूर्ण सेट है।

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

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

पाइथन में कम से कम एक बड़ा ऑनलाइन गेम भी लागू किया गया है।

2

यह उच्च कोड की सभी भाषाओं में एक ही कोड को लिखने के लिए लगभग उतना ही समय लगता है। जीत यह है कि कुछ भाषाओं में अन्य लोगों के कोड का उपयोग करना आसान है। बहुत सारे पायथन/रूबी/पर्ल ऐप्स में, आप 10% कोड लिखते हैं और अन्य 90% करने के लिए पुस्तकालय आयात करते हैं। सी/सी ++ में यह कठिन है क्योंकि पुस्तकालयों में अलग-अलग इंटरफेस और अन्य असंगतताएं हैं।

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

अंत में यह शायद गेम के प्रकार पर निर्भर करता है। यदि आपका प्रोसेसर गहन सी ++ पर जाता है (शायद एक स्क्रिप्टिंग भाषा के साथ अगर यह समझ में आता है)। अन्यथा आप जो भी भाषा पसंद करते हैं उसका उपयोग करें

0

अपने आप को उन दो विकल्पों में क्यों सीमित करें? सी # या जावा के साथ आपको उपयोगी पुस्तकालयों के साथ-साथ कचरा संग्रह और (सी # के मामले में) जेआईटी संकलन के विशाल संग्रह तक पहुंच प्राप्त होती है।

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

जरूरत नहीं कहने के लिए, एक मौजूदा इंजन से काम निश्चित रूप से तेजी से खरोंच :)

0

कुछ लोगों का तर्क होता है कि विकास समय सी में धीमी है ++ जब अजगर की तुलना से जाने से है।

क्या यह मामला नहीं होगा कि आपने पाइथन में किसी एप्लिकेशन (या गेम) को विकसित करने में सहेजा गया समय वह समय है जब आप इसके विकसित होने के बाद प्रदर्शन में सुधार करने के लिए उपयोग करेंगे?और बाद के भाग में जब आपके पास कम से कम विकल्प शेष हैं?

यह काफी हद तक उस उद्देश्य पर निर्भर करता है जिसके लिए आप आवेदन विकसित करने जा रहे हैं।

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

यदि आप इस स्तर पर उपयोग न करने के लिए अपना आवेदन पेश कर रहे हैं, तो निश्चित रूप से पायथन के लिए जाने का विकल्प है।

रखरखाव काफी है, लेकिन अनुशासित कोड इस पर काबू पा सकता है।

बड़े पैमाने पर दीर्घकालिक अनुमानों पर निर्भर करता है। आवेदन कितना गंभीर और महत्वपूर्ण होगा।

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