31 पॉइंट द्वारा GN⁺ 2023-11-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें

कोडिंग में फिर से मज़ा ढूँढना: गेम डेवलपमेंट से burnout से उबरना

  • डेवलपर कम्युनिटी में अक्सर दिखने वाली शिकायत: कोडिंग के प्रति जुनून खत्म हो जाना
  • burnout दूर करने के लिए टिप: कोडिंग को फिर से एंजॉय करने के लिए अपना खुद का गेम बनाना
  • गेम डेवलपमेंट के ज़रिए प्रोग्रामिंग में डूब जाने का व्यक्तिगत अनुभव साझा
  • Go भाषा और Ebitengine लाइब्रेरी का उपयोग करके गेम डेवलपमेंट की सिफारिश

गेम डेवलपमेंट के बुनियादी सिद्धांत

  • फ़िल्म की तरह, गेम तेज़ी से लगातार दिखने वाली इमेजों (frames) का समूह होता है
  • गेम real time में इमेज बनाता है और यूज़र इनपुट के अनुसार अगला frame बदलता है
  • गेम मूल रूप से एक infinite loop है, जिसमें इमेज draw करना और logic update करना बार-बार होता है

प्रोजेक्ट सेटअप

  • Go module बनाना और Ebitengine लाइब्रेरी जोड़ना
  • गेम interface की न्यूनतम implementation से खाली window चलाना

assets लोड करना

  • programmer art का उपयोग करने या free assets लेने की सिफारिश
  • embed पैकेज का उपयोग करके assets को code में लोड करना

इमेज draw करना

  • Draw method के भीतर सभी drawing काम करना
  • ebiten.Image के DrawImage method का उपयोग करके दूसरी इमेज के ऊपर इमेज draw करना
  • DrawImageOptions struct के माध्यम से इमेज की position, rotation, scaling समायोजित करना

गेम logic

  • Game struct गेम की state बनाए रखता है और Update method से state बदलता है
  • उदाहरण के तौर पर player की position को (X, Y) vector के रूप में रखना

movement

  • Update method में player की position update करके movement लागू करना
  • keyboard input के अनुसार player की position बदलना

timer

  • गेम में समय के अनुसार logic बदलने के लिए timer लागू करना
  • Timer struct का उपयोग करके निश्चित समय अंतराल पर event ट्रिगर करना

गेम object

  • player जैसे गेम objects को encapsulate करके मैनेज करना
  • हर object के अपने Update और Draw methods होना

object बनाना

  • meteor object बनाना और स्क्रीन के किनारे से spawn करना
  • Game struct meteor objects को track करता है

bullet चलाना

  • bullet firing logic और cooldown timer लागू करना
  • Player bullet बनाता है और Game उसे track करता है

collision detection

  • collision detection के लिए Rect struct और Collider() method लागू करना
  • गेम के Update में objects के बीच collision जाँचना

GN⁺ की राय

इस लेख की सबसे महत्वपूर्ण बात यह है कि यह डेवलपर्स को burnout से उबरने और कोडिंग के प्रति अपना उत्साह फिर से पाने का एक तरीका दिखाता है। गेम डेवलपमेंट रचनात्मक और मज़ेदार प्रोजेक्ट्स के माध्यम से कोडिंग स्किल्स का अभ्यास करने और साथ ही नई भाषा या लाइब्रेरी सीखने का अवसर देता है। यह लेख डेवलपर्स को कोडिंग को फिर से एक शौक की तरह एंजॉय करने की प्रेरणा देता है, और Go भाषा तथा Ebitengine लाइब्रेरी का उपयोग करके गेम डेवलपमेंट के बुनियादी दृष्टिकोण को समझाकर रुचि जगाता है।

1 टिप्पणियां

 
GN⁺ 2023-11-26
Hacker News राय
  • पहले उपयोगकर्ता नए language या graphics API सीखते समय performance test के लिए firework या simple particle simulation लिखना पसंद करते हैं। 2021 में जब उन्होंने Go और Ebitengine के साथ प्रयोग किया, तो 60fps पर बहुत सारे pixels को move कर पाने वाली हैरान करने वाली performance और इस्तेमाल की आसानी से वे गहराई से प्रभावित हुए।
  • दूसरे उपयोगकर्ता ने पिछले साल Go language का इस्तेमाल करके g3n-engine के साथ game development किया। उन्होंने Go को इसलिए चुना क्योंकि उन्हें यह language पसंद है और वे इसे सीखना चाहते थे, और पहले के 2D game development अनुभव के बाद वे 3D पर काम करना चाहते थे इसलिए g3n-engine चुना। game बनाना paid work की तुलना में कहीं अधिक challenging और rewarding अनुभव है, और सीखने के लिए हमेशा कुछ न कुछ बना रहता है।
  • तीसरे उपयोगकर्ता ने कहा कि Go language के लिए Ebiten API बहुत अच्छा है और API design में इससे प्रेरणा ली जा सकती है। साथ ही, वे Go को C++ में बदलने वाले एक custom compiler का उपयोग करके game development में performance बढ़ाते हैं, C/C++ API तक पहुँचते हैं, और WebAssembly में भी अच्छी performance पाते हैं। इस compiler में Go code से GLSL generate करने का एक experiment भी शामिल है।
  • चौथे उपयोगकर्ता Go developer नहीं हैं, लेकिन वे लंबे समय से एक YouTuber/Twitch streamer को देखते आ रहे हैं जो Go का इस्तेमाल करके game बनाता है। वह streamer Go में एक छोटा MMO बना रहा है और OpenGL तथा WASM का उपयोग करके web version भी विकसित कर रहा है। Go का garbage collection बहुत मजबूत है, ऐसा समझने के बावजूद, बहुत से लोग पूछते हैं, "इसे Go में क्यों बना रहे हो?"
  • पाँचवें उपयोगकर्ता ने सिर्फ लेख के शुरुआती हिस्से पर प्रतिक्रिया देते हुए कहा कि यदि लेखक वैसा burnout महसूस कर रहे हैं जैसा उन्होंने बताया, तो hobby को "फिर से जीतने" की कोशिश करने के बजाय अपनी रुचियों को आगे बढ़ाना बेहतर हो सकता है। यह दिमाग के ठहर जाने का संकेत हो सकता है, और ज़रूरी नहीं कि वह programming से अलग ही हो, लेकिन शायद यह computer science theory में और गहराई से जाने का समय हो।
  • छठे उपयोगकर्ता ने कई वर्षों तक Ebitengine user के रूप में संतोषजनक अनुभव होने की बात कही। यदि आप Ebitengine से बने games का source देखना चाहते हैं, तो awesome-ebitengine list देखने की सिफारिश की गई। उस उपयोगकर्ता की itch.io profile में सूचीबद्ध सभी games Ebitengine का उपयोग करके बनाए गए हैं, और वे सभी open source हैं।
  • सातवें उपयोगकर्ता Ebitengine का उपयोग करके game विकसित कर रहे हैं और उन्हें यह अनुभव ताज़गीभरा लग रहा है।
  • आठवें उपयोगकर्ता ने सवाल उठाया कि क्या Go बड़े games लिखने के लिए उपयुक्त platform है, और क्या इसमें इतनी libraries और performance है कि C# का उपयोग न करने को जायज़ ठहराया जा सके।
  • नौवें उपयोगकर्ता ने कहा कि Go की goroutine अवधारणा के कारण वे सोचते हैं कि क्या यह game development के लिए उपयुक्त language है, और वे कभी न कभी इसे आज़माने का विचार रखते हैं।
  • अंत में, Ebitengine आधारित game के बारे में एक उल्लेख है, और यह बताया गया है कि "Sprite component example कैसा दिख सकता है" वाला वाक्य अधूरा है और उसे ठीक करने की ज़रूरत है।