Architettura del software del poker

2

Ho alcune classi finora.

  • Mano memorizza informazioni come SB, BB, ante, raccolta di Giocatori
  • HandState eredita dalla classe Hand. ha membri come fase {POSTING BLINDS, PREFLOP, FLOP, TURN, RIVER, SHOWDOWN}, pot. Considero ogni azione in una mano di poker come una mano. Giocatori ante ante (se presenti), small blind e big blind blinds, il primo giocatore ad agire (UTG) chiama il blind, il secondo giocatore (UTG + 1) alza, ecc ...
  • Player membri: nome, posizione, elenco di azioni finora, stack, ecc.
  • Azione membri: tipo {FOLD, CALL, RAISE, RERAISE}, importo

Il programma riceve come input i bui, i giocatori, quale giocatore agire. Poiché l'input che ottengo è string (è un programma di console), devo compilare il root handState.

Dopo che ho il root handState, posso costruire un gameTree dove ogni nodo è un handState. ad esempio:.

stacks = "1000,2000,2300,1400,230";
actions = "200";
playerToAct = 2;
BB = 400;
SB = 200;

function makeRoot()
{
    stacks = makeArray(stacks)
    for(i=0; i < stacks.size; i++)
    {
        player = new Player;
        player.position =  "UTG"
        if (i > 0)
            player.position += i;
        if (i == stacks.size-2)
        {
            player.position = "SB";
            player.bet(SB);
        }
        if (i == stacks.size-1)
        {
            player.position = "BB";
            player.bet(BB);
        }
    }              
}

Il mio problema è che Player e HandState non hanno alcuna connessione. Cosa succede se il giocatore non ha abbastanza chip per pagare BigBlind (230 < 400)? Sai Baba ha abbastanza chips, ma se punta 200, il piatto di HandState non lo saprà? Dovrei tenere traccia di entrambe le classi?

//HandState
player.bet(200);
this.pot += 200;

//Player
bet(amount)
{
    this.stack -= amount;
    this.actions.push(new Action(amount, "BET"));
}

Spero che ci sia un programmatore esperto con alcune conoscenze del poker per raccontare un'opinione, criticare il mio approccio.

    
posta user122347 24.04.2014 - 00:20
fonte

1 risposta

1

La tua struttura di base nel poker è un tavolo. Se hai un torneo hai una collezione di tavoli.

Una tabella ha un numero limitato di posti ordinati in una sequenza attorno al tavolo.

Ogni posto può avere un giocatore, ma un posto può essere vuoto.

Prima di giocare ciascuna mano, il banco viene selezionato al successivo posto non vuoto andando in senso orario.

Un giocatore ha una pila e carte coperte (presumo che le altre varianti del Texas richiedano un approccio diverso (idealmente l'approccio dovrebbe essere iniettato nel giocatore)).

Il tavolo ha anche una collezione di pentole. All'inizio della mano c'è un piatto vuoto, poiché l'offerta continua potrebbe essere aggiunta più pentole.

Ogni piatto contiene un conteggio delle fiches e un elenco di giocatori inclusi in quel piatto.

All'inizio di ogni mano vengono raccolti i bui e gli ante.

Se un giocatore non ha abbastanza chip per pagare l'ante o i bui, viene creato un nuovo piatto (piatto laterale).

Supponiamo che non ci siano ante e blind di 200 e 400 chip.

Il big blind dovrebbe pagare 400, ma ha solo 230 e va all-in.

Il primo piatto (il piatto principale) ora contiene 200 (small blind) e 230 (big blind) e i giocatori SB e BB. Il piatto contiene anche le informazioni che i primi 230 dei giocatori di questo round di scommesse dovrebbero andare in questo piatto.

Viene creato un nuovo piatto con 0 chip e il giocatore SB.

Per rendere semplice questo giocatore, X chiama 400. 230 chip e il giocatore X viene aggiunto al primo piatto. 170 gettoni e il giocatore X viene aggiunto al secondo piatto.

Il resto dei giocatori folda come lo small blind. Quando il piccolo buio si piega, viene rimosso dal primo piatto.

Ora abbiamo il primo piatto con (200 + 230 + 230) 660 chips e i giocatori BB e X e abbiamo il secondo piatto con 170 chip e il giocatore X.

Dato che c'è un solo giocatore nell'ultimo piatto, non ci sono più offerte.

Il flop, il turn e il river si giocano e il vincitore viene trovato.

Dato che X è l'unico giocatore nel secondo piatto, quel piatto va al giocatore X.

La mano migliore di BB e X ottiene il primo piatto o potrebbe anche essere diviso tra i due giocatori.

    
risposta data 12.09.2016 - 21:21
fonte

Leggi altre domande sui tag