Cruce
Jocul clasic de cărți Cruce pe telefon — offline cu 9 adversari AI, online cu prietenii, licitații și mariaje.

Context
Cruce este jocul clasic de cărți cu trucuri, jucat cu 24 de cărți (9, 2, 3, 4, 10 și As în patru culori): trebuie să răspunzi la culoare sau să pui atu dacă nu ai, iar trucul îl ia cel mai mare atu sau cea mai mare carte de culoarea condusă. Mâna se licitează la început, atuul se alege prin draft, iar mariajele anunțate aduc +20 sau +40 — câștigi meciuri până la 6, 11 sau 21 de puncte, singur sau în echipe fixe de câte doi.
Aplicația este construită dintr-un singur cod Expo SDK 57 cu TypeScript, pe telefoane și tablete iOS și Android — plus Android TV din același build, cu navigare D-pad și autentificare prin QR. Joci offline ca oaspete contra a 9 adversari AI, iar online te conectezi cu Google, Facebook, Apple sau un cont local — în lobby-uri publice și private cu PIN, cu boți care completează locurile goale, prieteni, invitații, chat live și clasamente.
Video de prezentare
Varianta în engleză este disponibilă pe YouTube.
Repere tehnice
- Motor de reguli pur —
src/game/sedma.tsfără dependențe native (pachet, amestecare, rezolvare trucuri, punctaj), cureducer.tsca mașină de stăriuseReducerpentru jocul offline - AI Monte-Carlo pe 3 niveluri —
src/game/ai/engine.tsportează botul backendului (SedmaAI): scor per carte din simulări de trucuri + căutare în viitor (rollout sau minimax alfa-beta), cu coeficient de risc, greșeli cognitive și 9 adversari consacrați (Ion, Maria, Vasile → Mihai, Ana, Radu) - Multiplayer online real — autentificare Keycloak OIDC, WebSocket cu reconectare exponențială, stare autoritară pe server, lobby-uri cu PIN, linkuri de partajare
zecar.eu/cruce/<id>și deep linkuricruce-zecar:// - Licitație, draft și mariaje — panou de licitație cu butoane de ofertă, alegerea atuului, mariaje anunțate +20/+40, parteneriate fixe în 4 jucători
- Cum se joacă interactiv — reguli, exemple live pe masă, spațiu de experimentare și quiz înainte de primul meci real
- Android TV din același build — launcher Leanback, inele de focus D-pad, login prin QR cu flow de dispozitiv, fără WebView, bannere oprite implicit pe TV
- 4 limbi din prima zi — engleză, română, maghiară și germană (numele jocului se localizează: Cruce, Hatvanhat, Schnapsen), fețe de poker și bohemian, 12 mese, mărime ajustabilă a cărților
- Monetizare corectă — banner AdMob plus cel mult un interstitial pe oră, doar la ieșirea dintr-un meci terminat și niciodată în timpul jocului; consimțământ UMP în EEA, Premium anual pe iOS prin StoreKit 2
Arhitectură
Offline, jocul rulează integral pe dispozitiv (reducer.ts + AI Monte-Carlo). Online, serverul este autoritar: aplicația mapează cărțile serverului ({rank, suit}) la formatul local și aplică evenimentele primite prin WebSocket.
┌──────────────┐ HTTPS/WS ┌──────────────┐ ┌──────────────┐
│ Expo app │ ◄─────────────► │ Backend │ ─ │ Keycloak │
│ phone/TV │ lobby, joc │ lobby, │ │ auth social │
│ + AdMob/IAP │ live, chat │ clasamente │ └──────────────┘
└──────────────┘ └──────────────┘
Setările se sincronizează între dispozitive pe rânduri separate per joc (Cruce nu împarte rândul cu Sedma — țintele 6/11/21 diferă), cu merge per-cheie și rezolvare de conflicte după timestamp.
Provocări
Cea mai grea problemă a fost AI-ul credibil pe un telefon: simulările Monte-Carlo pe fiecare carte candidată trebuie să rămână fluide pe hardware modest, iar deciziile să semene cu jocul uman — nu cu jocul perfect. Soluția a fost stratificarea: scoruri euristice locale ca prior static, eșantionare a mâinilor adverse ponderată pe forță și „greșeli cognitive“ calibrate per nivel de dificultate.
A doua provocare a fost Android TV în același build cu telefonul: fără ramuri de build, totul se decide la runtime (isTvDevice), cu focus D-pad vizibil, layout cu o singură coloană și autentificare fără browser — testat pe emulator TV dedicat.
Lecții învățate
Secțiunea „Cum se joacă“ a meritat fiecare oră investită: Cruce are reguli transmise oral (licitație, mariaje, obligația culorii), iar un spațiu de experimentare fără miză convertește curiozitatea în meciuri reale. Iar regula „nicio reclamă în timpul jocului“ — aplicată tehnic, cu interstitiale doar la ieșirea din meciuri terminate — este cea mai bună strategie de retenție într-un joc cu sesiuni scurte și dese.

