- 15 साल के अनुभव वाले एक software engineer ने बचपन के एक card game को Go भाषा में बनाने का अनुभव साझा किया
- LLM (Large Language Model) के बिना “Truco” बनाते समय UI design और serverless deployment जैसी हर समस्या को हाथ से हल करना पड़ा और इसमें 3 महीने लगे
- “Escoba” बनाते समय LLM का उपयोग करके backend code conversion और implementation speed को बहुत तेज़ किया गया, और सिर्फ एक prompt में ज़्यादातर चीज़ें काम करने लगीं
- लेख के बाद के हिस्से में Tic-Tac-Toe उदाहरण के साथ Go backend, WASM conversion, और React integration के जरिए कोई भी अपना गेम बना सके, इसके लिए step-by-step guide दी गई है
- लेकिन React frontend और WASM-आधारित game state management अब भी सीधे debug और implement करना पड़ता है
परिचय
- 15 साल के अनुभव वाले एक software engineer को एहसास हुआ कि उन्होंने कभी सच में कोई गेम बनाकर deploy नहीं किया था
- उन्होंने तय किया कि बचपन में Argentina में दोस्तों के साथ खेले गए card games में से एक को Go भाषा में बनाया जाए
Truco: LLM के बिना 3 महीने
- 18 जून 2024 से Truco नाम के card game का विकास Go backend के साथ शुरू किया गया। React की केवल बुनियादी जानकारी के आधार पर frontend लिखा गया
- UI implementation सबसे बड़ी चुनौती थी, और server उपलब्ध न कराना पड़े इसलिए TinyGo का उपयोग करके इसे WASM (WebAssembly) में transpile किया गया, फिर static files को GitHub Pages पर deploy किया गया
- उस समय LLM उपलब्ध नहीं था, इसलिए हर बारीकी को खुद समझना, खोजना और कई trial-and-error के बाद लगभग 3 महीने में काम पूरा हुआ
- इसका मकसद विज्ञापन या कमाई नहीं, बल्कि सिर्फ गेम को पूरा करना था, और रिलीज़ के 1 साल बाद भी यह लगातार खेला जा रहा है
Escoba: LLM के साथ 3 दिन
- 1 साल बाद, परिवार से मिलने Argentina की यात्रा के दौरान उन्होंने अपने भतीजे को Escoba नाम का दूसरा सबसे लोकप्रिय card game सिखाया
- इस बार LLM (Claude) का उपयोग किया गया। Truco के backend को copy करने के बाद Escoba के rules prompt में समझाए गए और code refactoring करने को कहा गया
- पहले ही prompt में लगभग पूरा implementation सही हो गया, और केवल कुछ छोटे bugs और अतिरिक्त features को हाथ से ठीक करना पड़ा
- frontend में कई दिनों तक खुद implementation/debugging करनी पड़ी। LLM की सीमाएँ, React skills, और WASM में game state manage करने जैसा असामान्य environment—ये सब चुनौती बने रहे
चरण-दर-चरण: अपना गेम कैसे बनाएं
- ताकि कोई भी खुद game development आज़मा सके, इसके लिए न्यूनतम hands-on guide और example code पेश किए गए हैं
- Tic-Tac-Toe का example repository दिया गया है, जिसे fork करके शुरुआत की जा सकती है
backend development
- turn-based backend में functionality को काफ़ी स्पष्ट रूप से design किया जा सकता है
- serverless structure बनाए रखना, और इंसानों के बीच खेल वाले ढांचे से बचना, यदि commercial server उपलब्ध न हो, तो एक व्यावहारिक विकल्प है
frontend development
- frontend में निम्नलिखित काम करने होते हैं
- backend से नया
GameState बनाने का अनुरोध
- UI में state दिखाना
- valid actions चुनने के लिए interface देना
- action लागू होने पर backend को command भेजना
- अगर bot की बारी हो, तो backend से अनुरोध करना
backend को WASM में बदलना
- Go code को WASM में build करने के लिए
GOARCH=wasm GOOS=js go build का उपयोग किया जाता है
- binary size बड़ा होने की समस्या आ सकती है, इसलिए TinyGo से size कम किया गया
- frontend से जोड़ने वाली functions export करने के लिए Go में अलग entry point (जैसे
main_wasm.go) लिखा गया और build के समय branching की गई
- main function में
select {} से blocking रखनी पड़ती है ताकि program तुरंत बंद न हो जाए
backend-frontend data integration
- Go के flexible struct जैसे
GameState को WASM में सीधे serialize/deserialize नहीं किया जा सकता
- सारा data JSON format में exchange करना पड़ता है
- TinyGo के documentation के अनुसार input और output दोनों को JSON serialization के जरिए आदान-प्रदान किया जाता है
frontend-backend interface
- frontend से backend functions को सीधे call किया जाता है
GameState केवल WASM के अंदर manage होता है, frontend उसमें mutation नहीं कर सकता; backend ही हमेशा source of truth है
- WASM को दोबारा compile करने के बाद files बदलनी पड़ती हैं, और इसके automation के लिए Makefile का उदाहरण दिया गया है
WASM runtime environment
- इसे चलाने के लिए
wasm_exec.js को head में include करना होता है, और उसी script की मदद से instance बनाकर execute किया जाता है
निष्कर्ष
- गेम बनाना एक आनंददायक अनुभव था, और Go, WASM, React का संयोजन ऐसा तरीका है जिसे कोई भी आज़मा सकता है
- LLM की मदद से productivity बहुत बढ़ गई, लेकिन frontend skills और debugging experience अब भी बहुत महत्वपूर्ण हैं
- इस architecture के साथ कोई भी खुद गेम development आज़मा सकता है, इसलिए इसे एक बार ज़रूर आज़माना चाहिए
अभी कोई टिप्पणी नहीं है.