Les débutants en Java créent des parties de poker en 4 jours (3ème jour)

Motivation et but

J'ai commencé à étudier le 21/06 pour en savoir un peu plus sur Java. J'ai appris les bases de Java avec progate le 21/06, donc je vais le sortir. C'était correct de faire n'importe quoi, mais j'aimerais faire du sport cérébral "Texas Holdem" que j'aime.

Dans le but d'augmenter les sources de production pour l'emploi, j'ai décidé de noter ici la trajectoire d'apprentissage dans un sens journalier.

des plans

Jour 1: Découvrez Java avec progate (omis) Jour 2 et 3: mis en œuvre pour le moment (c'est fait!) Jour 4: Organisez le code en fonction de l'orientation de l'objet (peut-être impossible)

Fonction de mise en œuvre (simple pour plus de simplicité)

Hier ** Distribuez les cartes et décidez de l'action pré-flop ** J'ai pu le faire

Où partir ** Flop, turn, mouvement de rivière Force de la main, détermination du rôle Traitement tel que tout-en-un, pli ** est

Force de la main

De la décision du rôle de la main qui m'a le plus dérangé. Par souci de simplicité, je n'ai pas mis en œuvre flash et directement cette fois. De plus, la carte la plus faible est A au lieu de 2, mais pardonnez-moi s'il vous plaît. J'ai pensé comme suit. B751E5BA-69F5-4EFC-8BEE-5D71AE49D3AF.jpg

J'ai réussi à le faire en remplissant le tableau avec des drapeaux, en continuant d'hier.


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

Dans le procédé dans chaque branche, 5 cartes sont sélectionnées parmi les 7 cartes afin qu'elles soient dans la main la plus forte et stockées dans la main. J'ai mis d'abord les nombres avec des rôles tels que les paires, et j'ai classé le reste par ordre décroissant de nombres.

	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, virage, mouvement de rivière

Ajout d'un drapeau de pli et d'un drapeau all-in à la liste int [], sautant chaque rue quand ils sont définis et soudainement confrontation.

        int list[] = {1000,1000,0,0,0,0};
        
        //[0] herochip(moi même)/
        //[1] enemychip(Adversaire)/
        //[2] pot/
        //[3] needChiptoCall
        //[4]foldFlag				       
        //===foldFlag===
    		//0 non plié
        	//1 héros est plié
        	//2 ennemi est plié
        
        //[5]alInFlag
        //===allInFlag===
        	//0 pas tout dans
    		//1 héros est tout en
    		//2 ennemi est allin

La méthode de la rue contient le processus de réalisation de votre propre action et l'action de l'autre partie dans la rue.

	         //Traitement préflop
	    	
	    	street(hero, list, scan);
	    	

	    		//Turn, traitement de la rivière
	    	
	    	//Ajouter 3 flops
	    	if(list[4] == 0 && list[5] == 0) {
	            System.out.println("Le flop est" + toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +  "est");
	            street(hero, list, scan);
	    	}


	        
	        //tour
	    	if(list[4] == 0 && list[5] == 0) {

	            System.out.println("La carte de tour est" + toDescription(holeCard.get(3)) + "est. La carte du trou"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) +  "est");
	            street(hero, list, scan);
	    	}

	        //rivière
	    	if(list[4] == 0 && list[5] == 0) {

	            System.out.println("Carte de rivière" + toDescription(holeCard.get(4)) + "est. La carte du trou"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "est");
	            street(hero, list, scan);
	    	}

	    		//Épreuve de force. Décision de victoire / perte
	    	if(list[4] == 1) {//Quand le héros descend
				System.out.println("l'ennemi est"+list[2]+"$A remporté la puce de" );
	    		list[1] = list[1] + list[2];
	    		list[2] = 0;
	    		list[3] = 0;
	    		list[4] = 0;
	    	}else if(list[4] == 2) {
				System.out.println("le héros est"+list[2]+"$A remporté la puce de" );
	    		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("C'est une confrontation. La carte du trou"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "est");
	            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);
	    	}

Résultat d'exécution

Il se termine par une main, mais le jeu continue jusqu'à ce que l'un des jetons devienne 0.

Démarrez une session! Bonne chance! ========== 1re main =========== Votre main est ♣ 8 ♣ 4 Vous avez 1000 jetons. L'adversaire a 1000 jetons Le pot est 0 Veuillez sélectionner un contrôle d'action: c ou parier: b b Combien voulez-vous parier? Jusqu'à 1000 10 Je parie 10 $ L'ennemi relance à 20 $. Votre main est ♣ 8 ♣ 4 Votre puce est 990. Le jeton de l'adversaire est 980 Le pot est de 30 Veuillez sélectionner un appel à l'action: c ou relancer: r ou se coucher: f c J'ai appelé. Passez à la prochaine rue Le flop est ♥ 2 ♦ 8 ♥ 3 Votre main est ♣ 8 ♣ 4 Votre puce est 980. Le jeton de l'adversaire est 980 Le pot est de 40 Veuillez sélectionner un contrôle d'action: c ou parier: b b Combien voulez-vous parier? Jusqu'à 980 980 Tout en Je parie 980 l'ennemi a appelé. Tout-en-un Passez à la prochaine rue C'est une confrontation. La carte du trou est ♥ 2 ♦ 8 ♥ 3 ♣ 10 ♥ J héros: ♣ 8 ♣ 4 une paire ennemi: ♦ 7 ♠ 7 une paire Le gagnant est le héros! Le rôle est une paire Kicker est 8 le héros a gagné 2000 jetons Le jeu est terminé. Je vous remercie pour votre travail acharné.

à la fin

Je n'ai pas pu récupérer l'index de l'élément du tableau et je me suis demandé si ce n'était pas facile à utiliser. Dois-je donner la priorité à la liste? C'était la première fois que j'écrivais plus de 600 lignes de code à la fois, j'étais donc très fatigué. Le commentaire est devenu super approprié. Même si je regarde en arrière un mois plus tard, je ne pense pas du tout pouvoir le comprendre ... Cependant, même si c'est considérablement simplifié, je suis impressionné d'avoir pu faire quelque chose qui fonctionne par moi-même, qui était bonjour le monde avant-hier. Si je peux réussir les tâches universitaires demain, j'apprendrai à écrire de manière orientée objet et à les réécrire. Le cou mal placé fait encore mal bien bien bien bien bien bien

Malgré tout, beaucoup de quita sont lus ... J'ai été surpris du nombre de vues. Le code source est ci-dessous https://github.com/hmck8625/poker/blob/master/poker.java

Recommended Posts

Les débutants en Java créent des parties de poker en 4 jours (3ème jour)
Les débutants en Java créent des parties de poker en 4 jours (2ème jour)
Faites un blackjack avec Java
Refactoring: faire du Blackjack en Java
Les débutants jouent à des jeux Janken en Java
[Pour les débutants] Exécutez Selenium sur Java
Comment apprendre JAVA en 7 jours
Nouvel ingénieur qui servira en 100 jours (3e jour)
Facile à créer Slack Bot avec Java
[Java] Les débutants veulent faire des rencontres. 1er
Journée Java 2018
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Représente le «jour suivant» et le «jour précédent» en Java / Android
[Angoisse du débutant Java] Code difficile à tester implémenté dans Junit