Java-Anfänger machen Pokerspiele in 4 Tagen (3. Tag)

Motivation und Zweck

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.

Pläne

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).

Implementierungsfunktion (der Einfachheit halber einfach)

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

Handkraft

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. B751E5BA-69F5-4EFC-8BEE-5D71AE49D3AF.jpg

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 --;
			}
		}

Flop, Turn, Flussbewegung

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);
	    	}

Ausführungsergebnis

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.

schließlich

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

Java-Anfänger machen Pokerspiele in 4 Tagen (3. Tag)
Java-Anfänger machen Pokerspiele in 4 Tagen (2. Tag)
Machen Sie einen Blackjack mit Java
Refactoring: Machen Sie Blackjack in Java
Anfänger spielen Janken-Spiele in Java
[Für Anfänger] Führen Sie Selenium auf Java aus
Wie man JAVA in 7 Tagen lernt
Neuer Ingenieur, der in 100 Tagen (3. Tag) eine sein wird
Einfach, Slack Bot mit Java zu machen
[Java] Anfänger wollen Dating machen. 1
Java Day 2018
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Repräsentiert "nächster Tag" und "vorheriger Tag" in Java / Android
[Java-Anfängerangst] In Junit implementierter schwer zu testender Code