Produkt i yni · Luaj dhe mëso shah

Një platformë shahu, e ndërtuar nga lëvizja e parë.

chessGM është një aplikacion shahu falas: lojëra online drejtpërdrejt, botë si njerëzit, analiza të plota lojërash me trajner me zë, enigma me vlerësim dhe kurse, në anglisht, bengalisht dhe hindisht. Motorin e shahut, serverin, aplikacionet dhe shërbimin e zërit i shkruam vetë dhe i drejtojmë në infrastrukturën tonë.

Aktiv në ueb dhe në Google Play (Android). Aplikacioni për iOS është në shqyrtim te Apple: vjen së shpejti në App Store.

  • Web (PWA)
  • Android
  • iOS
  • iPadOS
enigma me vlerësim, secila e verifikuar nga motori
15.200
kurse, plus një rrugë që nis nga zeroja
60
Elo kundër Stockfish 19 të kufizuar në 3000 (200 lojëra; shkalla e vetë Stockfish)
+164
p99 i shkrimit të lëvizjes në test ngarkese me 2.500 lojëra njëkohësisht
3 ms

Brenda aplikacionit

Ekrane të vërteta nga aplikacioni i publikuar, siç shfaqen në faqet e dyqaneve.

Çfarë marrin lojtarët

  • Lojë online drejtpërdrejt

    Çiftim i shpejtë në bullet, blitz, rapid dhe klasik, me vlerësim ose pa, me sahate në server, vlerësime Glicko-2, miq, sfida, mesazhe dhe ndjekje ndeshjesh.

  • Botë që luajnë si njerëzit

    13 personazhe origjinalë dhe botë të frymëzuar nga lojërat publike të lojtarëve të famshëm (pa lidhje me ta). Secili bën gabimet që do të bënte një njeri me vlerësimin e tij.

  • Analiza e lojës me trajner

    Shigjeta gabimesh në tabelë, “See the line” me hapa të folur, shenja etiketash lëvizjesh dhe një panel trajneri që shpjegon pse. Saktësia është kalibruar me 739 lojëra publike të chess.com (diferenca tipike rreth 4 pikë) dhe etiketat e lëvizjeve janë përshtatur me Game Review të chess.com. Pa lidhje me chess.com.

  • Enigma dhe Puzzle Rush

    Rreth 15.200 enigma me vlerësim, me tema, ndihma dhe një enigmë ditore. Puzzle Rush në 3 min, 5 min dhe Survival, plus Rush Battle online me vlerësimin e vet.

  • Kurse me përsëritje të ndarë në kohë

    30 kurse hapjesh me rreth 50 linja secili, 30 kurse taktike, mesloje e fundloje, dhe një rrugë fillestare nga vlerësimi 200. Çdo linjë është e verifikuar nga motori dhe rishikohet me FSRS.

  • Një trajner që shpjegon dhe flet

    Motori ynë i shahut dhe rregullat e shpjegimit, jo një chatbot, shkruajnë çfarë u gjet, çfarë u humb dhe pse një lëvizje ishte e keqe, në anglisht, bengalisht dhe hindisht. Një shërbim zëri me modele zëri me burim të hapur e shqipton; zërat janë të gjeneruar nga makina. Nuk thirret asnjë shërbim IA i jashtëm.

  • Funksionon pa internet dhe mund t’ju njoftojë

    Enigmat, botët, lojërat me dy lojtarë dhe tabela e analizës funksionojnë pa internet në faqen e internetit dhe në aplikacionin për Android. Njoftimet e faqes funksionojnë në shfletuesit e desktopit e të Android; në iPhone, pasi faqja shtohet në Ekranin Kryesor.

  • Falas, me kufij ditorë dhe pëlqim

    Pa blerje brenda aplikacionit. Disa veçori kanë kufij ditorë falas (10 ndihma, 3 analiza të thella, 3 thirrje, 3 lojëra me bisedë zanore) dhe një reklamë me shpërblim në aplikacione shton edhe një nga secila. Lojtarët e rinj fillojnë pa reklama dhe reklamat ndjekin zgjedhjet e pëlqimit të lojtarit (reklama të personalizuara vetëm me pëlqim). Hyni me Google, Apple ose email dhe fshini llogarinë tuaj në aplikacion.

  • Mundni botët, një shkallë në herë

    Një shkallë me 13 botë stërvitjeje, nga më i lehti te më i vështiri, me udhëzuesin tonë për secilin, partnerë stërvitjeje, analizë të lojërave që ngjitni si tekst, enigma të bëra nga gabimet tuaja dhe progres të ruajtur. Nuk lidhet kurrë me botët e të tjerëve.

  • Mësoni si ta mundni kundërshtarin

    Shkruani një emër përdoruesi në chess.com: shfletuesi juaj lexon lojërat e fundit publike të atij lojtari nga API-ja publike e të dhënave të chess.com dhe chessGM i kthen në një plan me hapa dhe kujtesa. Pa lidhje me Chess.com.

  • Bisedë zanore dhe thirrje

    Vetëm zë, pa video. Zëri shkon drejtpërdrejt mes dy pajisjeve (përmes një releje vetëm kur lidhja e drejtpërdrejtë nuk është e mundur); serveri ynë kalon vetëm mesazhet e konfigurimit dhe asgjë nuk regjistrohet apo ruhet. Falas çdo ditë: 3 lojëra me bisedë zanore dhe 3 thirrje të përgjigjura.

  • Tabela dhe figura

    Setet tona të figurave dhe tabelat chessGM, plus katër sete premium me grafikë origjinale: Ebony & Boxwood, Royal Gold, Marble dhe Crystal. Të gjitha janë falas; “Premium” është vetëm një etiketë.

Ndërtuar nga e para

Çdo shtresë është e jona, nga rregullat e lojës te serveri ku funksionon.

  1. Një server Go

    Një binar i vetëm Go shërben API-në HTTP dhe qendrën WebSocket dhe drejton sahatet e lojës, çiftimin, një flotë me 1.200 llogari botësh shtëpiakë (gjithmonë të shënuara si botë) dhe motorët e enigmave e kurseve.

    • Go
    • WebSocket
    • SQLite (WAL)
    • Glicko-2
  2. Motori ynë i shahut

    Gjenerim lëvizjesh me bitboard i verifikuar me perft dhe kërkim alfa-beta, i gjithë i shkruar në Go. Fuqia e plotë shton një rrjet të vogël nervor (NNUE) që e stërvitëm vetë, kryesisht me vlerësimet e hapura të lichess, me disa pozicione të pikëzuara nga Stockfish si mësues; nuk përdoren peshat e rrjetit të asnjë motori tjetër. Mat rreth 3160 në shkallën UCI_Elo të Stockfish 19 (ndeshje me 200 lojëra në 10+0,1, një fije; motori i mëparshëm mati 2840), një shkallë që nuk është Elo e FIDE-s ose e faqes. Versionet më të reja janë edhe më të forta. I njëjti motor funksionon në server, me rrjet më të madh, dhe i kompiluar në WebAssembly në shfletues e aplikacione, me një më të vogël. Game Review, trajneri dhe botët e ulët përdorin motorin e mëparshëm të ngrirë, kështu që shifrat e tyre mbeten të njëjta.

    • Go
    • Bitboards
    • NNUE
    • WebAssembly
  3. Aplikacioni në ueb

    Një aplikacion statik SvelteKit në TypeScript, me service worker për lojë pa internet dhe gjuhë që ngarkohen vetëm kur nevojiten.

    • SvelteKit
    • TypeScript
    • Service worker
    • PWA
  4. Aplikacionet iOS dhe Android

    Aplikacione Capacitor me hyrje native, reklama me pëlqim, njoftime push, të folur native dhe një kopje offline të aplikacionit të ndërtuar brenda versionit iOS.

    • Capacitor
    • AdMob
    • Firebase Cloud Messaging
    • APNs
  5. Shërbimi i zërit

    Një shërbim tekst-në-zë në Go me një ndihmës të vogël C mbi sherpa-onnx, që ekzekuton modele zëri nervore me burim të hapur dhe ruan në cache atë që thotë. Të njëjtat modele funksionojnë edhe në shfletues.

    • Go
    • C
    • sherpa-onnx
    • onnxruntime-web
  6. Bisedë zanore dhe thirrje

    Zë WebRTC peer-to-peer mes dy pajisjeve, me një relé kur rruga e drejtpërdrejtë bllokohet. Serveri kalon vetëm mesazhet e konfigurimit dhe numëron kufijtë ditorë falas.

    • WebRTC
    • TURN

Operacionet

I drejtojmë vetë serverat

Pa shërbim backend loje në mes: serveri ynë, vendosjet tona, monitorimi ynë.

  • Një server Linux i vetëmenaxhuar pas nginx dhe Cloudflare, me TLS nga skaji në skaj
  • Serveri i lojës funksionon si shërbim systemd; WebSockets kalojnë përmes nginx
  • Vendosje me një komandë: ndërtim, ngarkim i një lëshimi me vulë kohe, ndërrim, kontroll shëndeti, ruajtje e lëshimeve të vjetra për rikthim të menjëhershëm
  • Shumë vendosje në ditë, secila ndërrohet në sekonda, me një faqe pritjeje gjatë rinisjes
  • SQLite në mënyrën WAL me kopje rezervë çdo natë
  • Content Security Policy, IP-të e klientëve të besuara vetëm nga Cloudflare, shkrime ndërdomenore të refuzuara, kufizime shpejtësie për WebSocket

Probleme të vështira që zgjidhëm

Pjesët që lojtarët nuk i shohin kurrë, me shifrat që matëm.

  1. Ruajtja e çdo lëvizjeje pa e ngadalësuar lojën

    Problemi
    Nën ngarkesë, shkrimi i çdo lëvizjeje drejtpërdrejt në bazën e të dhënave i çoi shkrimet më të ngadalta në rreth 100 ms.
    Çfarë bëmë
    Lëvizjet grumbullohen dhe shkruhen pas lojës çdo 250 ms, në SQLite me mënyrën WAL, ndërsa sahatet mbeten në server.

    Rezultati p99 i shkrimit të lëvizjes rreth 100 ms → 3 ms me 2.500 lojëra njëkohësisht në test ngarkese. Kërkesa e profilit 17 ms → 1,1 ms.

  2. Saktësi që lojtarët mund t’i besojnë

    Problemi
    Lojtarët e krahasojnë pikët e saktësisë me shifrat që tashmë i njohin nga faqet e mëdha të shahut.
    Çfarë bëmë
    E kalibruam modelin e saktësisë me 739 lojëra reale kundër pikëve të publikuara të chess.com (pa lidhje me ta) dhe e testuam në lojëra që nuk i kishte parë kurrë.

    Rezultati Një diferencë tipike rreth 4 pikë saktësie në lojëra të pa përdorura për kalibrim, me korrelacion 0,9. Etiketat e lëvizjeve përputhen saktësisht me ato të chess.com rreth gjysmën e herëve, dhe numrat janë të afërt.

  3. Enigma me saktësisht një përgjigje

    Problemi
    Një enigmë me dy përgjigje të mira, ose një e parë tashmë si pasqyrë, i duket lojtarit e prishur.
    Çfarë bëmë
    Gjenerojmë enigma brenda ekipit nga vetë-lojë e motorit dhe lojëra të modelit njerëzor. Një kërkim i thellë i motorit provon se çdo lëvizje e zgjidhësit është e vetmja, dhe dublikatat hiqen, përfshirë pasqyrat e ngjyrës dhe të tabelës.

    Rezultati Rreth 15.200 enigma me vlerësim, përfshirë rreth 4.900 të reja nga xhirimi i fundit.

  4. Pa internet në iPhone, me reklamat që funksionojnë

    Problemi
    Web view i Apple lejon service worker offline vetëm me domene të lidhura me aplikacionin, dhe këto domene prishin AdMob.
    Çfarë bëmë
    Ndërtimi i ardhshëm iOS mbart kopjen e vet offline të aplikacionit në ueb, me ruajtje native të përbashkët që sinkronizohet kur kthehet lidhja.

    Rezultati Lojë e plotë pa internet në iOS me +0,06 MB madhësi aplikacioni, në ndërtimin e ardhshëm për dyqan.

  5. I shpejtë në rrjete të ngadalta

    Problemi
    Shumë nga lojtarët tanë janë me të dhëna celulare, dhe faqja e analizës kërcente gjatë ngarkimit.
    Çfarë bëmë
    Një ndërtim statik, gjuhë të ngarkuara sipas nevojës, hapësirë e rezervuar për çdo tabelë e panel dhe cache me service worker.

    Rezultati First contentful paint 2,8 s → 1,0 s në 4G të ngadaltë. Layout shift në faqen e analizës 0,81 → 0.

  6. Pikë që askush nuk mund t’i falsifikojë

    Problemi
    Klasifikimet ftojnë mashtrim kur telefoni vendos çfarë llogaritet përgjigje e saktë dhe sa zgjati.
    Çfarë bëmë
    Përgjigjet e Puzzle Rush kontrollohen në server dhe maten me sahatin e serverit. Nëse brenda 5 sekondave nuk gjendet njeri, një bot shtëpiak bashkohet në Rush Battle, duke zgjidhur me shpejtësi dhe saktësi të modeluar sipas vlerësimit të tij.

    Rezultati Klasifikime të drejta, dhe botë që kushtojnë pothuajse aspak CPU: botët e Rush e simulojnë zgjidhjen në vend që të ekzekutojnë motorin, dhe një lëvizje boti në lojë zgjat disa milisekonda.

  7. Motor me rrjet nervor pa fermë GPU-sh

    Problemi
    Një motor më i fortë duhej të funksiononte në shfletues dhe në një server të vogël, dhe stërvitja kishte një Mac dhe asnjë grup GPU.
    Çfarë bëmë
    Stërvitëm një rrjet të vogël NNUE me vlerësimet e hapura të lichess (më shumë të dhëna ishte leva më e madhe: 10M, 20M dhe 94M pozicione dhanë +111 e pastaj +99 Elo), e përditësuam lëvizje pas lëvizjeje në vend që ta rillogarisnim, dhe shkruam kod të shpejtë për procesorët e serverit që kontrollohet bit për bit me versionin e thjeshtë. Një ndryshim del vetëm nëse një ndeshje kundër versionit të mëparshëm thotë se fiton.

    Rezultati +349 ± 37 Elo mbi motorin e mëparshëm në 600 lojëra vetë-loje, dhe 164 Elo mbi Stockfish 19 të kufizuar në 3000 e afërsisht në nivel me të kur kufizohet në 3190 (200 lojëra secili, 10+0,1; kufizuesi i Stockfish është shkalla e vet, jo listë vlerësimesh).

  8. Kufij ditorë falas, të zgjatur nga një reklamë që nuk mund të falsifikohet

    Problemi
    Një lojtar mund të shohë një reklamë për një ndihmë, analizë të thellë, thirrje ose lojë me bisedë zanore më shumë, dhe asgjë vetëm në telefon nuk duhet të mund ta japë vetë këtë shpërblim.
    Çfarë bëmë
    Serveri e jep shpërblimin kur merr verifikimin e nënshkruar server-side të Google AdMob për shikimin e reklamës (me një zgjidhje rezervë të kufizuar të konfirmuar nga aplikacioni), dhe vetë verifikon, kufizon e numëron shpërblimet dhe kufijtë ditorë.

    Rezultati Falas çdo ditë: 10 ndihma, 3 analiza të thella, 3 thirrje dhe 3 lojëra me bisedë zanore, dhe një më shumë nga secila për çdo reklamë me shpërblim (vlerat parazgjedhëse; operatori mund t’i ndryshojë).

Testuar si produkt, jo si demo

  • Gjenerimi i lëvizjeve i verifikuar me perft kundër pozicioneve të njohura
  • Një ndryshim i motorit del vetëm nëse një ndeshje kundër versionit të mëparshëm thotë se fiton, dhe fuqia kontrollohet kundër Stockfish në nivele të fiksuara
  • Kod i shpejtë i motorit për procesorët e serverit i kontrolluar bit për bit me versionin e thjeshtë
  • Teste integrimi të serverit, teste motori dhe teste ndërtimi WebAssembly
  • Teste ngarkese që simulojnë mijëra lojëra njëkohësisht
  • Përgjigje të folura të trajnerit për 0,3–2 s për një fjali të re, menjëherë kur është në cache, me 18 zëra

Teknologjia

  • Go
  • SQLite
  • WebSocket
  • SvelteKit
  • TypeScript
  • NNUE
  • WebAssembly
  • WebRTC
  • Capacitor
  • sherpa-onnx
  • nginx
  • Cloudflare
  • systemd

Carrom: një lojë tavoline me fizikë që e shkruam vetë

Shihni punët tona

Dëshironi një lojë ose aplikacion realtime të ndërtuar kështu?

Projektojmë, ndërtojmë dhe drejtojmë lojëra dhe platforma realtime nga fillimi në fund: aplikacione, servera, dyqane dhe operacione.