गेम प्रोग्रामिंग: C # या C ++? [बन्द है]


15

मैंने तय किया है कि मैं वास्तव में क्या चाहता हूं गेम प्रोग्रामिंग करना है। तो सवाल यह है कि एक 18 साल की उम्र में, जो स्वयं सिखाई गई प्रोग्रामिंग सीखना चाहता है, C # और C ++ के बीच सबसे अनुकूल प्रोग्रामिंग भाषा क्या है? (मुझे कहना चाहिए कि मुझे यूनिक्स की परवाह नहीं है क्योंकि मेरा मानना ​​है कि विंडोज़ अभी भी सबसे अधिक इस्तेमाल किया जाने वाला ओएस होगा)

मैं C ++ की मूल बातें जानता हूं, लेकिन C # के बारे में कोई नहीं। मुझे पता है कि C ++ में अधिक ट्यूटोरियल गाइड, डीएलएस और सामान जैसे हैं, जबकि C # नहीं है, लेकिन किसी प्रोग्राम को विकसित करने के लिए किसी एक व्यक्ति के लिए सीखना और उसका उपयोग करना कहीं अधिक आसान है, लेकिन मैंने पढ़ा है भले ही प्रोग्राम को बाधित किया गया हो इसका स्रोत प्राप्त करना आसान है।

खैर, मैं थोड़े बहुत पहले बुनियादी पर ध्यान देना चाहता हूं, मुझे यह कहना होगा कि मुझे सी ++ के लिए एक वरीयता है क्योंकि यह मेरे लिए अधिक उपयुक्त लगता है, लेकिन मुझे इस पर विचार करना चाहिए कि मैं अकेले काम करता हूं। इसलिए अगर मुझे यह पसंद है, तो भी यह सबसे अच्छी बात नहीं हो सकती है।

मुझे वास्तव में यकीन नहीं है कि किसके लिए जाना है, मैंने विभिन्न वेबसाइटों पर बहुत सारे धागे पढ़े हैं और ऐसा लगता है कि C # C ++ से अधिक लोकप्रिय हो रहा है। लेकिन हाँ, यह कहा, मैंने यह भी निर्दिष्ट किया कि मैं गेम प्रोग्रामिंग करना चाहता हूं। इसलिए मुझे सिर्फ "C # की तुलना में कुछ बेहतर बिंदुओं को जानने की आवश्यकता है क्योंकि .net मैमोरी हैंडलिंग की वजह से आसान है जबकि C ++ नहीं है" क्योंकि मैं अभी इसे ढूंढ नहीं पाया।


16
आपको gamedev.stackexchange.com भी मददगार लग सकता है ।
एडम लेअर

1
C # वही है जो मैं फिर से बनाऊँगा ।msdn.com
डैनियल लिटिल

2
यहां भी देखें: gamedev.net
पैट्रिक ह्यूजेस

जवाबों:


21

मैं एक गेम प्रोग्रामिंग करके C ++ सीखता हूं। वह बहुत ही सुखद अनुभव था। मैं आपको वही करने के लिए प्रोत्साहित करता हूं!

हालाँकि अब मैं C # प्रोग्रामर हूँ, मुझे पता है कि अगर C # समय पर उपलब्ध होता तो मैं बहुत अधिक उत्पादक होता।

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

मैंने विशेष रूप से C # गेम प्रोग्रामिंग पर दर्जनों पुस्तकें देखी हैं और Microsoft DirectX और XNA सहित अपने ढांचे को बेहतर बनाने के लिए बहुत प्रयास कर रहा है ।

अद्यतन : आप इस के रूप में अच्छी तरह से रुचि हो सकती है । यह मिगुएल डे इकजा की हालिया ब्लॉग पोस्ट है ।

UPDATE 2013-02-22 XNA समर्थन को रोकने के लिए Microsoft योजना बना रहा है ।


1
तो शायद मुझे एसडीएल या सी ++ के साथ ऐसा कुछ मिलना शुरू हो जाना चाहिए, फिर भविष्य में सी # पर जाएं। ऐसा लगता है कि सी ++ थोड़े ही है, सी # द्वारा प्रतिस्थापित किया जा रहा है इंजन इंजन को छोड़कर # चयन क्यों करना मुश्किल है। !
क्रोनिक्स

2
यह समझें कि C # गेम डेवेलपमेंट का अनुभव करने के लिए उत्कृष्ट है, कुछ गेमिंग प्लेटफॉर्म या अन्य चिंताओं पर पोर्टेबिलिटी के लिए नहीं। सबसे अच्छा मामला परिदृश्य तब होता है जब आप दोनों का उपयोग करके पर्याप्त गेम देव जानते हैं और आप लक्ष्य प्लेटफॉर्म के आधार पर C ++ या C # चुनते हैं।
क्लेम

इसके अलावा, +1 स्पष्ट रूप से। मैं व्यक्तिगत रूप से अभी भी C ++ को पसंद करता हूं, लेकिन यह केवल इसलिए है कि मेरे अधिकांश प्रोजेक्ट को कुछ प्रोजेक्ट-विशिष्ट कारणों से कुछ लोवेल एक्सेस की आवश्यकता है।
Klaim

12

ज्यादातर गेम कंपनियां C ++ का उपयोग करती हैं, शायद अजगर स्क्रिप्ट या पृष्ठभूमि में चलने वाली अन्य भाषाओं के साथ। Moreso क्योंकि OpenGL और DirectX के लिए बाइंडिंग C ++ के उद्देश्य से है (इसके अलावा, यह सुनिश्चित करें कि आप C # में Direct3d सामान ही कर सकते हैं) लेकिन फिर गेम प्रोग्रामिंग के लिए, C ++ मुख्य भाषा है।

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

मैं पहले कुछ बहुत ही सरल के साथ शुरू करूँगा। 2d सामान के लिए SDL (सिंपल डायरेक्टेडिया लेयर) का उपयोग करना बहुत आसान है (किसी चीज़ के लिए टॉप डाउन गेम की तरह) एक बार जब आप 3D में आते हैं तो मुझे लगता है कि OpenGL सीखना आसान है (लेकिन यह सब राय है)। MS के पास उनके DirectX SDK डॉक्यूमेंटेशन में कुछ अच्छे ट्यूटोरियल / नमूने हैं, इसलिए यह देखने लायक है। नेह ट्यूटोरियल हालांकि थोड़ा पुराना हो चुका है।

लेकिन आपके प्रश्न का उत्तर देने के लिए, वे सभी C ++ में आमतौर पर किए जाते हैं।


1
SlimDX .NET के लिए डायरेक्टएक्स रैपर प्रदान करता है
डैनी व्रॉड

1
"गेम प्रोग्रामिंग के लिए, C ++ मुख्य भाषा है।" मैं उस कथन से असहमत हूँ। गेम्स का बाजार एएए कंसोल गेम की तुलना में बहुत व्यापक है - यह बाजार का एक बहुत छोटा खंड है जो लोगों को एहसास होता है। मैं कहता हूं कि C ++ की तुलना में एक्शनस्क्रिप्ट जैसी भाषाओं में कहीं अधिक खेल लिखे गए हैं
MattDavey

8

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

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

यहाँ उस व्यक्ति का पोस्टमार्टम किया गया है जिसने एक सफल XNA गेम (वेपन ऑफ़ चॉइस) विकसित किया है। वह बताता है कि C # / XNA का उपयोग करने से C ++ का उपयोग करने के विरोध में विकास के समय की बचत हुई है। http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

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


मैं पूरी तरह से सहमत हूँ। C ++ में आपके सामने आने वाली मेमोरी मैनेजमेंट की समस्याएं सबसे बड़ी समस्या हैं। ऐसा कोई खेल नहीं है जिस पर मैंने काम किया हो, जिसमें स्मृति के मुद्दे न हों, और मैंने वही बात सुनी है जो 20 साल के दिग्गजों ने खेल के दर्जनों खेल बनाए हैं। यहां तक ​​कि RAII और स्मार्ट पॉइंटर्स समस्या को हल नहीं करते हैं, क्योंकि आपको पुराने डेटा और स्वामित्व के साथ समस्याओं की ओर इशारा करने वाले पॉइंटर्स के साथ समस्याएं मिलती हैं। सीखना कि उन्हें कैसे खोजना और ठीक करना आपको बहुत बेहतर प्रोग्रामर बना देगा, लेकिन यह आपको महीनों तक स्टम्प्ड कर सकता है जब आपके पास बफर ओवररन और असंबंधित हिस्से में गेम क्रैश होता है।
डोमिनिक मैकडोनेल

मैं इस सवाल को जोड़ना चाहूंगा कि C # में भी XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) को इसका फायदा है। अनवांटेड डायरेक्टएक्स की तुलना में XNA को चुनना बहुत आसान है।
वीटर पाय

1
@DominicMcDonnell: आप प्रबंधित # में कहीं न कहीं छिपे हुए सामानों के संदर्भ में मेमोरी समस्याओं को रख सकते हैं, जैसे कि C # भी और जब यह हिट होता है, तो आप इसे शिकार करने के लिए बहुत कठिन समय के लिए जा रहे हैं क्योंकि आप संसाधन नेटवर्क के बारे में सोचने के अभ्यस्त नहीं होंगे।
जन हुदेक

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

3

मैं खेल के विकास के लिए C ++ को बहुत बढ़ावा देता हूं। विभिन्न पेशेवरों और विपक्षों के साथ कुछ अतिरिक्त बाधाएं हैं, सबसे अच्छे कारणों में से एक पोर्टेबिलिटी है।

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

मुझे लगता है कि आपको जो भाषा सीखनी चाहिए वह OpenCL या CUDA, कुछ GPGPU भाषा होगी। व्यक्तिगत रूप से मैं ओपनसीएल को पसंद करता हूं क्योंकि ऐसा लगता है कि यह आगे बढ़ने और आगे बढ़ने की संभावना है, यह मूल रूप से सिर्फ सी शैली है। वहाँ OpenTK है जो C ++ या C # के लिए एक अच्छा आवरण है।

मुझे हमेशा आश्चर्य होता है कि रूबी गेम प्रोग्रामिंग हार्डवेयर त्वरण के साथ कैसा होगा ...


3

रॉ गेम प्रोग्रामिंग आपको बहुत ठंडा छोड़ने वाली है। C # या C ++ में निम्न-स्तरीय ग्राफिक्स कॉल के साथ काम करना एक मामूली बुरा सपना है और आप वास्तव में 2 डी स्प्राइट्स के अकेले 3 डी मॉडल को प्रस्तुत करने के पहिये का पुनर्निर्माण नहीं करना चाहते हैं। चूंकि आप अपने दम पर हैं और प्रोग्रामिंग सीखना चाहते हैं, इसलिए आपकी सबसे अच्छी शर्त एक ऐसा ढांचा ढूंढना है जो आपको थोड़ा आगे बढ़ा सके।

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


2

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

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


C # मोनो (क्रॉस प्लेटफॉर्म) पर भी चलता है, हालांकि फ्रेमवर्क के कुछ हिस्से (जैसे WPF) समर्थित नहीं हैं।
डैनी व्रोड

1
@ डैनी व्रॉड, मैं वास्तव में क्रॉस-प्लेटफॉर्म गेम्स डेवलपमेंट के लिए मोनो की सिफारिश करना पसंद नहीं करता हूं क्योंकि अब तक वे सुविधाओं के मामले में माइक्रोसॉफ्ट पर हमेशा थोड़ा देर से रहे हैं, और मैं इसे बदलने की उम्मीद नहीं करता हूं। इसके अलावा, Microsoft प्लेटफार्मों के लिए C # के साथ विकसित करने का एक प्रमुख प्लस XNA है, और जब तक मोनो भी DirectX प्रदान करता है, तब तक यह गैर-एमएस प्लेटफार्मों पर काम नहीं करने वाला है।
ज़्नक

1
मोनो के लिए एक संगत ओपनप्ले रैपर प्रदान करना होगा, क्योंकि आपने बताया कि डायरेक्टएक्स माइक्रोसॉफ्ट का है। मेरा कहना केवल इतना था कि C # को आंशिक रूप से पोर्ट किया जा सकता है।
डैनी व्रोड

2
यूनिटी के बीच, मोनोगेम (मोनो के लिए ओपनसोर्स XNA), और ओपनटीके में मोनो के लिए बहुत सारे अच्छे गेम लाइब्रेरी हैं।
पत्थरबाज़

1

मैं मुख्य रूप से C ++ को वोट करूंगा क्योंकि यह क्रॉस-प्लेटफॉर्म हो सकता है (यह इस पर निर्भर करता है कि आप अपना कोड कैसे लिखते हैं, निश्चित रूप से) और इसलिए भी क्योंकि मुझे लगता है कि यह आपको स्मृति प्रबंधन के बारे में अधिक जानकारी देता है - क्योंकि आपको इसकी देखभाल करने की आवश्यकता है। लेकिन चूँकि आप linux / unix की परवाह नहीं करते हैं, अगर आप इस समय के लिए मेमोरी जटिलता छोड़ना चाहते हैं, तो C # में अभी फोकस क्यों न करें और फिर C ++ भी सीखें?


स्टैक एक्सचेंज प्रोग्रामर्स पर आपके पहले प्रश्न का उत्तर देने के लिए धन्यवाद।
DeveloperDon

C ++ आज भी सबसे पोर्टेबल भाषा है। विशेष रूप से मोबाइल प्लेटफार्मों में कुछ जावा, कुछ में सी # है, लेकिन अधिकांश में दोनों नहीं हैं। लेकिन सभी को C ++ रखना होगा; वर्चुअल मशीन को देशी मशीन कोड के संकलन के लिए लागू करने की आवश्यकता है और वर्तमान में कुछ हमेशा C ++ है।
Jan Hudec
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.