क्या सी में गेम इंजन लिखना उचित है? [बन्द है]


53

भले ही C ++ राजा के रूप में प्रकट होता है, लेकिन मुझे जो कुछ भी C से कहा गया है वह अभी भी खेलों में व्यापक रूप से उपयोग किया जाता है, विशेष रूप से कंसोल पर। हालाँकि, क्या C में एक पूरा गेम इंजन लिखना अनुचित होगा? क्या हैं, यदि कोई हैं, तो कुछ फायदे जो C को C ++ से अधिक हैं? कोई व्यक्ति संभवतः C ++ पर C का उपयोग क्यों करना चाहेगा?


1
कंसोल गेम का उपयोग c ++ FYI करें!
एलन वोल्फ

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

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

जवाबों:


49

हालाँकि, क्या C में एक पूरा गेम इंजन लिखना अनुचित होगा?

यह उचित है, लेकिन सवाल यह है कि यह आपको क्या खरीदता है? आपको संभवतः चरम पोर्टेबिलिटी सी ऑफ़र की आवश्यकता नहीं है, और जब तक आप वास्तव में इसके खिलाफ निर्धारित नहीं करते हैं, तब तक सी ++ ऑफ़र की सभी सुविधाओं को छोड़ना शर्म की बात है।

क्या हैं, यदि कोई हैं, तो कुछ फायदे जो C को C ++ से अधिक हैं?

बेहतर संकलन समय?

कोई व्यक्ति संभवतः C ++ पर C का उपयोग क्यों करना चाहेगा?

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


3
आईडी टेक 4 तक
ऑप्टिशियन

9
@ जोश: डीबग करने में आसान !? सी-प्रोग्राम डिबग करने के लिए कुख्यात हैं , बड़े पैमाने पर पॉइंटर्स और मेमोरी मैनेजमेंट के कारण। C ++ प्रोग्राम (जब सही C ++ प्रोग्रामिंग मुहावरों का उपयोग करते हैं, जो जब भी संभव हो पॉइंटर्स और मेमोरी-मैनेजमेंट से बचने की प्रवृत्ति होती है) परिमाण के कई आदेश डिबग करना आसान होते हैं।
ब्लूराजा - डैनी पफ्लुगुफ्ट

14
C को मात्र नश्वर द्वारा समझा जा सकता है। लगता है कि C ++ में बहुत सारे फीचर्स और एज केस के सीज़न के प्रोग्रामर एक दशक के बाद भी इसे जीने के लिए इस्तेमाल करने के बारे में सीखते हैं।
जरी कोमप्पा

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

2
@ BlueRaja-DannyPflughoeft #define malloc(x) my_malloc(x) #define free(x) my_free(x)और आप अब मेमोरी डीबग कर रहे हैं। सी ++ के साथ आप कभी नहीं जान पाएंगे कि कब क्या आवंटित किया जाएगा, क्योंकि स्मृति को आवंटित करने के बहुत सारे तरीके हैं (नए,
मैलोक

59

मैंने एक शुद्ध-सी गेम इंजन के साथ बड़े पैमाने पर काम किया है जिसने कई उत्पादों को भेज दिया है, इसलिए यह बिल्कुल संभव है। यहाँ C बनाम C ++ इंजन में काम करने के साथ मेरा व्यक्तिगत अनुभव है:

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

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

व्यक्तिगत रूप से मुझे लगता है कि यह थोड़ा चरम था, क्योंकि मैं वास्तव में छोरों के लिए चर घोषित करने की क्षमता और विरासत के लिए कई पूरी तरह से वैध उपयोग करने से चूक गया। लेकिन, यह वास्तव में हमें बहुत सारी उत्पादकता पर विचार नहीं किया गया था


5
वास्तव में सी में विरासत को लागू करने से आपको कोई रोक नहीं है और यदि आप C99 का उपयोग करते हैं तो आप लूप के लिए चर घोषित कर सकते हैं।
jsimmons

15
बिंदु 3 से असहमत होना। सी में गन्दा, कठिन-से-डिबग कोड लिखना उतना ही आसान है जितना कि C ++ में। बेहतर डिबगिंग सी भाषा में निहित कुछ नहीं है।
डैन ओल्सन

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

6
@ दान: अधिक सामान होने से, सी ++ डिबग करना कठिन है। आप निश्चित रूप से किसी भी सामान का उपयोग करने से खुद को प्रतिबंधित कर सकते हैं, जिस स्थिति में सी के रूप में डिबग करना जितना आसान हो जाता है - क्योंकि यह सी हो जाता है

कम सामान वास्तव में कारण है कि मुझे सी पसंद है। उदाहरण के लिए, सीआई में बस बिट्स और बाइट्स को किसी memcpyभी चीज के साथ कॉपी कर सकते हैं क्योंकि टाइप सिस्टम कॉपी सीटर और डावर्स जैसी चीजों की अनुमति नहीं देता है। जब तक मैं स्पष्ट रूप से इससे बाहर नहीं लौटता मैं किसी फ़ंक्शन से बाहर नहीं निकल सकता, क्योंकि मैं यह जानकर कोड लिख सकता हूं कि मुझे कोड की लगभग किसी भी पंक्ति में साइड इफेक्ट्स रोल नहीं करने होंगे; कोई अपवाद नहीं फेंका जा रहा है। यह सब डेटा संरचनाओं को लिखना इतना आसान बनाता है - सी ++ में सिर्फ एक मानक-अनुरूप लिखना vectorबहुत समय लेने वाला है, खासकर यदि आप इसे बनाना चाहते हैं ...

18

मैं C ++ और Lua में C और Lua में लिखे गए 2D गेम इंजन को फिर से लिख रहा हूं। अब तक का अनुभव काफी अच्छा रहा है। जाहिर है कि वेक्टर और मैट्रिक्स का संचालन सी में अच्छा दिखने के रूप में समाप्त नहीं होता है। लेकिन इसके अलावा मैंने सी ++ डेवलपर के रूप में 10+ वर्ष बिताने के बाद अनुभव को काफी ताज़ा पाया है।

C का C + से अधिक लाभ है:

  1. संकलक यह सुनिश्चित करेगा कि कोई भी कोड स्थैतिक आरंभीकरण समय पर नहीं चलाया गया है। यह वैधानिक रूप से वैश्विक डेटा को आवंटित करने के लिए सुरक्षित बनाता है जैसे कि चाबी के रूप में उपयोग किए जाने वाले तार
  2. पारदर्शिता। C असाइनमेंट में या वैरिएबल को आबंटित या डिफाइन करने के लिए कोड लोड होने का कारण नहीं है। C ++ आपके लिए कॉपी कंस्ट्रक्टर्स को ऑटो करेगा, ताकि असाइनमेंट करते समय आपको जो भी निष्पादित होता है उस पर आपका कम नियंत्रण हो।
  3. फ़ंक्शन नाम नहीं होने के कारण बहुत सी डीबगिंग आसान हो सकती है
  4. आमतौर पर C में मेमसी का उपयोग करना ठीक है, लेकिन इससे C ++ में आसानी से परेशानी होगी, क्योंकि कॉपी कंस्ट्रक्टर नहीं चलाए जाएंगे। यह देखते हुए कि memcpy std की तुलना में बहुत तेज है :: उस मामले की प्रतिलिपि बनाएँ

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

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

ईड सॉफ्टवेयर सीआई में उनके अधिकांश इंजनों पर विश्वास करता है, आप रिटर्न टू कैसल वोल्फेंस्टीन को देख सकते हैं जो सी में लिखा गया था।

मैंने अपने अनुभव के बारे में सी बनाम सी ++ की स्केलेबिलिटी और सादे सरणियों की तुलना में एसटीएल वेक्टर के डाउनसाइड्स के बारे में लिखा


11
FYI करें, हर उदाहरण में जो मैंने चेक किया है (जो कि मुझे लगता है, darwin gcc और vc2008), std :: copy सिर्फ एक कॉल को संकलित करने के लिए संकलित करेगा यदि दोनों प्रकार के POD हैं।
ब्रफल

3
इसके अलावा, आरई: एसटीएल वेक्टर बनाम सादे सरणियां, वेक्टर के अच्छे हिस्सों का उपयोग क्यों नहीं करें और यदि आप उन्हें पसंद नहीं करते हैं तो पुनरावृत्तियों के बजाय सामान्य सी पॉइंटर्स का उपयोग करें? आप बस myvector [एन] कर सकते हैं। यह दोनों दुनिया के सर्वश्रेष्ठ की तरह है, यह मानते हुए कि आपका सी कोड मेमोरी आवंटन को उसी तरह से करता है। या, छोरों के लिए, BOOST_FOREACH देखें। सी। की तुलना में इसे और भी सरल बनाता है
ब्रफेल

1
एसटीडी के बारे में टिप के लिए धन्यवाद :: कॉपी मेमसीपी। मुझे नहीं पता था। जब कुछ साल पहले अलेक्जेंड्रेस्कु ने इसका इलाज किया था तो ऐसा नहीं था। C ++ पुनरावृत्तियों के बारे में। यह मुख्य रूप से दर्शन के बारे में है, मैं यह प्रोग्राम करने की कोशिश करता हूं कि जिस तरह से मैं काम करता हूं, उन लोगों के लिए और सी ++ सुविधाओं का लाभ उठाने के लिए सी ++ का कार्यक्रम कैसे होना चाहिए। यह मुख्य रूप से इंगित करने के लिए बनाया गया था कि एसटीएल कंटेनरों जैसे कुछ सी ++ सुधार हमेशा पुराने सी तरीके से करने से बेहतर नहीं हैं।
एरिक Engheim

7

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


1
ध्यान दें कि 99% वाणिज्यिक और इन-हाउस गेम इंजन विभिन्न कारणों (प्रदर्शन गारंटी, डीबगैबिलिटी, थ्रेड सफेदी, नियंत्रण) के लिए बूस्ट और एसटीएल से दूर होते हैं।
काज

42
और 99% आँकड़े बनते हैं।
19-40 में ब्रापल

मुझे ऐसा लगता है कि यह सभी आंकड़ों का हवाला देने के लिए कुछ नियम होना चाहिए।
मैट जेन्सेन

3

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

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

तो यह एक पारंपरिक सी ++ तरीके के बजाय सी-लाइक तरीके से गेम के प्रदर्शन के महत्वपूर्ण हिस्सों को लिखने के लिए कुछ लाभ ला सकता है। मैंने कभी किसी के बारे में नहीं सुना है, हाल के वर्षों में, वास्तव में सी में एक पूरा खेल लिख रहा है।

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


3

मैं आपको कुछ और कारण बताऊंगा कि आज C ++ के बजाय C में गेम इंजन लिखना अनुचित क्यों होगा: STL और BOOST।

मैं कल्पना नहीं कर सकता कि यह कैसे लिखा जा सकता है कि यह अभी तक एक और listकार्यान्वयन है जब आप उस कोड पर भरोसा कर सकते हैं जो बॉक्स से बाहर काम करता है (और आपको लिखना होगा!)


1
क्या कोई बड़ा स्टूडियो वास्तव में बढ़ावा का उपयोग करता है? पोर्टेबिलिटी की वजह से भी एसटीएल का उपयोग अभी भी बहस में है। कम से कम कंसोल इंजन के लिए।
12

2
निजी तौर पर, मैं c ++ / lua इंटरैक्शन (देखें gamedev.net/reference/programming/features/CPPLuaExport/… ) के लिए Boost.FunctionTypes का उपयोग कर रहा हूं और समान यादृच्छिक संख्या पीढ़ी (कण प्रणालियों के लिए) के लिए बूस्ट रैंडम नंबर लाइब्रेरी। इसके अलावा, Boost.Foreach साफ-सुथरा है। BTW, कौन परवाह करता है अगर बड़े स्टूडियो BOOST का उपयोग नहीं कर रहे हैं? उनके पास खरोंच से अपने स्वयं के एसटीएल पुस्तकालयों को लिखने की मानव शक्ति है, मैं नहीं।
लोरिस

1
हाँ, लेकिन यह भी एहसास है कि सी के लिए भी इसी तरह के पुस्तकालय हैं।
jsimmons

2
बहुत सारे लोग खेल में बढ़ावा देते हैं, मुझे विश्वास है। लेकिन यह हम में से कई के लिए एक आवश्यकता (या यहां तक ​​कि वांछनीय) से दूर है।
डैन ओल्सन

6
लोग, जो आप मानते हैं वह अप्रासंगिक है: या तो आप जानते हैं या आप नहीं जानते हैं
ओ ० '।

3

सी में गेम इंजन लिखना वाजिब है। यह तेज़ है और इसे कई सिस्टम में पोर्ट किया जा सकता है। उदाहरण के लिए आप एंड्रॉइड के लिए उपयोग कर सकते हैं (NDK के उपयोग के साथ)। आप इसे आईफोन के लिए इस्तेमाल कर सकते हैं (ऑब्जेक्टिव c सिर्फ c का एक्सटेंशन है)। आप इसे मुख्य OS जैसे Linux, Mac या Windows के लिए भी उपयोग कर सकते हैं। यदि आप सी के साथ सहज महसूस करते हैं, तो मेरा सुझाव है कि आप इसे आज़माएं!


2

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

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

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

यदि आप C में काम करने वाले लोगों के उदाहरणों की तलाश कर रहे हैं, तो आप आईडी को अनदेखा कर सकते हैं क्योंकि मुझे याद है कि उन्होंने C को बहुत पहले छोड़ दिया था। Cryptic Studios (Star Trek Online) अपने सभी इंजन विकास C में करता है, हालाँकि। जहाँ तक मैं बता सकता हूँ, हाँ, यह किसी भी मूर्त लाभ के कारण दर्शन से अधिक है।


0

हां और ना। हां, मैंने इसे कुछ साल पहले किया है, लेकिन मुझे अपने खेल की जरूरत थी डंबल टर्मिनलों पर खिलाड़ियों के साथ 64 बिट रिमोट (यूनिक्स) नहीं। यह गैर तुच्छ था। C अच्छा हो सकता है क्या आप LUA को एकीकृत करना चाहते हैं लेकिन मुझे अंततः C ++ में काम करने के लिए लुआ मिल गया है, इसलिए मैं कहूंगा कि यह संभव है लेकिन ऐसा न करें।


0

एक संभावित अच्छा उत्तर हो सकता है "दोनों का उपयोग करें"?

जैसा कि मैंने सुना है कि पांडा 3 डी परियोजनाओं को अनुकूलित किया जा सकता है, या तो कुछ साइथॉन का उपयोग करके अड़चन को मारना या उन हिस्सों को फिर से भरना।

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

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

बेशक, आप ऐसा इंजन कभी नहीं बना सकते हैं जो सभी गेम डेवलपर्स को फिट करने की आवश्यकता होगी, सिवाय इसके कि यदि आप एक विशेष प्रकार के खेल के लिए अपना इंजन समर्पित करते हैं ...

लेकिन जब से मैं एक अनुभवी गेम डेवलपर नहीं हूं और न ही एक अनुभवी डेवलपर हूं, के लिए मेरी सलाह को मत मानिए ... मुझे लगता है कि सी आपको तेज कोड लिखने के लिए मजबूर करता है, जबकि एक परियोजना के लिए अच्छा और तेज सी ++ कोड लिखना एक खेल जितना बड़ा है एक अलग बात है ...


0

C ने जॉन कार्मैक के लिए काम किया , आपको C का उपयोग करके बहुत सारे लाभ प्राप्त हो सकते हैं, लेकिन जब तक आप उनसे लाभ प्राप्त नहीं करेंगे, तब तक आपको कुछ समय लग सकता है।

यहां आप गेम इंजनों की एक सूची पा सकते हैं जिनमें से कुछ सी में लिखे गए हैं, हो सकता है कि आप अपने स्रोत कोड के माध्यम से सी गेम इंजन कैसे करें, इस पर कुछ जानकारी प्राप्त कर सकते हैं।


0

C कोड सामान्य रूप से मान्य C ++ कोड है।

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

उदाहरण के लिए एक c ++ std :: वेक्टर <> (या समान कंटेनर) पर cstyle array [] का उपयोग करने का लगभग कोई फायदा नहीं है।

वैक्टर असुरक्षित हैं और जाँच की जा सकती है (आप या तो प्राप्त तत्वों का उपयोग कर सकते हैं)

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

या बेशक अगर आपको चीजों को आकार देने की आवश्यकता है, तो वैक्टर अभी भी इसे करना आसान है, आपको मॉलॉक के साथ गड़बड़ करने की ज़रूरत नहीं है, मैन्युअल रूप से चीजों को कॉपी करें और इसी तरह।

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

लेकिन ऑब्जेक्ट ओरिएंटेशन प्रोग्रामिंग गेम्स को बहुत आसान बनाता है। खेल अक्सर वस्तुओं से निपटते हैं।

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