Frozen pile mechanika a vícekrokové vykládání.
Kanasta povolí vzít celý discard pile, pokud z něj umíš vyložit
sloha s pomocí top karty. Když je pile zamrzlý (wild
nahoře), pravidla žádají, aby hráč měl v ruce 2 naturals stejné
hodnoty jako top card. takeDiscardPileWithMelds()
umí přijmout balík a okamžitě z něj poskládat víc sloh najednou
— to je nejkomplikovanější část enginu.
First meld threshold závisí na týmovém skóre.
Bodový práh pro první sehru roste s úspěšností týmu (15 b. pod
nulou, 50 do 1 500, 90 do 3 000, 120 nad 3 000). Engine musí
po každém scoringu přepočítat práh pro další kolo a validovat
první sehru proti aktuální hodnotě.
Privátní state per hráč přes Socket.io.
Server emituje plný state, ale klient nemá vidět ruku soupeřů.
getStateForPlayer(playerId) projde state před každým
broadcastem a redactuje cizí ruky — místo karet posílá jen jejich
počet.
Going-out validation a kola scoring.
Hráč může jít „ven" jen pokud jeho tým má alespoň jednu canastu.
Engine musí ověřit canasty na obou stranách, spočítat body za
sloha mínus penalty za karty v ruce + bonusy za red threes a canasty,
a rozhodnout o konci hry při překročení 10 000.