Poker Porgramm schreiben
-
nungut versuchen wir es mal...
zunächst einmal möchte ich, dass eine eingabe von 10 karten erfolgen soll, 5 karten pro spieler und es sollte erkannt werden was zb ein paar ist bei einem spieler und die wertigkeit muss auch festgelegt werden.
und wie ich meine mit der get und set Methode.
wahrscheinlich muss dieses mit einer weiteren klasse iwie verknüpft werden. weil ich die klasse card noch erstellen muss, in dem die farben einen wert von 0-3. und die restlichen werte der karten gehen von 2=2 bis 10=10, 11=Bube,
12=Dame, 13=Konig und 14=Ass.
-
Richtig... du brauchst also eine Klasse für die Karte...
was muss die karte von sich wissen?Vllt deutlicher:
Welche informationen hat eine Karte
Welche eigenschaften hat eine KarteEDIT: Du hast bereits ein Beispiel einer Klasse. An die kannst du dich halten. Das static lass weg. Das machts am Anfang nicht leichter... Und der erste Buchstabe einer Klasse wird IMMER groß geschrieben...
-
man muss wissen welchen wert diese karte hat und welches zeichen, das heißt zb die zahl 2 darf nicht 2mal in einer hand die gleiche farbe haben.
kann ich dann
int color benutzen? schreibt man das dann so...int color (0,1,2,3);
und mit int value für die zahlen..
int value (2,3,...,14);
so in der art vielleicht?
-
Das problem ist, deine karte interessiert nicht ob es schon eine der gleichen Farbe gibt. Sie weiß nur das sie eine Farbe und eine zahl hat. Das reicht ihr.
Da ihr get und set Methoden nutzen sollt hat sie auch noch die Fähigkeit die beschriebenen werte zu setzen...sieht dann in etwa so aus
class Card() { private int value; private int color; public void setValue(int v){}; public void setColor(int v){}; }
jetzt musst das nurnoch vervollständigen...
-
dann werd ich mal gucken ob ich noch etwas herausfinden kann,
ich hab jetzt gedacht, da ich das auch im unterricht gehört habe, das ich vielleicht damit das programm alle 10karten abfragt unter anderem return einsetzen muss um wieder nach oben zu kommen.und so nach und nach die werte der karten eingegeben werden können. korrigiere mich falls diese überlegung falsch ist. so genau weiß ich das grad nicht. muss ich noch nachschlagen, werde dann morgen abend erst wieder weitermachen können. du bist mir eine gute hilfe danke sehr.
-
ich weiß auch nicht, das programm gibt mir bei einer legalen eingabe, immer die ausgabe illegal und beendet das ganze shcon nahc einer zahl.
-
wenn du nichts geändert hast, ist das nicht verwunderlich
guck doch mal was passiert wenn du die methode aufrufst
-
ok das bringt mich alles nicht weiter, ich saß stunden davor und bin kein bisschen weitergekommen, außerdem fällt mir die zeit das ganze neu herauszufinden, schließlich schreibe ich noch 5weitere wichtige klausuren.
das einzige was mir helfen könnte wäre ein lösungsvorschlag.
und das hat nichts mit faulheit zu tun. selbst meine tutoren sagen, das diese aufgaben zu hohe anforderungen für uns anfänger hat.
wäre echt nett wenn du mir entgegenkommen könntest, muss noch nichtmal zu 100% gelöst werden.
-
money money money,
und du hast das simple dingens innerhalb ner stunde rofl
-
Java ist zwar nicht meine sektion,
aber dafür poker (Texas halten sie ihn ohne grenze :D)Sooo schwer ist das ganze ja alles nicht..
Also,
Die Card Klasse haste doch schon.Was Du jetzt noch brauchst ist ne Klasse die n Array von 52 Karten hält.
sowas wie:class set { private: Card cards[52]; //...
Bei der initialisierung dibst du in der reihenfolge die typen und die nummer an
for(int _icolor=0; _icolor <4; _icolor++) for(int _ivalue=2; _ivalue <15; _ivalue++) //13 karten 2..A { this->cards[_icolor*_ivalue].SetValue(_ivalue); this->cards[_icolor*_ivalue].SetColor(_icolor); }
Dann brauchst Du noch ein paar permutationen die das kartenmischen simulieren soll,...
for(unsigned int i=0; i<65535; i++) { srand (time(NULL)); int first_card_index= rand()% 52; srand (time(NULL)); int second_card_index=rand()% 52; if( first_card_index != second_card_index) { Card cTemp = this->cards[first_card_index]; this->cards[first_card_index]=this->cards[second_card_index]; this->cards[second_card_index]=cTemp; } }
Durch die initialisierung hast du schon ja drinne das eine karte legal ist.
aber ansonsten:Welche Kriterien treffen denn auf eine legale karte zu????
A) farbe 0,..,3 //sind genau die 4 farben
wert 2,...,14 //sind genau 13 kartenbool legalCard(Card c) { if( (c.GetValue() >=2) && (c.GetValue() <=14) && (c.GetColor() >=0 ) && (c.GetColor() <=3 ) ) return true; return false;
Mit hands sind ja die pokets gemeint, dann kommt es darauf an welche poker art
gemeint ist. Omaha (hi/lo), classic draw, Texas Holdem, 5/7 cards stud.....Um das zu verallgemeinern schreibe dir doch ne klasse
class poket_cards { private: Card *cards; unsigned int size; public: poket_cards(int wie_viele_auf_der_hand) { this->size=wie_viele_auf_der_hand; cards = new Card[this->size]; }; unsigned int Size(void) { return this->size;} int SetCard(Card c, unsigned int _index_of_card) { \\.... TODO by yourself }; //.....
Die prüfung ob die poket_cards legal sind sollte nun kein thema mehr sein.
Also das ist zwar mehr cpp als j aber ist ja quasi das gleiche.
grüüüße
-
danke erstma für die antwort
naja also jeweils 5 karten für 2 spieler sollen abgefragt werden und verwertet für texas holdem.
und was eig nur wichtig ist, es soll 1paar, 2paare oder high card gewertet werden. und da wir schon die klasse poker vom dozenten vorgegeben haben, sollte eig nur innerhalb //TODO etwas eingesetzt werden.grüße
-
na komm, jetzt ist doch quasi fertig... Er hat dir ja fast alles gemacht...
Den rest schaffst doch sicher allein...
-
Dallessandro schrieb:
danke erstma für die antwort
naja also jeweils 5 karten für 2 spieler sollen abgefragt werden und verwertet für texas holdem.
und was eig nur wichtig ist, es soll 1paar, 2paare oder high card gewertet werden. und da wir schon die klasse poker vom dozenten vorgegeben haben, sollte eig nur innerhalb //TODO etwas eingesetzt werden.grüße
Ähm,... Texas Holdem regeln kennst du??
Also die poket oder (hole cards) sind 2. Das Board sind weitere 5.
Deiß heist also das du aus 7 karten erstmal für jeden spieler die
kartenkombination mit der höchsten wertigkeit filtern musst....grüüüße
-
ja ich kenne die regeln und trotzdem ist die aufgabe das die 2 spieler 5karten auf die hand bekommen und diese dann miteinander verglichen werden sollen. und das ganze ohne flop. in der theorie ist es einfach, aber für mich sind das grad mal die ersten 2monate in der ich jemals mit java arbeiten muss.
-
Ja wenn die Spieler 5 Karten auf die hand bekommen
ist es entweder 5 cards stud oder classic draw und kein texas hold'em,....Trag doch nochmal dein source zusammen und zeige uns was Du denn schon hast.
grüße
-
nagut dann war ich unwissend. ich bin nur ein holdem fan und der dozent hat uns das die ganze zeit eingeredet und anscheinend selbst verwechselt :p
public class Poker { public static Card c11; // Karte 1 Spieler 1 public static Card c21; // Karte 2 Spieler 1 public static Card c31; // ... public static Card c41; public static Card c51; public static Card c12; // Karte 1 Spieler 2 public static Card c22; // ... public static Card c32; public static Card c42; public static Card c52; public static void main(String args[]){ c11 = new Card(); c21 = new Card(); c31 = new Card(); c41 = new Card(); c51 = new Card(); c12 = new Card(); c22 = new Card(); c32 = new Card(); c42 = new Card(); c52 = new Card(); int choice; boolean end = false; boolean legalCard = false; boolean legalHand = false; int temp; while(!end) { choice = Integer.parseInt(JOptionPane.showInputDialog(null, "Wollen sie 10 Karten eingeben geben Sie 1 ein,\n Wollen sie Karten zufaellig generieren geben Sie 2 ein\n wollen Sie das Programm beenden geben sie irgendwas anderes ein")); switch(choice) { case 1: while(!legalHand) { while(!legalCard) { temp =Integer.parseInt(JOptionPane.showInputDialog(null, "Geben Sie den Wert der ersten Karte ein: 2-14")); c11.setValue(temp); temp =Integer.parseInt(JOptionPane.showInputDialog(null, "Geben Sie die Farbe der ersten Karte ein: 0-3")); c11.setColor(temp); if(legalCard(c11)) { legalCard = true; } else { JOptionPane.showMessageDialog(null, "Illegale Eingabe"); } } legalCard = false; // TODO // analog fuer Karten 2-10 //TODO //Korrektheit der Haende bestimmen } //TODO // Gewinner bestimmen und ausgeben (mit calculateWinningHandReduced) //TODO // OPTIONAL: Echte Gewinner bestimmen und ausgeben (calculateWinningHand) break; case 2: //TODO // Haende generieren und Gewinner ausgeben. // OPTIONAL: Echte Gewinner bestimmen und ausgeben (calculateWinningHand) break; default: end = true; break; } } } public static boolean legalCard(Card c) { return false; //TODO } public static boolean legalHands(Card cardOnePlayerOne, Card cardTwoPlayerOne, Card cardThreePlayerOne, Card cardFourPlayerOne, Card cardFivePlayerOne, Card cardOnePlayerTwo, Card cardTwoPlayerTwo, Card cardThreePlayerTwo, Card cardFourPlayerTwo, Card cardFivePlayerTwo) { return false; //TODO } public static int calculateWinningHandReduced(Card cardOnePlayerOne, Card cardTwoPlayerOne, Card cardThreePlayerOne, Card cardFourPlayerOne, Card cardFivePlayerOne, Card cardOnePlayerTwo, Card cardTwoPlayerTwo, Card cardThreePlayerTwo, Card cardFourPlayerTwo, Card cardFivePlayerTwo) { return 3; //TODO } public static int calculateWinningHand(Card cardOnePlayerOne, Card cardTwoPlayerOne, Card cardThreePlayerOne, Card cardFourPlayerOne, Card cardFivePlayerOne, Card cardOnePlayerTwo, Card cardTwoPlayerTwo, Card cardThreePlayerTwo, Card cardFourPlayerTwo, Card cardFivePlayerTwo) { return 3; //TODO Optionale Methode. Wenn nicht programmiert so lassen, sonst natuerlich korrekte Rueckgabewerte geben. } public void generateHands() { //TODO } }
ich habe jez schon meine ganzen mißungenen versuche wieder zurückgesetzt, weil nix
funktionieren wollte
sogar zu 2. kommen wir nicht weiter. unser countdown läuft, nur noch 19std
-
Junge,..
die Konditionen einer legalen Karte kennst Du doch schon,..
setze die doch mal in die function legalCard(Card c) ein und poste die....
-
Und die Card-Klasse ist auch nimmer schwer...