Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Poker Spiel -> Kombinationen?


Ebil - Di 23.12.08 00:30
Titel: Poker Spiel -> Kombinationen?
Hi leute,
Hat jemand von euch eine idee wie ich die Poker spiel kombinationen (texas hold'em) am besten erkennen kann?
Ich habs im moment so gemacht das alle karten einen wert aus der basis von 2 zugeteilt wurde zb:
1->'A-P ';
2->'A-H ';
4->'A-Ka ';
8->'A-Kr ';
Wobei P,H,Ka,Kr Piek Herz Karo kreuz sind.
Das ganze geht so weiter für alle 52 karten, was am ende natürlich eine riesen zahl ergiebt.
Durch den bitweisen und operator kann ich nun das blatt herrausfinden => 1+4=6= A-H und A-Ka.
Damit könnte man die Kombinationen rausfinden und realisieren.

Kombinationen die nicht viele möglichkeiten haben gehen ja noch, aber für alle pärchen jeweils wird das ne ganze menge auszurechenen und aufzuschreiben, um dann herrauszufinden das der spieler ein pärchen hat.
Schwer zu erklären, ich suche eigentlich nur eine relativ einfache möglichkeit herrauszufinden was der spieler nun für ein blatt hat und ihn entsprechend gewinnen oder verlieren zu lassen gegen das blatt des computers.
Villeicht kennt jemand auch ein OpenSource spiel bei dem ich mal reinschauen kann.

Gruß
Ebil


Sylvus - Di 23.12.08 02:04

willst du es nicht einfach nach Wertigkeiten aufbauen?
Also als erste prüfst du ob die einen StraighFlush haben, wenn nicht ob sie ein Vierling.... wenn du irgendwo zu dem Entschluss kommst, dass beide das gleiche haben nimmst du halt noch ne Prozedur, die schaut wer die höhere Karte hat. Ist doch simpel oder?

Grüße Sylvus


TmpDir - Di 23.12.08 02:52

Nimm
C=Club S=Spade D=Diamond H=Heart
A,2,3,4,5,6,7,8,9,T,J,Q,K


Ebil - Di 23.12.08 02:52

Naja vllt mach ichs mir auch einfach zu kompliziert, aber ich checks einfach nicht.
Wie teste ich ob der spieler/computer AA, BB, 22, 55 oda so hat? Am besten natürlich noch mit den jeweiligen farben.

Ebil

//Edit:
Hilft mir nicht wirklich TmpDir. Mir gehts imo nicht um die bezeichnung.


TmpDir - Di 23.12.08 03:20

Dann kommst du um Sylvus Vorschlag nicht drumherum.

Die Bezeichnungen von mir sind eigentlich nur dafür, das man immer 2 Byte pro Karte hat.


der organist - Di 23.12.08 14:38

Außerdem würde ich intern den J,Q,K zu 11,12,13 umwandeln, wie will man j,Q,K vergleichen?


TmpDir - Di 23.12.08 15:35

Als Anregung:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
TCardType = (cHeart, cDiamond, cSpade, cClub);

TCard = class(TObject) 
  CardType : TCardType;
  Value    : Integer;

THand = array of TCard;  // Oder ObjektListe an Stelle von Array
TDeck = array[1..52of TCard;

function isRoyalFlush(ATischkarten, AHandKarten: THand; var Ergebnis:THand):Boolean;
begin
  // code here
end;

function isStraight(ATischkarten, AHandKarten:THand; var Ergebnis:THand):Boolean;
begin
  // code here
  // Bei Vergleichen allerdings die doppelte Wertigkeit vom A berücksichtigen (A,2,3,4,5) order (T,J,Q,K,A) 
end;

function AddCardToHand(ACard:TCard; AHand:THand);
...


Tilman - Di 23.12.08 15:46

Als Anschauungs-Objekt, wenn gleich schlecht und umständlich gecodet, kannst du dir mal meinen Hole-Cards rechner anschauen:

http://www.delphi-forum.de/viewtopic.php?t=64533&start=0&postorder=asc&highlight=prodds


Ebil - Di 23.12.08 18:45

Danke euch beiden, damit werd ich wohl erstmal klar kommen ^^.

Ebil