Kako se dele karte u Mau King – Mau Mau

Pošto su se mnogi pitali šta odlučuje njihovu sreću kad se dele karte u Mau King – Mau Mau Balkan, odlučili smo da pitamo programere da nam objasne tačan algoritam. I eto, to smo spremili za vas 😊 Uživajte!

U ne-tehničkim crtama

Ukratko, deljenje u svakoj partiji prati isti proces kakav se dešava u igri uživo:

  1. Formira se 1 pun špil karti: 111122223333…QQQQKKKK
    • Bilo je ranije 2 špila po defaultu, a u novijim verzijama je samo 1 špil
  2. Špil se promeša: 7712Q3K… K92J55417
    • Meša se ovako: 2 nasumične karte zamene mesta, i taj proces se ponovi oko 1000 puta
  3. Igrač koji je prvi ušao u igru proglašava se Deliocem
  4. Igrač s njegove leve strane seče
    • Igrač ništa ne mora da radi, nego samo Random funkcija izabere mesto gde se preseklo
  5. Na mestu sečenja specijalne karte (max 3) se dodeljuju onom ko je sekao
    • Na ovaj način, kao u pravoj igri, onaj ko je sekao možda dobije par specijalnih karti s mesta sečenja
    • Ako bude više od 3 karte nađeno na mestu sečenja, sve se ponavlja od tačke (1) iznad
  6. Preostale karte se podele redom iz špila (pošto je već promešan) jedna po jedna svim igračima dok svi ne dobiju po 6 karti
  7. Sledeća karta se izvlači iz špila i stavlja na sto
  8. Igra počinje
  9. Kad sve karte pređu iz špila u ruke ili na sto, karte sa stole se “recikliraju” nazad u špil gde se ponavlja mešanje opisano iznad i zatim odatle može dalje da se vuče

Tehnički detalji

Pokazaćemo vam delove koda koji izvršavaju gore-opisane akcije:

Mešanje špila

Evo dela koda koji meša špil:

for (let i = 0; i < 1000; i++) {
  let replaceIndex1 = getRandomNumber(
    0, cards.length - 1);
  let replaceIndex2 = getRandomNumber(
    0, cards.length - 1);
  swap(cards, replaceIndex1, replaceIndex2);
}

Vrlo jednostavno, reći će vam svaki programer. Izabere 2 nasumične karte i zameni im mesta. Onda to uradi 1000 puta.

Sečenje i nagradne specijalne karte

Evo koda koji igrači koji seče dodeljuje nagradne karte s mesta sečenja:

const gifts = []
const maxSpecialCards = 3
let specialCardsTakenSoFar = 0;
while (specialCardsTakenSoFar < maxSpecialCards) {
  const card = pickDeck.popCovered();
  if (card.isSpecial()) {
    gifts.push(card);
    specialCardsTakenSoFar++;
  } else {
    pickDeck.pushCovered(card);
    break;
  }
}

Dakle, šta se vidi:

  • Dozvoljene max 3 nagradne karte (maxSpecialCards = 3)
  • Dodeljuju se samo specijalne karte (if card.isSpecial)
  • Čim neka nije specijalna, vraća se u špil i kraj (break)

Uzimanje karti iz špila (vučenje)

Vučenje koristi istu funkciju koja se koristi i za deljenje:

const getCardsFromPickDeck = (numberOfCards) => {
  const result = [];
  for (let i = 0; i < numberOfCards; i++) {
    let card = table.pickDeck.popCovered();
    if (card === null) {
      recyclePickDeck(table)
      card = table.pickDeck.popCovered();
    }

    result.push(card)
  }
}

Dakle vidi se i ovde: jednostavno prati logiku stvari kao i kad igramo kod kuće:

  • Hoćeš 2 karte? (npr. zbog sedmice)
  • 2 puta uradi ovo:
    • Uzmi kartu sa “pickDeck”-a (sa špila za vučenje)
    • Ako nema više, recikliraj špil (sa stola)
    • Stavi kartu na rezultat
  • Vrati rezultat

Za svakog koga zanima više detalja, može slobodno da nas pita 😊 Sve radimo transparentno, ali ipak uvek je potrebna i jedna doza poverenja – nadamo se da smo ga dosad svojim akcijama stekli 🙏 👑