Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Texas Hol'dem Gewinner-Erkennung (https://www.delphipraxis.net/94340-texas-holdem-gewinner-erkennung.html)

Joe_the_Junkie 20. Jun 2007 09:30


Texas Hol'dem Gewinner-Erkennung
 
Moin Moin liebe Gemeinde,

Eben ein bisschen OT :-D

Ich habe jetzt seit neustem einen Nebenjob als Dealer bei Pokerturnieren.
Dabei solte man so schnell wie möglich beim Showdown die Gewinnerhand erkennen.

Extra dafür wollte ich eine Software schreiben, bei der Zufallsmäßig zwei bis 4 Spieler (virtuell) beim Showdown mitmachen. Dann, nach einer gewissen Zeit wird dann vom Programm angesagt, wer gewonnen hat.

Dies soll als Training zur schnellen Erkennung der Gewinnerhand dienen.


Jetzt aber zu meinem Problem.

Ich hab im Moment keien Plan, wie ich das umsetzen könnte, dass das Programm erkennt, welche Hand denn die Gewinnerhand ist und womit der Betreffende gewonnen hat.
Könnte mir vielleicht jemand von euch helfen?

Vielen Dank

ste_ett 20. Jun 2007 09:42

Re: Texas Hol'dem Gewinner-Erkennung
 
Als erstes würde ich mir eine Routine schreiben die bestimmte Konstellationen von Karten erkennt (Paar, Drilling, Full House, etc.).

Anhand dieser Konstellation gewichtest du die Blätter der einzelnen Spieler.
Bei zwei gleichen Gewichtungen an erster Stelle musst du noch die Symbole auf den Karten mit einbeziehen.

Nikolas 20. Jun 2007 09:50

Re: Texas Hol'dem Gewinner-Erkennung
 
Du könntest einfach eine Liste mit allen möglichen Händen machen (High Card bis Royal Flush) und dann jeweils mit der Hand des Spielers vergleichen.
Programmtechnisch am besten als Schleife von oben nach unten. Also
Delphi-Quellcode:
if HandIsRoyalFlush(SpielerHand) then
 begin
 showmessage('Wow, Cheater!');
 break;
 end;

if HandIsstraightFlush(Spielerhand) then
 begin
 showmessage('SF');
 break;
 end;
Das Break sorgt dafür, dass bei einem Vierling nicht auch noch 2 Paare erkannt werden.

Dann musst du noch die einzelnen Funktionen schreiben. Da kannst du recht BruteForce vorgehen, da du immer nur wenige Hände betrachten musst. Also jede Möglichkeit 5 Karten zusammenzunehmen ausprobieren.
Wenn du dann fünf Karten hast, solltest du die aufsteigend sortieren. Dann die einzelnen Funktionen könntest du z.b. so machen:

Delphi-Quellcode:
IsFlush: for i=2 to 5 do
if notkarteNrI.Farbe=KarteNr1.Farbe break;
Is straigt: schleife, if not karteNr(i+1).Wert=KarteNr(i).Wert+1 break;
Aus denen kannst du dann den RoyalFlush zusammenbauen:
Delphi-Quellcode:
if IsFlush and IsStraigt and karteNr5.Wert=13(Ass) then true;
drilling kannst du überprüfen, in dem du alle zusammenhängenden dreiergruppen prüfst, usw

Zitat:

Bei zwei gleichen Gewichtungen an erster Stelle musst du noch die Symbole auf den Karten mit einbeziehen.
Nein. Die Symbole sind alle gleichwertig. Bei gleichen Händen wird der Pot mittig geteilt. Passiert meistens z.B. in so Fällen, wenn offen eine straight oder sowas liegt.

BenjaminH 20. Jun 2007 15:16

Re: Texas Hol'dem Gewinner-Erkennung
 
Zitat:

Zitat von Nikolas
Delphi-Quellcode:
if HandIsRoyalFlush(SpielerHand) then
 begin
 showmessage('Wow, Cheater!');
 break;
 end;

if HandIsstraightFlush(Spielerhand) then
 begin
 showmessage('SF');
 break;
 end;
Das Break sorgt dafür, dass bei einem Vierling nicht auch noch 2 Paare erkannt werden.

Naja, ich glaube mit else bekommst du das schöner hin :zwinker:

Nikolas 20. Jun 2007 17:44

Re: Texas Hol'dem Gewinner-Erkennung
 
War ja nur ein schneller hack zur Demo. Ich persönlich mag solche extremen else-Schachteln nicht, da es doch unübersichtlich wird.

Balu der Bär 20. Jun 2007 17:54

Re: Texas Hol'dem Gewinner-Erkennung
 
Leicht OT: Es gibt bundesweit öfters einige Dealerkurse die von Casinos zu einem annehmlichen Preis veranstaltet werden. Über Google sollte man leicht solche Angebote finden. ;)

Grüße

Joe_the_Junkie 21. Jun 2007 15:44

Re: Texas Hol'dem Gewinner-Erkennung
 
Jo erst einmal danke für eure Tipps.

Sorry, dass ich mich jetzt erst melde, hatte aber viel zu tun.

Leicht OT:

Ich hab an so einem Dealerkurs teilgenommen. Der war für mich aber kostenlos. Hat ein riesen Spaß gemacht.
Fruee mich schon auf Freitag, da hab ich dann mein erstes Turnier bei dem ich deale.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz