Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421

    [VB6] Algoritmi per video-poker

    Sto realizzando il classico gioco del video-poker in VB sfruttando la libreria di Windows
    Cards.dll.
    I valori facciali, che vanno da 0 a 50, sono così memorizzati:

    0 Asso Fiori
    1 Asso Quadri
    2 Asso Cuori
    3 Asso Picche
    4 Due Fiori
    5 Due Quadri
    6 Due Cuori
    7 Due Picche
    8 Tre Fiori
    9 Tre Quadri
    10 Tre Cuori
    11 Tre Picche
    12 Quattro Fiori
    13 Quattro Quadri
    14 Quattro Cuori
    15 Quattro Picche
    ...
    e così via fino ad arrivare alla carta 50
    Il mio grosso problema è trovare un algoritmo che possa riconscere la combinazione!

    Ecco quello che mi è venuto in mente:
    * Le carte sul tavolo vanno ordinate tutte in maniera crescente (FATTO!)
    * Se tutte le carte sono divisibili per un dato valore significa che ho effettuato Colore o
    Scala Reale!
    * Se tra le varie carte c'è una differenza di 4, ho effettuato una scala

    Ma per le coppie e i tris come posso fare? Inoltre sono giuste le considerazioni precedenti?
    Chi mi sa aiutare?
    Grazie!

  2. #2
    Per le coppie e i tris dividi per 4 il numero della carta e consideri solo la parte intera, se il risultato della divisione (tenendo conto solo della parte intera) è uguale le carte sono dello stesso valore.

    Es:

    3 Asso Picche
    3 / 4 = 0.75

    2 Asso Cuori
    2 / 4 = 0.5

    ----

    8 Tre fiori
    8 / 4 = 2

    10 Tre cuori
    10 / 4 = 2.5

    e cosi via....

    Ciao!
    lupusinfabula

    Programmatore VB, ASP, Delphi.

  3. #3
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421
    Grazie mille! Il tuo consiglio è stato preziosissimo.
    Sfruttando la tua idea, ho realizzato la funzione che restituisce un codice per ogni combinazione realizzata. Una precisazione.
    intCarte() è l'array contenente le cinque carte sul tavolo e si presuppone che questo sia STATO ORDINATO in ordine crescente precedentemente!
    Accetto qualsiasi consiglio su come possa migliorare questo algoritmo

    codice:
    Public Function ControllaCombinazioni() As Integer
        Dim intCarteUg As Integer   'Numero di carte uguali
        Dim intTot As Integer       'Numero totale di carte uguali
        Dim intGruppi As Integer 'Numero di gruppi
        Dim blnScala As Boolean 'True significa che ho una scala
        Dim intCont As Integer  'Contatore generale
        Dim intRet As Integer   'Valore di ritorno della funzione
        
        intRet = 0  'Nessuna combinazione
        
        'Controllo il colore
        'Affinché si abbia colore i resti delle divisioni per 4 delle varie carte, devono essere gli stessi
        For intCont = 0 To 3
            If (intCarte(intCont) Mod 4 = intCarte(intCont + 1) Mod 4) Then
                intRet = 6
            Else
                intRet = 0
                Exit For
            End If
        Next intCont
        
        'Controllo la scala
        'Affinché si abbia una scala dobbiamo avere che in valore assoluto, la sottrazione degli interi della divisione
        'della divisione per 4, di due carte successive deve essere 1.
        For intCont = 0 To 3
             If (Abs(Int(intCarte(intCont) / 4) - Int(intCarte(intCont + 1) / 4)) = 1) Then
                blnScala = True
            Else
                blnScala = False
                Exit For
            End If
        Next intCont
        
        'Verifica un eventuale scale reale o comune. La scala reale deve avere già un valore di intRet diverso
        'da zero dato dal controllo precedente del Colore
        If (blnScala And intRet > 0) Then
            intRet = 8
        ElseIf (blnScala And intRet = 0) Then
            intRet = 4
        End If
        
        'Se abbiamo già o colore o un tipo di scala, è inutile continuare con le successive verifiche
        If (intRet > 0) Then
            ControllaCombinazioni = intRet
            Exit Function
        End If
        
        'Controllo le restanti combinazioni
        'Controllo la 1ª con la 2ª, la 2ª con la 3ª, la 3ª con la 4ª, la 4ª con la 5ª.
        'Pertanto mi basta arrivare alla penultima carta
        intCarteUg = 1  'carta isolata
        For intCont = 0 To 3
            'Controllo se hanno lo stesso valore (in tal caso hanno medesima parte intera)
            If (Int(intCarte(intCont) / 4) = Int(intCarte(intCont + 1) / 4)) Then
                intCarteUg = intCarteUg + 1
            Else
                'Se le carte uguali sono maggiori di 1 (qundi almeno una coppia), le aggiungo
                'al totale delle carte uguali
                If (intCarteUg > 1) Then
                    intTot = intTot + intCarteUg
                End If
                intCarteUg = 1
                intGruppi = intGruppi + 1 'Numero di gruppi
            End If
        Next intCont
        
        'Nel caso di una coppia alle ultime due carte, abbiamo intCarteUg=2, ma questa variabile non è stata
        'potuta aggiungere ad intTot, perchè il ciclo si ferma a 3, pertanto basta fare la seguente verifica
        If (intCarteUg > 1) Then
            intTot = intTot + intCarteUg
        End If
    
        If (intTot = 2) Then
            intRet = 1  'Coppia
        ElseIf (intTot = 3) Then
            If (intGruppi = 1) Then
                intRet = 5  'Full
            Else
                intRet = 3  'Tris
            End If
        ElseIf (intTot = 4) Then
            If (intGruppi = 1) Then
                intRet = 7  'Poker
            Else
                intRet = 2  'Doppia Coppia
            End If
        Else
                intRet = 0  'Nessuna combinazione
        End If
        
        ControllaCombinazioni = intRet
    End Function

  4. #4

    Re: [VB6] Algoritmi per video-poker

    Originariamente inviato da JAEP
    ...
    e così via fino ad arrivare alla carta 50
    ...
    Le carte, nei mazzi da poker, sono 52. :master:

  5. #5

    Re: Re: [VB6] Algoritmi per video-poker

    Originariamente inviato da FuocoGreco
    Le carte, nei mazzi da poker, sono 52. :master:

    le carte nei mazzi da poker dipendono dal numero di giocatori....
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  6. #6
    Il Poker cosiddetto "all'Italiana" si gioca normalmente in quattro, cinque o sei giocatori con un mazzo di carte francesi. Il numero delle carte varia a seconda del numero dei giocatori: per quattro giocatori si usano 32 carte (dal Sette all'Asso), per cinque giocatori 36 carte (dal Sei all'Asso), per sei giocatori 40 carte (dal Cinque all'Asso). Stiamo parlando del Poker coperto (in inglese Draw Poker) nella sua versione Italiana, che corrisponde a quella diffusa nel resto d'Europa.


    Il Poker coperto si può giocare all'Americana (Draw Poker), con un mazzo di 52 carte e con un numero di giocatori da due a nove. I valori dei semi e delle carte sono quelli del Poker all'italiana. La variazione più importanti riguarda la graduatoria delle combinazioni e consiste nella regola che il Full batte il Colore: si vuole far pesare la diversa probabilità di ottenere le due combinazioni che, con un mazzo di 52 carte, si sposta per forza in favore del Colore. Nel Poker all'Americana, inoltre, se si devono confrontare due o più combinazioni di Colore fra loro, non vale la regola della graduatoria dei semi: vince il Colore che ha la carta più alta fra le cinque che lo compongono. In caso di parità nei valori delle carte più alte, si mettono a confronto le carte successive: vince chi la combinazione di carte più alta. In caso di parità completa, vince chi ha il colore più alto secondo la graduatoria dei semi. Nel Poker all'Americana di solito il rilancio non è immediato: dopo la puntata di un giocatore chi ha la parola può pensare prima di rilanciare, nel tempo concordato per dichiarare la puntata.
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  7. #7

    Re: Re: Re: [VB6] Algoritmi per video-poker

    Originariamente inviato da Markho
    le carte nei mazzi da poker dipendono dal numero di giocatori....
    Lo so, ma di solito se ne tolgono 4 alla volta, quattro 2, quattro 3, ecc...

    50 carte è comunque un numero impossibile per qualsiasi mazzo da poker per qualsiasi numero di giocatori.

  8. #8
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421

    Re: Re: [VB6] Algoritmi per video-poker

    Originariamente inviato da FuocoGreco
    Le carte, nei mazzi da poker, sono 52. :master:
    Infatti ho sbagliato a scrivere: bisogna andare da 0 a 51.
    Nel poker all'italiana non si usano tutte e 52 le carte, diversamente da quanto accade nel poker americano e nei video poker!

  9. #9
    /* EDIT: Per le richieste di collaborazione c'è il forum ANNUNCI (...) */
    Carlo Patti
    www.ilmagodeipc.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.