21/6/10 - fixato bug trovato da Mhack.
___
Stasera sono andato a giocare a poker Texas Hold Hem con miei amici e la mia mente geniale (mica tanto) ha pensato bene di fare un programma per calcolare le probabilità di uscita di una carta o di un'altra per vincere di più. Per il momento è senza GUI, provvederò a farla, ma l'algoritmo di base è questo:
;;; VARIABILI DELLE CARTE ;;;
Dim $assi[4] = [1,1,1,1] ;cuori, picche, fiori, quadri
Dim $numeri[10] = [1,1,1,1,1,1,1,1,1,1] ;cuori, picche, fiori, quadri
Dim $q[4] = [1,1,1,1] ;cuori, picche, fiori, quadri
Dim $j[4] = [1,1,1,1] ;cuori, picche, fiori, quadri
Dim $k[4] = [1,1,1,1] ;cuori, picche, fiori, quadri
;;; VARIABILI DEL GIOCATORE ;;; (CAMBIARE A SECONDA DELLE CARTE IN MANO e A SECONDA DELLE CARTE FUORI)
;esempio: tolgo due assi, tre numeri, e 2 j
$assi[0] = 0
$assi[1] = 0
;... tre numeri
$numeri[0] = 0
$numeri[1] = 0
$numeri[2] = 0
;... 2 j
$j[0] = 0
$j[1] = 0
;;; DICHIARO x (che servirà a calcolarmi le carte tolte) E y (che servirà a calcolarmi tutte le carte tolte) E cartetot (le carte totali nel mazzo)
Global $x
Global $cartetot = 52
Global $y
;;; DICHIARAZIONE $arr_prob (array contenente tutte le probabilità) 0 = asso | 1 = numero | 2 = q | 3 = j | 4 = k ;;;
Dim $arr_prob[5]
Dim $arr_nomi[5] = ['Asso','Numero','Q','J','K']
;;; CALCOLO DI Y ;;;
For $i = 0 To 3
If $assi[$i] = 0 Then $y = $y + 1
Next
For $i = 0 To 9
If $numeri[$i] = 0 Then $y = $y + 1
Next
For $i = 0 To 3
If $q[$i] = 0 Then $y = $y + 1
Next
For $i = 0 To 3
If $j[$i] = 0 Then $y = $y + 1
Next
For $i = 0 To 3
If $k[$i] = 0 Then $y = $y + 1
Next
;;; CALCOLO DELLA PROBABILITA' ;;;
For $i = 0 To 3
If $assi[$i] = 0 Then
$x = $x + 1
$arr_prob[0] = 4-$x&'/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((4-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((4-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
$x = 0
For $i = 0 To 9
If $numeri[$i] = 0 Then
$x = $x + 1
$arr_prob[1] = 9-$x&'/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((9-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((9-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
$x = 0
For $i = 0 To 3
If $q[$i] = 0 Then
$x = $x + 1
$arr_prob[2] = 4-$x&'/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((4-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((4-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
$x = 0
For $i = 0 To 3
If $j[$i] = 0 Then
$x = $x + 1
$arr_prob[3] = 4-$x&'/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((4-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((4-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
$x = 0
For $i = 0 To 3
If $k[$i] = 0 Then
$x = $x + 1
$arr_prob[4] = 4-$x&'/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((4-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((4-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
$x = 0
For $i = 0 To 4
If $arr_prob[$i] = '' Then
$arr_prob[$i] = '4/'&($cartetot-2)-$y&@TAB&'('&StringTrimRight(Execute((4-$x)/($cartetot-(2+$y)))*100,StringLen(Execute((4-$x)/($cartetot-(2+$y)))*100)-4)&'%)'
EndIf
Next
;;; OUTPUT DI OGNI PROBABILITA' ;;;
Local $a
For $i = 0 To 4
ConsoleWrite($arr_nomi[$i]&':'&@TAB&$arr_prob[$i]&@crlf)
$a &= $arr_nomi[$i]&':'&@TAB&$arr_prob[$i]&@crlf
Next
MsgBox(0,'Risultati:',$a)
L'ho quasi interamente commentato quindi credo sia facile da capire, ma se ci sono incertezze chiedete!
Per mettere le carte che sono uscite dal mazzo e che avete in mano dovete fare:
$nomecarta[numero] = 0
ad esempio, avete in mano un J e un 2. Scriverete:
$j[0] = 0
$numeri[0] = 0
e poi, dalla mano prima, sono usciti un k, un asso, un 3, un q e un j. Scriverete dunque la mano attuale (j e 2) + quelli usciti dalla mano precedente:
$j[0] = 0
$numeri[0] = 0
$k[0] = 0
$asso[0] = 0
$numeri[1] = 0
$q[0] = 0
$j[0] = 0
Se questo non vi è chiaro chiedete che cercerò di spiegarmi meglio.
Esempio di output: (avevo tolto due assi, tre numeri, e 2 j)
Asso: 2/43 (4.65%)
Numero: 6/43 (13.9%)
Q: 4/43 (9.30%)
J: 2/43 (4.65%)
K: 4/43 (9.30%)
Commentate
Edited by I.Ren - 21/6/2010, 13:25