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