Auswertung von Pokerblättern
-
Hallo Leute!
Bin neu hier und hab gleich ne Frage.
Der ein oder andere von euch dürfte das Pokerspiel Texas Hold'em kennen.
Ich schreibe in C ein Programm, das bei 2 Spielern bestimmt wer gewinnt. Es gibt also 2 eigene Karten, 2 Karten des Gegners und 5 Karten in der Mitte. Die variablen der Karten sind:ek1z: (Eigenkarte 1 Zahl)
ek1f: (Eigenkarte 1 Farbe)
ek2z: (Eigenkarte 2 Zahl)
ek2f: (Eigenkarte 2 Farbe)
gk1z: (Gegenkarte 1 Zahl)
gk1f: (Gegenkarte 1 Farbe)
gk2z: (Gegenkarte 2 Zahl)
gk2f: (Gegenkarte 2 Farbe)
tk1z: (Tischkarte 1 Zahl)
tk1f: (Tischkarte 1 Farbe)
tk2z: (Tischkarte 2 Zahl)
tk2f: (Tischkarte 2 Farbe)
.
.
.
.
tk5z: (Tischkarte 5 Zahl)
tk5f: (Tischkarte 5 Farbe)Die Farben können den Wert 0 bis 3 haben, die Zahlen den Wert 1 bis 13:
1: A
2..10: 2..10
B: 11
12
K: 13Meine Frage: Wie mach ich das am besten? Ich denke der einzige Weg ist von der besten Blatt anfangen zu "fragen" ob jemand dieses Blatt hat. Heißt also ich muss mit dem Royal Flush anfangen. Da ich im programmieren leider noch ein ziemlicher Noob bin, weiß ich nicht wie ich das anstellen soll.
Als erstes müsste gefragt werden; hat jemand mit den Tischkarten zusammen mindestens 5 mal die gleiche Farbe. Gibt es dafür einen geeigneten Befehl? Danach müsste gefragt werden; sind mind 5 von den 7 Karten in einer Reihe (Straße) Gibts dafür nen geeigneten Befehl? Vielen Dank!
-
Hallo
Nun mal langsam: Du willst das Programm in c schreiben, dann ist das hier das falsche Forum, weil es hier um c# geht. In c gibt es keine Befehle, sondern Funktionen und im Standard c gibt es natürlich keine Funktionen, um zu schauen, ob Pokerkarten die gleiche Farbe haben. Eventuell findest du dazu eine Bibliothek oder du musst es eben selber schreiben. Zu schauen, ob Karten dieselbe Farbe haben, sollte kein Problem sein. Einfach mit einer if-Anweisung. Dazu solltest du dir mal ein paar Tutorials reinziehen.
chrische
-
Hier gints es verschiedene Möglichkeiten.
Ich schlage vor, sich zuerst fertige Lösungen anzuschauen.
Zum Beispiel hier: http://www.codeproject.com/csharp/gamethings.asp - das ist ein Beispiel, wie man Karten programmiert.Wenn du doch nicht in C# programmierst, sondern in C, dann kannst du dort mindestens Ideen schöpfen.
-
Beispiel auf Java - auch für Ideen, wie man es nach OOP-Prinzipien organisiert.
-
Hallo und danke für die schnellen Antworten!
Ich dachte C# wäre C deshalb hab ichs hier gepostet. Bitte Admin um Verschiebung des Threads!
Mein Programm: Das Programm ist soweit fertig, das die Karten gezogen wurden. Jetzt muss nurnoch ausgewertet werden welches Blatt das bessere ist. Leider hab ich keine Idee wie ich das sinnvoll anstellen kann.
Um zu gucken ob jemand einen Flush hat, weiß jeman dwie man eine Funktion schreiben kann, die die Farben zählt?
Z.B. Funktion
int countekf0(int anzahl) Diese Funkiton würde z.B. die Farbe 0 von allen Eigen- und tischkarten zählen. Leider weiß ich nicht wie die Funtion dazu aussehen würde.Diese Funktion könnte man dann auch auf die Päärchen übertragen:
int countekz1(int anzahl)Gruß Daniel
-
Du hast Doch Links für Anregungen gepostet bekommen. Sind diese in der Qualität so schlecht oder noch keine Lust gehabt da mal rein zu schauen ?
-
Hallo!
Ich kann mit den bedien Links leider ncht viel anfangen.
Der erste Link zeigt glaub ich wie man Zufallskarten austeilt.
Der 2. Link hört sich so an als ginge es um Java und nicht um C. Der Quelltext sieht zwar nach C aus, gibt es da auch 3 Karten und Joker, was beim Texas Hold'em ncht der Fall ist.
Meine aktuelle Umsetzungsidee lautet:
Ich werde 10 Funktionen schreiben die checken, ob das beste Blatt dabei ist. Heißt es geht los mit dem Royal Flush. Sollte jemand den Royal Flush haben, bekommt die Funktion einen Rückgabewert (0=verloren, 1=Draw, 2=Gewonnen). Sollte eine Funktion einen dieser Rückgabewerte liefern, werden die anderen Funktionen (Vierling, Full House,...) abgebrochen (bevor sie gestartet wurden).Ich werd mich erstmal langsam einarbeiten, und fange ganz unten an. Heißt mit der High Card. Mit anderen Worten: Ich muss jeweils die 5 besten Eigenkarten und die 5 besten Gegenkarten sortieren (As bekommt vorher den Wert 14 statt 1). Danach müssen jeweils die 5 Karten von oben nach unten verglichen werden und geguckt werden ob irgendwann eine Karte höher ist als die andere. Falls das der Fall ist hat jemand gewonnen. Falls nicht: Draw.
Das erste was ich also benötige ist eine Funktion die mir jede 1 in eine 14 umwandelt (Asse). Diese hab ich soweit fertig:
In der Mainfunktion:
assup(&ek1z,&ek2z,&gk1z,&gk2z,&tk1z,&tk2z,&tk3z,&tk4z,&tk5z);
int assup(int *po1, int *po2, int *po3, int *po4, int *po5, int *po6, int *po7, int *po8, int *po9) { if (*po1==1) *po1=14; if (*po2==1) *po2=14; if (*po3==1) *po3=14; if (*po4==1) *po4=14; if (*po5==1) *po5=14; if (*po6==1) *po6=14; if (*po7==1) *po7=14; if (*po8==1) *po8=14; if (*po9==1) *po9=14; return 0; }
Jetzt werde ich die Zahlen jeweils sortieren und vergleichen. Wenn ich wieder Probleme habe, werde ich mich melden. Bis dahin nochmal an alle Antwortler: "Vielen Dank für eure Hilfe!!!"
-
Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Noch ein Tipp zum Programmieren (bevor du weiteren Copy & Paste-Code produzierst): schau dir mal arrays und enum(erations) an.
Damit kannst du dann auch einfacher deine Vergleichsfunktionen schreiben.
Und such dir ein gutes C-Tutorial aus, damit du vllt. erst einmal mit einer kleineren Aufgabe anfängst.
-
Hallo Th!
Danke für deine Antwort! Das hab ich natürlich auch probiert, leider stürzt das Programm ab sobald ich es öffne.
#include <stdio.h> main() { int a=1,b=1,c=1,d=1,e=1,f=1,g=1,h=1,i=1; assup(&a,&b,&c,&d,&e,&f,&g,&h,&i); } int assup(int *po[9]) { int i; for(i=0;i<=8;i++) if (*po[i]==1) *po[i]=14; return 0; }
Kann mir jemand helfen wie das geht?
-
int main (int argc, char ** argv) { int array[9], i; for(i = 0; i < 9; ++i) array[i] = 1; assup(array); } int assup(int * po) { int i; for(i=0;i<=8;i++) if (*po[i]==1) *po[i]=14; return 0; }
-
Hallo!
Bei mir gehts leider nicht.
2 errors
Zeigeroperations ungültig beiif (*po[i]==1)
und
*po[i]=14;
-
funktion(int *po) { int i; int wert[9]; for(i=0;i<9;i++) { wert[i]=*po; po++; } return 0; }
... so funktionierts.
-
so...
int assup(int *pw) { int i; for(i=0;i<9;i++) if (*pw==1) { *pw=14; pw++; } }
-
http://www.galileo-press.de/openbook/c_von_a_bis_z/ lies dir das mal am besten durch
-
Hallo!
ich werd mir das Buch die Tage mal ausleihen. Danke für dienen Tip!!!