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:
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.