Poker Porgramm schreiben
-
Hallo Leute,
ich hab wie viele andere auch ein Problem mit Java und komme nach 2 Wochen einfach nicht weiter. Ich muss ein einfaches Poker Programm schreiben, bei dem angezeigt werden soll wer der Gewinner von 2 Spielern ist. Jeder von Ihnen bekommt 5Karten. überall bei TODO sollen Befehle hineingeschrieben werden, so dass das ganze funktionieren kann.
Außerdem braucht man die Klasse Card mit den
beiden Attributen int value und int color und passenden get- und set-Methoden.
Die Farben haben einen Wert von 0-3. Die Werte gehen von 2=2 bis 10=10, 11=Bube,
12=Dame, 13=Koenig und 14=Ass.Wenn hierbei jemand eine Idee hat, wie man das ganze lösen kann, wäre ich sehr dankbar.
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 } }
-
wie wäre es mit einem eigenen Vorschlag?
-
Dallessandro schrieb:
Hallo Leute,
ich hab wie viele andere auch ein Problem mit Java
Nein, du hast ein ganz anderes Problem: Du bist faul.
Was genau hast du in den "2 Wochen" denn schon geleistet? Vom Quelltextangucken wird die Aufgabe wohl trotzdem nicht erfüllt. Nimm dir doch mal konkret ein "TODO" vor und überlege, wie man das am besten macht. Wenn dann tatsächlich Fragen auftauchen, hilft dir jemand auch bestimmt gerne. Denn auf den ersten Blick hat das ganze erstmal sowieso nichts mit Java zu tun, sondern du musst dir erst einmal überlegen, was die ganzen "TODO"s überhaupt bedeuten. Wann gewinnt denn z.B. jemand?
-
Das Ding ist einfach, Programmierung ist nunmal ein Pflichtkurs für mich und ich eigentlich kein großes interesse daran habe und an allen anderen Unis wird dieses Modul gar nicht erst abverlangt. Nun muss ich mich leider damit ein wenig auseinandersetzen. bis lang hat das meiste auch funktioniert, aber hierbei fallen mir leider keine Anweisungen ein, die sinnvoll funktionieren können.
Ich muss zugeben mit dieser Aufgabe bin ich überfordert... mit den restlichen Aufgaben kann ich etwas anfangen. Und das ganze muss bis Freitag abgegeben werden.
Also wenn mir jemand irgendwelche Befehle geben kann, die ich sinnvoll verwenden kann, bin ich sehr dankbar dafür. Gegen grobe Lösungsvorschläge habe ich auch nichts einzuwenden.
Ich habe nunmal leider keine Anhaltspunkte
-
Machen wir nen anderen deal. Du machst lösungsvorschläge, und wir geben dir die nötigen befehle dafür. Du musst dich da schon iwie wenigstens selber rein denken. Was soll überhaupt passieren.
Hast du einmal den Lösungsweg erarbeitet sind die Befehle eh Nebensache...
-
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