Ich glaube, Sie sollten die 21 Kombinationen tun und eine Art von 7462 Tabelle verwenden. 1: alle 7 Karten haben 21 verschiedene 5 Karten Kombinationen 2: jede mögliche letzte Poker Hände (2.598.960) stellt eine von 7462 verschiedenen Arten von Händen so, es ist einfach.
Sie müssen nur alle 21 Kombinationen Ihrer Karten betrachten und für jede einzelne die Rangliste der 7462 Rangliste sehen. http://www.sendspace.com/file/pet0dd
Dann, für jede 7 Karten haben Sie 21 verschiedene Platzierungen von dieser 7462 Tabelle, die ich gemacht habe. Die höchste Bewertung von 21 Kombinationen ist diejenige, die Sie wissen möchten.
Um die Tabelle zu verstehen: In jeder Zeile haben Sie die 5-Karten-Hand (Z für suited, Y nicht-suited) und Sie haben das Ranking davon. Das brauchst du nur. Ich gebe Ihnen die Tabelle und einen Beispielalgorithmus. Es ist nicht wirklich der Code.Es ist ein visuelles Basisformat und ich habe es jetzt geschrieben. funktioniert wahrscheinlich nicht, aber du solltest es verstehen. Der Code würde in etwa so aussehen:
'############### 1st: Define your hand, for example "2c2d2h2s3c3h3s" #############################################################################################
Dim mycard As New ArrayList
mycard(1).Add("2c")
mycard(2).Add("2d")
mycard(3).Add("2h")
mycard(4).Add("2s")
mycard(5).Add("3c")
mycard(6).Add("3h")
mycard(7).Add("3s")
mycard.Sort() '################# you need to sort in alphabeticall order to match it later with 7462 table #############################################
' ################## 2nd: Let´s transform it to every kind of 5 cards combinations (21). It will also preserve the alphabeticall order ##################################
Dim myHand5 As String = ""
Dim suited as String = ""
Dim ranking as Integer = 0
Dim myranking as Integer = 7462
Dim mystring as String = ""
For cicle1 = 0 to 2
For cicle2 = cicle1 + 1 to 3
For cicle3 = cicle3 + 1 to 4
For cicle4 = cicle3 + 1 to 5
For cicle5 = cicle4 + 1 to 6
myhand5 = left(mycard(cicle1),1) & left(mycard(cicle2),1) & left(mycard(cicle3),1) & left(mycard(cicle4),1) & left(mycard(cicle5),1)
suited = left(mycard(cicle1),2) & left(mycard(cicle2),2) & left(mycard(cicle3),2) & left(mycard(cicle4),2) & left(mycard(cicle5),2)
if suited = "ccccc" or suited = "ddddd" or suited = "hhhhh" or suited = "sssss" then myhand5 = myhand5 & "Z" Else myhand5 = myhand5 & "Y"
ranking = 0
FileOpen (1, "7462.txt", Input)
Do
ranking = ranking + 1
Input(1, mystring)
Input(1, ranking)
If mystring = myhand5 Then
If ranking < myranking then myrankin = ranking
End If
Loop Until EOF(1)
FileClose(1)
Next cicle5
Next cicle4
Next cicle3
Next cicle2
Next cicle1
Endgültiges Ranking ist Myranking Variable. Du solltest deine Hand in weniger als einer Sekunde kennen. Und es ist auch gut, mit anderen Händen zu vergleichen, weil Sie den Ranking-Wert nicht den Namen haben. Und wenn Sie etwas mit Poker-Algorithmen machen wollen, sollten Sie hier anfangen. Mit Rankingwerten ist alles schnell und einfach.
Hinweis: Ich bin kein Programmierer. Ich bin ein Möchtegern. Ich verstehe einige visuelle Grundfunktionen. Ich wünschte ich könnte echte Programme machen. Wenn der Algorithmus funktioniert, hinterlassen Sie bitte einen Kommentar. Wenn Sie wollen, dass es sehr, sehr schnell ist, weiß ich nicht, wie es geht. Ich wünschte, ich hätte einen ultraschnellen Algorithmus, der es mir erlaubt, in Echtzeit (in Echtzeit) meine Chancen gegen Gegner in jeder Phase des Spiels zu überprüfen. Ich habe viele Algorithmen ausprobiert, um meine Chancen am Flop in Echtzeit zu berechnen, aber das schnellste ist 30 Sekunden. Jetzt kann ich meine Chancen am Flop in 3 Sekunden berechnen, aber ich benutze eine 150-Gigabyte-Datenbank mit vielen vorberechneten Dingen. Wenn Sie Ihre Chancen in Echtzeit wissen möchten, sollten Sie viele Dinge vorausberechnet haben. So habe ich es gemacht.
Gute Frage, aber ich glaube, du bist besser dran, nur die 21 Kombinationen Überprüfung anstatt zu versuchen, ein paar verrückte Spielerei, um herauszufinden, abzukürzen. –
@David Eigentlich könnte nichts weiter von der Wahrheit entfernt sein. Die Leute haben sich viel Mühe gegeben, schnelle 7-Karten-Evaluatoren zu schreiben. Wenn Sie Millionen von Händen pro Sekunde machen wollen, wird Geschwindigkeit wichtig. –
@David: Es gibt viel bessere Möglichkeiten, die einfacher zu lesen sind und KEINE Sortierung erfordern. Sie sind auch mehrere Größenordnungen schneller dafür. Ein Beispiel ist - ähem - hier zu finden: http://code.google.com/p/specialkpokereval/. – SK9