Autor Beitrag
rcracer
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 09.09.08 16:01 
Hi Leute,

ich möchte mir einen kleines Tool schreiben, dass mir die Equity ausrechnet beim Pokern,

keine Angst ich werde alles erklären ;)

die Equity ist eine Zahl, die angibt zum welchem Anteil man mit der Hand oder Handrange/Handbereich den Geldpot gewinnt.


Mein erster Versuch war nun so, dass ich annehme das alle 5 Karten die sonst bei Holdem in der Mitte liegen schon da liegen.

So kann man einem Wert für jede im Spiel/Test befindliche Hand bestimmen, dieser Wert gibt an wie gut die Hand ist....(nicht weiter wichtig)

Bei einer Handrange gehören nun einige Hände dazu. Z.B bei AA(steht für Ass und Ass) und AKs(Ass und König in der selben Farbe) da gehören schon allein :

A(herz)A(karo),A(herz)A(kreuz),A(herz)A(piek),A(kreuz)A(karo),A(kreuz)A(piek),A(piek)A(karo) dazu+ die ganze AKs

Die umwandlung von AA in die einzelnen Karten hab ich auch schon.

Jetzt gibt es bis zu 10 Spieler am Tisch

d.h jeder Spieler spielt ein paar mögliche Hände, die auch wie oben aufgesplittet werden.Zu jeder dieser Hand wird ein Wert bestimmt.(Je kleiner desto besser ist die Hand)

Ich hab dann also 10 Arrays(*2 (eins für Karten eins für Werte) in diesem Format:

Spieler1_werte[]:=(10,12,400,30,30,80.....);
Spieler1_karten[]:=('AhAk','AhAc',.....)

Spieler2_werte[]:=(20,28,412,32,39,89.....);
Spieler2_karten[]:=('KhKk','KhKc',.....)

Jetzt sollen alle Kombinationsmöglichkeiten der einzelnen Spieler und deren Kartenmöglichkeiten Durchgegangen werden und in der aktuellen Kombo sollen Gewinne, Niederlagen und Unentschieden gezählz werden.

Meine Lösung war bis jetzt so, dass ich 10 ineinander verschachtelte Schleifen laufen lassen hab. Eine fpr jeden Spieler. Und dabei darauf geachtet dass keine Karten doppelt benutzt werden. Dann in der letzten SChleife überprüfe ich auf die Niedrigste Zahl und gebe dem Spieler den Sieg oder bei Gleichstand mehereren ein Unentschieden.


Mein Problem dabei is, das diese Schleifen viel zu lange brauchen. Hat jemand einen besseren Vorschlag?

Vielen Dank rcracer


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 09.09.2008 um 18:13
rcracer Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 11.01.09 18:12 
Titel: Push mit Anregung
Kann doch fast net sein, dass keiner hier was weiss

es sind doch matrizen mit ausnahmen dass manche "lines" nicht verglichen werden können.

es muss doch einen schnellen weg geben wie ich:

Spieler1_werte[]:=(10,12,400,30,30,80.....);
Spieler1_karten[]:=('AhAk','AhAc','AhKh')

Spieler2_werte[]:=(20,28,412,32,39,89.....);
Spieler2_karten[]:=('KhKk','KhKc',.....)

bei den Werten alle vergleichen kann und heraus bekomme, wer wie oft die höhere Zahl in dem Array stehen hat.

Nur darf es nicht sein das die Werte von 'AhKh' mit 'KhKk','KhKc' verglichen werden, da der eine Spieler den 'Kh' schon hat.


Jemand eine Idee?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 12.01.09 12:40 
Anstatt jedes Mal mit allen vorigen Speilern auf doppelte Karten zu vergleichen, solltest Du lieber einen "Stapel" mit verfügbaren Karten dir holen, den Du einfach durchgehst. Von diesem nimmst Du bei jeder Verschachtelungstiefe eine Karte (nämlich deine in diesem Schleifendurchlauf belegte Karte) runter. Insgesamt führt das ganze zu Backtracking (was man sowohl iterativ als auch rekursiv implementieren kann).

Ansonsten: Ich spiel kein Poker ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: Mo 12.01.09 13:18 
Im folgendem Thread liegt ein Source bei, den du dir mal anschauen solltest ->
klick. Die geschwindigkeit ist in Ordnung würde ich sagen!

_________________
Debuggers don't remove bugs, they only show them in slow-motion.
rcracer Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 16.01.09 00:17 
im dem Quellcode des PrOdds projekt wird leider nur die Situation einer random Hand des Gegners behandelt.

Wie müsste man das denn machen wenn der Gegner nur AA spielt?

Im Quellcode wird ja immer jedem Spieler eine Karte ausgeteilt und gekuckt ob diese nicht schon weg ist.

Ich müsste ja noch zusätzlich prüfen ob die Karte in der Range liegt...
Wenn ich das aber mache hab ich u.U. ein Problem eine richtige zweite Karte für ihn zu finden, außerdem dauert das doch viel zu lange mit immmer eine zufällige Karte geben...