• 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—ये सब चुनौती बने रहे

चरण-दर-चरण: अपना गेम कैसे बनाएं

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 आज़मा सकता है, इसलिए इसे एक बार ज़रूर आज़माना चाहिए

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.