आफ्नै उत्पादन · Carrom

साँचो कैरम, हामीले आफैँ लेखेको फिजिक्ससहित।

Carrom सटीक डिस्क फिजिक्ससहित काठको बोर्डमा फोन-पहिलो बोर्ड गेम हो। यसमा बंगलादेश, भारत र पाकिस्तानमा खेलिने 29 Game र Tal Gach सहित पाँच प्रकारका खेल छन्, अनलाइन १ बनाम १ र २ बनाम २, बोट र पालैपालो खेलसहित। एउटै TypeScript कोडबेस वेब, Android र iOS मा चल्छ, र अनलाइन खेल हाम्रै रियलटाइम सर्भरमा चल्छ।

वेब, App Store (iPhone र iPad) र Google Play (Android) मा लाइभ।

  • Web (PWA)
  • Android
  • iOS
  • iPadOS
खेल प्रकार, प्रत्येकको आफ्नै नियम इन्जिन
५
स्ट्रोक, ब्राउजर इन्जिनहरूमा बिट-बिट समान
४,३२०
स्वचालित परीक्षण: ३९६ युनिट र १५० ब्राउजर परीक्षण, प्रत्येक ब्राउजर परीक्षण तीन स्क्रिन आकारमा
५४०+
ढिलो गरिएको Fast 3G मा पहिलो लोड
≤ ३ s

एपभित्र

पठाइएको एपका साँचा स्क्रिन, स्टोर सूचीमा देखिए जस्तै।

खेलाडीले के पाउँछन्

  • पाँच खेल प्रकार

    Classic, 29 Game (पहिले २९), Tal Gach (१९ गोटीको टावर फोड्ने, पहिले १७०), Disc Pool र Freestyle, साथै दैनिक चुनौती र ट्युटोरियल।

  • अनलाइन १ बनाम १ र २ बनाम २

    रेटिङअनुसार Quick Match, खाली सिट भर्ने बोट, निजी कोठा, एप खोल्ने चुनौती लिंक, खुला कोठाको लबी, रिम्याच, इमोट, २० सेकेन्डको पालो घडी र हरेक खेल प्रकारको Elo रेटिङ।

  • बोट र पालैपालो खेल

    ४ कठिनाई (सजिलोदेखि विशेषज्ञ) र ४ व्यक्तित्व (सन्तुलित, आक्रामक, रक्षात्मक, ट्रिक-सट) का बोट, प्रत्येकको आफ्नै नाम र झन्डासहित, र एउटै डिभाइसमा २ वा ४ खेलाडीका लागि पालैपालो खेल।

  • तपाईंसँगै चल्ने प्रगति

    सिक्का, एनिमेटेड बोर्ड, स्ट्राइकर र गोटी सेटको पसल, उपलब्धि, तथ्यांक र दैनिक स्ट्रिक। सबै डिभाइसमा राख्न Google वा Apple ले साइन इन गर्नुहोस्।

  • सञ्चालक उपकरण

    हाम्रो एडमिन प्यानलले लाइभ खेल र खेलाडी देखाउँछ, मोडरेसन सम्हाल्छ, खेलाडीलाई सन्देशसहित जुनसुकै खेलाडीका सिक्का समायोजन गर्छ, र एप रिलिजबिना विज्ञापन, अनिवार्य अद्यावधिक, समीक्षा अनुरोध, म्याचमेकिङ स्विच र स्टाइलिङसमेत परिवर्तन गर्छ।

  • एउटै कोडबेसबाट जताततै

    एउटै कोडबेसबाट वेब, Android, iPhone र iPad, र वेब एपका रूपमा इन्स्टल गर्न मिल्ने। कोठा लिंकले एप इन्स्टल छ भने एप, छैन भने वेब गेम खोल्छ।

शून्यदेखि बनाइएको

खेलका नियमदेखि यो चल्ने सर्भरसम्म हरेक तह हाम्रै हो।

  1. गेम क्लाइन्ट

    कडा TypeScript, Vite र Canvas 2D, गेम इन्जिन र UI फ्रेमवर्कबिना। घुम्ने बोर्ड र Tal Gach टावरका पूर्वावलोकन शुद्ध CSS 3D हुन्।

    • TypeScript
    • Vite
    • Canvas 2D
    • CSS 3D
  2. हाम्रै फिजिक्स

    फ्रेम दरदेखि स्वतन्त्र, स्थिर १/१२० s चरणमा इभेन्ट-ड्रिभन डिस्क फिजिक्स: पकेटका जबडा, प्वालमाथि पर्याप्त भाग पुगेपछि मात्र खस्ने गोटी, खडखड फर्कने र फुट्ने टावर। यसले सामान्य-प्रयोजनको फिजिक्स लाइब्रेरीलाई प्रतिस्थापन गर्‍यो।

    • Deterministic
    • Seeded randomness
    • Headless tests
  3. रियलटाइम ब्याकएन्ड

    MongoDB मा हाम्रै Node सर्भर, जसले सानो JSON-over-WebSocket प्रोटोकल बोल्छ: get, set, compare-and-set, watch र presence। यसले Firebase Realtime Database ले मूल्यांकन गर्ने उही सुरक्षा-नियम फाइल मूल्यांकन गर्छ।

    • Node.js
    • MongoDB
    • WebSocket
    • esbuild
  4. एप र साइन-इन

    Android र iOS का लागि Capacitor एप। Google र Apple साइन-इन Firebase Auth मार्फत चल्छ, र हाम्रो सर्भरले हरेक टोकन आफैँ जाँच्छ। विज्ञापन AdMob बाट आउँछन्, साँचो पैसाको खरिद छैन।

    • Capacitor
    • Firebase Auth
    • AdMob
    • App Links

सञ्चालन

सर्भर हामी आफैँ चलाउँछौं

बीचमा कुनै गेम-ब्याकएन्ड सेवा छैन: हाम्रै सर्भर, हाम्रै डिप्लोइ, हाम्रै अनुगमन।

  • हाम्रै Linux सर्भर: Cloudflare पछाडि Let’s Encrypt TLS सहित nginx ले खेल पस्कन्छ
  • WebSocket, एप कन्फिग र हेल्थ-चेक systemd अन्तर्गतको Node सेवामा प्रोक्सी हुन्छन्
  • एडमिन प्यानल आफ्नै सेवाका रूपमा चल्छ र मेसिनभित्र मात्र जवाफ दिने सञ्चालक API बोलाउँछ
  • एक कमान्डमा डिप्लोइ: बिल्ड, समयमुद्रित रिलिज अपलोड, स्विच, रिस्टार्ट, हेल्थ-चेक; तुरुन्त रोलब्याकका लागि पछिल्ला ५ रिलिज राखिन्छन्
  • Cloudflare मार्फत बंगलादेशबाट करिब २१० ms माध्य राउन्ड ट्रिप (लन्चमा नापिएको)
  • Google Play र App Store Connect का लागि स्क्रिप्टबाट एप बिल्ड
  • कोठा निमन्त्रणाका लागि Android App Links र iOS युनिभर्सल लिंक

हामीले समाधान गरेका कठिन समस्या

खेलाडीले कहिल्यै नदेख्ने भाग, हामीले नापेका संख्यासहित।

  1. हरेक फोनमा उही फिजिक्स

    समस्या
    अनलाइन खेलमा हरेक फोनले विपक्षीको स्ट्रोक आफैँ सिमुलेट गर्छ। दुई डिभाइसले एउटा संख्या फरक गणना गरे बोर्ड अलग हुन्थे, त्यसैले फिजिक्स जताततै सटीक हुनुपर्थ्यो।
    हामीले के गर्‍यौं
    सिमुलेसनले हरेक JavaScript इन्जिनमा सटीक हुने कार्य मात्र प्रयोग गर्छ, हाम्रै वर्गमूल-आधारित hypot, log, acos, sin र cos सहित। सबै अनियमितता सिडबाट आउँछ र कोरले घडी कहिल्यै पढ्दैन।

    नतिजा Chromium र WebKit इन्जिनमा ४,३२० स्ट्रोक जाँचिए: हरेक बोर्ड बिट-बिट समान।

  2. भेटिएको र बारिएको डिसिंक

    समस्या
    अलि फरक फिजिक्स भएका फरक एप संस्करणका खेलाडीहरू एकसाथ जोडिन्थे, र तिनका बोर्ड नमिल्ने भए।
    हामीले के गर्‍यौं
    अब प्रोटोकल संस्करणले म्याचमेकिङ र कोठा नियन्त्रण गर्छ, र संस्करण नबढाई फिजिक्स बदलिए फिजिक्स फिंगरप्रिन्ट परीक्षणले बिल्ड असफल बनाउँछ।

    नतिजा समान फिजिक्स भएका खेलाडीले मात्र एउटै बोर्ड बाँड्छन्।

  3. निष्पक्ष रूपमा फुट्ने टावर

    समस्या
    Tal Gach मा पहिलो स्ट्रोक १९ गोटीको थुप्रिएको टावरमा लाग्छ। यो साँचो जस्तो महसुस हुनुपर्छ र दुवै खेलाडीका लागि निष्पक्ष।
    हामीले के गर्‍यौं
    ७०% वा बढी गतिको चोटले तलका एक-दुई गोटी निकाल्छ र टावर उभिइरहन्छ; हल्का चोटले ढाल्छ। अनियमितता सिडबाट आउँछ, त्यसैले हरेक डिभाइसले उही फुट्ने दृश्य देख्छ।

    नतिजा बलियो चोटले ९०% पटक तलका गोटी निकाल्छ, हरेक स्क्रिनमा उस्तै।

  4. Mac मा आवाज

    समस्या
    Apple-silicon Mac मा चल्ने iPad एपले AAC वा Opus अडियो डिकोड गर्न सक्दैनथ्यो।
    हामीले के गर्‍यौं
    एपले आवाज र संगीतका १६-बिट WAV प्रति पठाउँछ, र खेलले तिनलाई आफैँ डिकोड गर्छ।

    नतिजा Mac सहित हरेक डिभाइसमा उही आवाज।

  5. खेल नछोई विक्रेता छाड्ने

    समस्या
    अनलाइन खेल Firebase Realtime Database मा सुरु भएको थियो, र हामी खेल नबदली खेलको डेटा आफ्नै सर्भरमा चाहन्थ्यौं।
    हामीले के गर्‍यौं
    हरेक अनलाइन सुविधा एउटै डाटाबेस इन्टरफेससँग बोल्छ। हाम्रो सर्भरले उही अर्थसहित उही नियम फाइल लागू गर्छ, र पूरा खेल तथा १८० भन्दा बढी अनुमति दिइएका वा अस्वीकृत लेखनको एउटा जाँच सुइट दुवै ब्याकएन्डमा चल्छ।

    नतिजा खेलको डेटा अब हाम्रै सर्भरमा छ, र ब्याकएन्ड फेर्नु दुई सेटिङको बिल्ड स्विच हो।

  6. पहिलो हानसम्म छिटो

    समस्या
    साधारण खेलसँग खेलाडीको मन जित्न केही सेकेन्ड हुन्छ, प्रायः ढिलो मोबाइल जडानमा।
    हामीले के गर्‍यौं
    डाउनलोड गर्ने इन्जिन वा फ्रेमवर्क छैन, पहिलो ट्यापअघि अडियो छैन, र ढिलो जडानमा प्रोडक्सन बिल्ड चलाउने प्रदर्शन परीक्षण।

    नतिजा ढिलो गरिएको Fast 3G मा ३ s वा कममा पहिलो लोड।

डेमोजस्तो होइन, उत्पादनजस्तै परीक्षण गरिएको

  • स्क्रिनसट आधाररेखासहित फोन, ट्याब्लेट र डेस्कटप आकारमा चल्ने ३९६ युनिट टेस्ट र १५० ब्राउजर टेस्ट (४०० भन्दा बढी रन)
  • बोट-विरुद्ध-बोट सन्तुलन रन र मंकी टेस्ट
  • डाटाबेस नियमविरुद्ध पूरै अनलाइन खेल खेल्ने इमुलेटर सुइट
  • निर्धारणात्मक फिजिक्सका कारण युनिट टेस्टमा हेडलेस रूपमा सिमुलेट गरिएका स्ट्रोक

प्रविधि

  • TypeScript
  • Vite
  • Canvas 2D
  • Node.js
  • MongoDB
  • WebSocket
  • Capacitor
  • Firebase Auth
  • AdMob
  • Vitest
  • Playwright
  • nginx
  • Cloudflare
  • systemd

GPScom: gpscom.gr को पूर्ण पुनर्डिजाइन

हाम्रा सबै काम हेर्नुहोस्

यसरी बनाइएको गेम वा रियलटाइम एप चाहनुहुन्छ?

हामी गेम र रियलटाइम प्लेटफर्म सुरुदेखि अन्तसम्म डिजाइन, निर्माण र सञ्चालन गर्छौं: एप, सर्भर, स्टोर र सञ्चालन।