7 पॉइंट द्वारा gogoj2 2026-01-19 | 14 टिप्पणियां | WhatsApp पर शेयर करें

2004 की गर्मियों में, जब मैं सेना में अपनी सेवा के आख़िरी दिनों में था, तो खाली समय में क्या करूँ यह सोचते-सोचते मैंने गेम प्लानिंग शुरू कर दी। उस समय मेरा छोटा भाई game graphic design पढ़ रहा था, इसलिए मुझे लगा कि रिहा होने के बाद हम दोनों मिलकर कुछ बनाएं तो अच्छा रहेगा। (आह.. मैं तो एक बिल्कुल साधारण humanities छात्र था। तकनीक का मुझे ज़रा भी ज्ञान नहीं था.)

चूँकि यह एक amateur कोशिश थी, इसलिए मैं कुछ छोटा और सरल बनाना चाहता था। मैंने सबसे आसान गेमों में से एक brick breaker (Arkanoid) को आधार बनाकर उसमें मुकाबले का एक नया तरीका जोड़ा। यह ऐसा गेम था जिसके अनगिनत नए versions पहले ही बहुत लोग बना चुके थे, लेकिन मेरे जैसा बनाया हुआ मुझे कहीं नहीं दिखा।

सेना से वापस आने के बाद मैंने अपने भाई और उसके दोस्तों को इकट्ठा करके बड़े उत्साह से एक टीम बनाई, लेकिन ज़्यादा समय नहीं बीता कि सबकी अपनी-अपनी परिस्थितियाँ आ गईं और टीम जल्दी ही टूट गई। मैंने सोचा था कि अगली बार मौका मिलेगा तो इसे बनाऊँगा, लेकिन वह मौका फिर आया ही नहीं। समय बीतता गया, नौकरी करते हुए भी यह ख़याल कभी-कभी मन में आता था, और एक समय जब मैंने थोड़ी देर के लिए Python सीखने की कोशिश की थी, तब भी यही मेरा लक्ष्य था, लेकिन मेरे लिए यह बहुत कठिन काम था.

फिर यूँ ही समय बीतता गया, और पिछले साल गर्मियों में, लगभग 20 साल बाद, एक मीटिंग के बाद साथ में डिनर करते समय मीटिंग में शामिल कंपनियों के CEOs कहने लगे कि अब AI से इतना कुछ बनाया जा सकता है कि सबका फिर से startup शुरू करने का मन कर रहा है। उस दिन मैं काफ़ी प्रेरित हुआ, और रात को घर लौटकर मैंने वह Claude Code इंस्टॉल किया जिसके बारे में सिर्फ़ सुन रखा था। और फिर 2 घंटे बाद… धम्म!!

मैं सोच रहा था कि Claude Code से पहले प्रोजेक्ट के तौर पर क्या बनवाऊँ, तभी मैंने 20 साल पुरानी अपनी आइडिया को फिर से याद करते हुए उसे निर्देश दिए। लगभग 2 घंटे बाद मेरी आँखों के सामने paddle और ball चल रहे थे और bricks टूट रही थीं। उस पल का रोमांच ही कुछ और था। ऐसी गवाही जैसी कहानियाँ अब इतनी भर गई हैं कि शायद आप इसके आदी हो चुके होंगे, लेकिन आधा साल बीतने के बाद आज मेरी हालत यह है कि Claude Code के बिना जीना मुश्किल लगता है।

इस गेम को मैं इस बीच थोड़ा-थोड़ा निखारता रहा, और अब यह कम-से-कम demo के रूप में दिखाने लायक स्तर पर पहुँच गया है, इसलिए हिम्मत करके इसे सार्वजनिक कर रहा हूँ। वह भी GeekNews पर, जहाँ मैं अब तक सिर्फ़ चुपचाप पढ़ता ही रहा था!! मूल रूप से इसे 2-player मुकाबले वाले गेम के रूप में सोचा था, लेकिन multi-user functionality मेरे लिए बहुत बड़ी दीवार साबित हुई, इसलिए इसे कंप्यूटर के ख़िलाफ़ खेलने वाले रूप में बनाया।

संक्षेप में परिचय दूँ तो,

  • यह कंप्यूटर के लिए है। mobile support अभी नहीं है।
  • यह ऐसा brick breaker गेम है जिसमें 2 खिलाड़ी एक ही जगह पर एक-दूसरे की पीठ की ओर होकर खेलते हैं। जो पहले सारी bricks तोड़ देता है, वही जीतता है।
  • अगर मैं ball मिस कर दूँ, तो ball प्रतिद्वंद्वी के क्षेत्र में चली जाती है। अगर प्रतिद्वंद्वी मिस करे, तो वह फिर मेरी ओर लौट आती है।
  • इसमें real-world physics concepts डाले गए हैं, जैसे weight, impact, acceleration, और inertia। यह जितना दिखता है उससे ज़्यादा मुश्किल है।
  • चूँकि यह demo version है, इसलिए एक मैच के बाद restart करके लगातार खेला जा सकता है।
  • बचपन के arcade की तरह, अगर आप record बनाते हैं तो अपना नाम दर्ज कर सकते हैं।

अगर development process से सीखी गई बातें लिखूँ तो

  • Refactoring! Refactoring! Refactoring!
  • मैंने समझा कि लोग जिस refactoring की बात करते हैं वह क्या होती है, और यह भी लगा कि नरकों में शायद refactoring hell जैसा भी कोई नरक हो सकता है।
  • शुरुआत में मैं सपनों में डूबकर Battle.net जैसी चीज़ सोचते हुए features को बेतहाशा बाँटकर और फुलाकर बढ़ाता गया, लेकिन bugs की बाढ़ में आख़िरकार सब reset करना पड़ा, फिर दोबारा बाँटा, फिर जोड़ा... यह Opus 4.5 आने से पहले की बात थी।
  • इतनी-सी चीज़ बनाते हुए भी जब यह हाल हुआ, तो programmers के प्रति मेरे मन में बहुत सम्मान पैदा हुआ।

ख़ुशकिस्मती से अब मुझे अपनी सीमाओं का थोड़ा अंदाज़ा हो गया है, और मैं काम को छोटे हिस्सों में बाँटकर workflow documents बनाता हूँ, development log और Git commits को भी सावधानी से संभालता हूँ। सबसे बड़ी उपलब्धि यह है कि अब मुझे बहुत-सी चीज़ें ख़ुद करके देखने की इच्छा होने लगी है। काम करते समय जिन tools की ज़रूरत पड़ती है, उन्हें ख़ुद बनाने के बारे में मैं गंभीरता से सोच रहा हूँ।

अब इस गेम का क्या करूँ, यही सोच रहा हूँ। मेरी मौजूदा स्थिति में इसका full-scale development करना मुश्किल है, लेकिन इसे यूँ ही दबाकर छोड़ देना भी अफ़सोस की बात लगेगी। मेरी इच्छा है कि यह ऐसा गेम बने जिसे बच्चे खुशी से खेल सकें।

मैं हमेशा GeekNews की ख़बरों से बहुत कुछ सीखता हूँ और कृतज्ञता के साथ उन्हें पढ़ता हूँ। धन्यवाद।

14 टिप्पणियां

 
colus001 2026-01-22

कॉन्सेप्ट मज़ेदार है, लेकिन controls का feel बहुत खराब है। ऐसे game में controls पर inertia लागू करना अच्छा idea नहीं लगता। मुझे लगता है यह difficulty से थोड़ी अलग बात है।

 
gogoj2 2026-01-28

राय के लिए धन्यवाद। आपने जो बात कही, उस पर मैंने विचार किया और inertia को आधा कर दिया ताकि controls थोड़े आसान हो जाएं। मैंने पहले अपने सोचे हुए physics concept को प्राथमिकता दी थी, लेकिन अब गेम की controllability और टकराने पर क्या होना चाहिए, इस पर और गहराई से सोचने लगा हूँ। मैं इसे लगातार सुधारता रहूंगा। (मुख्य काम में व्यस्त होने की वजह से इसे लागू करने में देर हुई।)

 
gogoj2 2026-01-20

पता नहीं FURY कौन हैं.. उन्होंने आकर कमाल का स्कोर दर्ज कर दिया.;;

 
bsh998 2026-01-20

असल दुनिया के physics concepts जोड़े गए हैं, इसलिए weight, impact, acceleration और inertia मौजूद हैं। यह सोच से ज़्यादा कठिन है.

यह टिप्पणी ऐसी लगती है कि गेम physics की समझ थोड़ी कम है, इसलिए अगर इसे थोड़ा और निखार दिया जाए तो अच्छा होगा।

 
cucumber9 2026-01-20

कृपया इसे खुद थोड़ा संवार दीजिए हाहा, और humanities वाले के सामने रौब मत झाड़िए।

 
gogoj2 2026-01-20

मेरे जैसे humanities student के दिल की चिंता करने के लिए धन्यवाद। हा हा ^^

 
bsh998 2026-01-20

मेरे लिए आपके वाक्य को परिष्कृत करना मुश्किल है, क्योंकि मैंने आपका बनाया हुआ कोड नहीं देखा है, इसलिए मुझे यह नहीं पता कि आपने physics engine को किस तरह implement किया है।

 
bsh998 2026-01-20

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

 
gogoj2 2026-01-20

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

जहाँ तक real-world physics लागू करने की बात है, ऐसे गेम आमतौर पर सिर्फ बहुत साधारण collision detection और reflection ही implement करते हैं। लेकिन मुझे लगा कि असली pinball game की तरह, जब गेंद या ईंट टकराएँ तो वजन और speed की वजह से होने वाली collision energy महसूस होनी चाहिए। इसलिए मैंने game library की तुलना में थोड़ा अधिक सटीक Planck.js ढूँढकर इस्तेमाल किया। मैंने यह भी दिखाया है कि जब ईंट गेंद से टकराती है तो वह उस impact से खिसकती है और घूमती भी है। Settings में गेंद का वजन, ईंट का वजन, collision energy का damping, resistance जैसी चीज़ें बदली जा सकती हैं, ताकि settings के हिसाब से अलग अनुभव मिले।
(एक setting है जिसे मैं Crazy Mode कहता हूँ; अगर गेंद का वजन सबसे ज़्यादा कर दें और ईंट का वजन सबसे कम, तो गेम बहुत dynamic हो जाता है.)

कोड GitHub पर भी है।
https://github.com/gogodevelop2/mirror-breakout

 
bsh998 2026-01-20

जी, अगर मैं टिप्पणी करूँ,
सबसे पहले, ऐसा लगता है कि आपने collision design और coefficient of restitution की setting जैसी चीज़ों पर काफ़ी ज़्यादा मेहनत की है।
और खास तौर पर, collision को प्रत्येक object के mass और coefficient of restitution के आधार पर calculate करके होने दिया गया है, लेकिन अगर उन हिस्सों की बात करूँ जो आपके मूल उद्देश्य से थोड़े अलग हैं, तो

क्योंकि paddle या brick का mass या velocity जैसी चीज़ें असल में सिर्फ ball के momentum को ही प्रभावित करती हैं, इसलिए वास्तव में
मूल रूप से यह physics model से प्रेरित collision method का उपयोग करके
ball और (brick, paddle, wall) के बीच की collision को अलग-अलग तरीके से implement करने के ज़्यादा क़रीब है।

इसलिए इसे सीधे वास्तविक physics कहना बेहतर नहीं होगा; बल्कि यह कहना ज़्यादा उपयुक्त लगता है कि आपने physics engine के कुछ तत्वों को अपनाकर collision और momentum change को dynamic तरीके से design किया है।

खासकर, क्योंकि collision process अवास्तविक है, momentum में जो बदलाव आते हैं उन्हें आपने speed correction के रूप में लागू किया है; और यह game feel के लिहाज़ से किसी hidden element जैसा लग सकता है, या फिर काफ़ी unfriendly भी महसूस हो सकता है।

 
bsh998 2026-01-20

थोड़ा और आसान भाषा में समझाऊँ तो,
भौतिकी के सूत्रों और calculation methods का इस्तेमाल किया गया है, लेकिन नतीजे के तौर पर यह एक यथार्थवादी मॉडल नहीं है।
और जो अवास्तविक हिस्से हैं, उनसे पैदा होने वाली समस्याओं को गेमप्ले के हिसाब से रोकने के लिए (अनंत speed, रुक जाना, दिशा नियंत्रण आदि) कई corrections जोड़ी गई हैं.

 
gogoj2 2026-01-20

विस्तृत समझाने के लिए धन्यवाद। मुझे अच्छी तरह समझ में आ गया। चूंकि मैं पहली बार गेम बना रहा था, इसलिए गेम physics की दुनिया और terminology के उचित इस्तेमाल के बारे में मुझे ज़्यादा जानकारी नहीं थी, इस वजह से मैंने बात इस तरह लिख दी कि उससे गलतफ़हमी हो सकती थी। आपकी व्याख्या सुनकर अब मुझे थोड़ा समझ आया कि इस क्षेत्र में काम करने वाले लोग परिणामों को किस स्तर पर देखते हैं। मुझे अभी तक मुख्य लेख को edit करने का तरीका नहीं मिला है.. मैं पता करके उसे संशोधित कर दूंगा। धन्यवाद।

 
[यह टिप्पणी छिपाई गई है.]
 
gogoj2 2026-01-20

धन्यवाद। हा हा, मैं भी आपकी हॉबी गतिविधियों का समर्थन करूंगा!