Ich habe ab dem 21.06. Begonnen, etwas über Java zu lernen. Ich habe die Grundlagen von Java mit progate am 21.06. Gelernt, also werde ich es ausgeben. Es war okay, irgendetwas zu machen, aber ich würde gerne den Gehirnsport "Texas Holdem" machen, den ich liebe.
Um die Produktionsquellen für die Beschäftigung zu erhöhen, habe ich beschlossen, den Lernverlauf hier im Tagebuch zu notieren.
Tag 1: Erfahren Sie mehr über Java mit progate (weggelassen) Tag 2 und 3: Vorerst umgesetzt (fertig!) Tag 4: Ordnen Sie den Code entsprechend der Objektorientierung an (möglicherweise unmöglich).
Gestern ** Karten austeilen und Preflop-Action entscheiden ** Ich konnte es schaffen
Wohin soll ich gehen? ** Flop, Turn, River Bewegung Handkraft, Rollenbestimmung Verarbeitung wie All-In, Fold ** ist
Aus der Entscheidung über die Rolle der Hand, die mich am meisten störte. Der Einfachheit halber habe ich diesmal Flash und Straight nicht implementiert. Auch die schwächste Karte ist A statt 2, aber bitte vergib mir. Ich dachte wie folgt.
Ich habe es geschafft, indem ich das Array mit Flags gefüllt habe, weiter von gestern.
public static int[] handRank(int array[]) {
int count[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
for(int i : array) {
count[i-1] = count[i-1] + 1;
}
int hand[] = new int[6];
int newCount[] = count.clone();
int pairNumber1;
int pairNumber2;
Arrays.sort(newCount);
if(newCount[12] == 1) {
//System.out.println("hicard");
Arrays.sort(array);
System.arraycopy(array, 2, hand, 0, 5);
return hand;
}else if(newCount[12] == 2 && newCount[11] == 1) {
//System.out.println("pair");
pairNumber1 = handNumber(count, 2).get(0);
pairHand(array, pairNumber1, hand);
return hand;
}else if(newCount[12] == 2 && newCount[11] == 2) {
//System.out.println("two-pair");
pairNumber1 = handNumber(count, 2).get(0);
pairNumber2 = handNumber(count, 2).get(1);
twoPairHand(array, pairNumber1,pairNumber2, hand);
return hand;
}else if(newCount[12] == 3 && newCount[11] == 1) {
//System.out.println("three-card");
pairNumber1 = handNumber(count, 3).get(0);
threePairHand(array, pairNumber1, hand);
return hand;
}else if(newCount[12] == 3 && newCount[11] == 2 || newCount[11] == 3) {
//System.out.println("full-house");
pairNumber1 = handNumber(count, 3).get(0);
pairNumber2 = handNumber(count, 2).get(0);
fullHouseHand(pairNumber1, pairNumber2, hand);
return hand;
}else if(newCount[12] == 4) {
//System.out.println("four-card");
pairNumber1 = handNumber(count, 4).get(0);
fourCard(array, pairNumber1, hand);
return hand;
}
return hand;
}
Bei der Methode in jedem Zweig werden 5 Karten aus den 7 Karten ausgewählt, so dass sie in der stärksten Hand sind und in der Hand gespeichert sind. Ich habe zuerst die Zahlen mit Rollen wie Paaren eingegeben und dann den Rest in absteigender Reihenfolge der Zahlen gepackt.
public static void twoPairHand(int array[], int pairNumber1, int pairNumber2, int hand[]) {
Arrays.sort(array);
int handNum = 0;
int i = 6;
while(handNum < 1) {
if(array[i] != pairNumber1 && array[i] != pairNumber2) {
hand[handNum] = array[i];
i --;
handNum ++;
}else {
i --;
}
}
Fold-Flag und All-In-Flag wurden zu int list [] hinzugefügt, wobei jede Straße übersprungen wird, wenn diese gesetzt sind, und plötzlich angezeigt wird.
int list[] = {1000,1000,0,0,0,0};
//[0] herochip(mich selber)/
//[1] enemychip(Gegner)/
//[2] pot/
//[3] needChiptoCall
//[4]foldFlag
//===foldFlag===
//0 nicht gefaltet
//1 Held ist gefaltet
//2 Feind ist gefaltet
//[5]alInFlag
//===allInFlag===
//0 nicht alles in
//1 Held ist alles in
//2 Feind ist Allin
Die Straßenmethode enthält den Prozess der Ausführung Ihrer eigenen Aktion und der Aktion der anderen Partei auf der Straße.
//Preflop-Verarbeitung
street(hero, list, scan);
//Drehen Sie, Flussverarbeitung
//3 Flops hinzufügen
if(list[4] == 0 && list[5] == 0) {
System.out.println("Der Flop ist" + toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) + "ist");
street(hero, list, scan);
}
//Wende
if(list[4] == 0 && list[5] == 0) {
System.out.println("Die Turn-Karte ist" + toDescription(holeCard.get(3)) + "ist. Die Hole Card"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + "ist");
street(hero, list, scan);
}
//Fluss
if(list[4] == 0 && list[5] == 0) {
System.out.println("Flusskarte" + toDescription(holeCard.get(4)) + "ist. Die Hole Card"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "ist");
street(hero, list, scan);
}
//Showdown. Gewinn / Verlust-Entscheidung
if(list[4] == 1) {//Wenn der Held aussteigt
System.out.println("Feind ist"+list[2]+"$Gewann den Chip von" );
list[1] = list[1] + list[2];
list[2] = 0;
list[3] = 0;
list[4] = 0;
}else if(list[4] == 2) {
System.out.println("Held ist"+list[2]+"$Gewann den Chip von" );
list[0] = list[0] + list[2];
list[2] = 0;
list[3] = 0;
list[4] = 0;
}else {
int herorole[] = showdown(hero, holeCard);
int enemyrole[] = showdown(enemy, holeCard);
System.out.println("Es ist ein Showdown. Die Hole Card"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "ist");
System.out.println("hero : " + toDescription(hero.get(0)) + toDescription(hero.get(1)) + role(herorole[5]));
System.out.println("enemy : " + toDescription(enemy.get(0)) + toDescription(enemy.get(1)) + role(enemyrole[5]));
checkWinner(herorole, enemyrole, list);
}
Es endet mit einer Hand, aber das Spiel wird fortgesetzt, bis einer der Chips 0 wird.
Starten Sie eine Sitzung! Viel Glück! ========== 1. Hand =========== Ihre Hand ist ♣ 8 ♣ 4 Sie haben 1000 Chips. Der Gegner hat 1000 Chips Der Topf ist 0 Bitte wählen Sie eine Aktionsüberprüfung: c oder Wette: b b Wie viel möchten Sie wetten? Bis zu 1000 10 Ich wette 10 $ Der Feind erhöhte auf 20 Dollar. Ihre Hand ist ♣ 8 ♣ 4 Ihr Chip ist 990. Der Chip des Gegners ist 980 Der Topf ist 30 Bitte wählen Sie einen Aktionsaufruf: c oder erhöhen: r oder folden: f c Ich rief. Fahren Sie bis zur nächsten Straße Der Flop ist ♥ 2 ♦ 8 ♥ 3 Ihre Hand ist ♣ 8 ♣ 4 Ihr Chip ist 980. Der Chip des Gegners ist 980 Der Topf ist 40 Bitte wählen Sie eine Aktionsüberprüfung: c oder Wette: b b Wie viel möchten Sie wetten? Bis zu 980 980 Alles in Ich wette 980 Feind gerufen. All-in Fahren Sie bis zur nächsten Straße Es ist ein Showdown. Die Hole Card ist ♥ 2 ♦ 8 ♥ 3 ♣ 10 ♥ J. Held: ♣ 8 ♣ 4 ein Paar Feind: ♦ 7 ♠ 7 ein Paar Der Gewinner ist Held! Die Rolle ist ein Paar Kicker ist 8 Held gewann 2000 Chips Das Spiel ist vorbei. Danke für deine harte Arbeit.
Ich konnte den Index nicht aus dem Element des Arrays abrufen und fragte mich, ob die Verwendung nicht einfach war. Sollte ich der Liste Priorität einräumen? Es war mein erstes Mal, dass ich mehr als 600 Codezeilen gleichzeitig schrieb, also war ich sehr müde. Der Kommentar ist sehr passend geworden. Selbst wenn ich einen Monat später zurückblicke, glaube ich nicht, dass ich es überhaupt verstehen kann ... Obwohl es erheblich vereinfacht ist, bin ich beeindruckt, dass ich etwas machen konnte, das von mir selbst funktioniert, der vorgestern Hallo Welt war. Wenn ich die Universitätsaufgaben morgen erfolgreich abschließen kann, werde ich lernen, objektorientiert zu schreiben und neu zu schreiben. Der verlegte Hals tut immer noch gut gut gut gut gut gut
Trotzdem wird Quita ziemlich oft gelesen ... Ich war überrascht über die Anzahl der Aufrufe. Der Quellcode ist unten https://github.com/hmck8625/poker/blob/master/poker.java
Recommended Posts