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:
- Formira se 1 pun špil karti: 111122223333…QQQQKKKK
- Bilo je ranije 2 špila po defaultu, a u novijim verzijama je samo 1 špil
- Špil se promeša: 7712Q3K… K92J55417
- Meša se ovako: 2 nasumične karte zamene mesta, i taj proces se ponovi oko 1000 puta
- Igrač koji je prvi ušao u igru proglašava se Deliocem
- Igrač s njegove leve strane seče
- Igrač ništa ne mora da radi, nego samo Random funkcija izabere mesto gde se preseklo
- 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
- 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
- Sledeća karta se izvlači iz špila i stavlja na sto
- Igra počinje
- 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 🙏 👑