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

Rispondi quotando