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

Motivation et but

J'ai commencé à étudier hier (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 (j'aimerais pouvoir le faire) Jour 4: Organisez le code en fonction de l'orientation de l'objet (prévu)

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

** Les joueurs ne se tiennent que pour eux-mêmes et leur adversaire (CPU) Le processeur détermine l'action par des nombres aléatoires, pas par la force de la main BTN est toujours de l'autre côté sans stores Terminez lorsque l'une ou l'autre des puces est épuisée **

En exécution ** Créer un deck Mélange de deck Distribuez votre main au joueur ** Il y avait un site très facile à comprendre pour le traitement de, donc je l'ai utilisé comme référence. À voir absolument pour tous ceux qui veulent créer quelque chose en Java! Créer un jeu pour ceux qui ont lu le livre d'introduction

Les fonctions qui pourraient être implémentées le deuxième jour ** Séquence préflop ** Il a juste fallu un certain temps pour comprendre les valeurs de passage par référence

Commentaire de code

public static void main(String[] args) {

System.out.println ("Démarrer une session! Bonne chance!"); //デッキを作成

	List <Integer> deck = new ArrayList<>(52);

//デッキをシャッフル shuffleDeck(deck);

//プレイヤーの手札リストを生成 List hero = new ArrayList<>(); List enemy = new ArrayList<>();

//プレイヤーにカードを二枚ずつ配る hero.add(deck.get(0)); enemy.add(deck.get(1)); hero.add(deck.get(2)); enemy.add(deck.get(3));

//山札の進行状況を記録する変数deckCountを定義 int deckCount = 4;

//プレイヤーの持っているチップを定義(初期値100)potも定義(初期値0) int list[] = {100,100,0,0,0};

// [0] puce héros (soi) / // [1] puce ennemie / //[2] pot/ //[3] needChiptoCall //[4]foldFlag
//===foldFlag=== // 0 non plié // 1 héros est plié // 2 ennemis se couchent

	Scanner scan = new Scanner(System.in);

//プリフロップの処理 preFlop(hero, list, scan); //各プレイヤーのアクションの後にneedtocallが0の場合にそのストリートが終了したとできる while(true) { enemyAction(list); if(list[4] == 2) { System.out.println ("l'ennemi est sorti héros gagne"); break; }else if(list[3] == 0) { System.out.println ("Aller au flop"); break; } preFlop(hero, list, scan);

    	if(list[4] == 1) {

System.out.println ("le héros a réussi les victoires ennemies"); break; }else if(list[3] == 0) { System.out.println ("Aller au flop"); break; } }

//ターン、リバーの処理 //ショーダウン。勝敗の決定 //チップの移動 //チップがなくなったら終了

Je ne connais encore rien de technique, c'est donc une manière sale de mettre les données nécessaires dans la liste des tableaux et de les transmettre dans leur intégralité.

Action de vous-même (héros)

Il y a cinq actions de base au poker: check, call, bet, relance et fold. Si la mise (relance) de l'adversaire n'est pas incluse, il existe deux types, "check, bet" Si la mise (relance) de l'adversaire est incluse, il existe trois types d'actions: "suivre, relancer, se coucher". Ils sont définis comme des méthodes "checkBet" et "callRaiseFold", respectivement. (Il n'y a aucun sens de nommer) checkBet

 private static boolean checkBet(int list[], String str, Scanner scan){

if ("c" .equals (str)) {// Traitement lorsque coché //相手に回す System.out.println ("vérifié."); return true; } else if ("b" .equals (str)) {// Lors des paris. Écoutez le montant de la mise et déplacez le jeton, //ベット額を聞く while(true) { System.out.println ("Combien voulez-vous parier? Maximum" + liste [0] + "$"); int bet = scan.nextInt(); if (bet <= list [0] && bet> = list [2]) {// Lorsque le montant de la mise dépasse le montant que vous avez et lorsqu'il est inférieur au pot bet(list, bet); break; }else { System.out.println ("Le montant du pari est incorrect. Veuillez saisir la valeur correcte"); } } return true; }else { return false; } }

callRaiseFold private static boolean callRaiseFold(int list[], String str, Scanner scan){ if ("c" .equals (str)) {// Que faire lorsque vous appelez //相手に回す System.out.println ("appelé."); return true; } else if ("r" .equals (str)) {// Lors des paris. Écoutez le montant de la mise et déplacez le jeton, //ベット額を聞く while(true) { System.out.println ("Combien voulez-vous augmenter? Maximum" + liste [0] + "$"); int raise = scan.nextInt(); if (rise <= list [0] && rise> = list [3]) {// Si le montant du wraith dépasse le montant que vous avez et s'il est inférieur au pari précédent (relance) raise(list, raise); break; }else { System.out.println ("Le montant de l'augmentation est incorrect. Veuillez saisir la valeur correcte"); } } return true; }else if("f".equals(str)){ System.out.println ("plier"); list[4] = 1; return true; }else { return false; } }

Défini comme type booléen. Si l'entrée de la ligne de commande n'est pas valide, false est renvoyé et une boucle est effectuée. De plus, lors du repli, la liste [4] est définie comme foldFlag, 1 lorsque le héros se replie et 2 lorsque l'ennemi se replie. (La valeur par défaut est 0)

Action de l'autre partie (ennemi)

Utilisez la bibliothèque aléatoire pour générer des nombres aléatoires, diviser par des nombres, classer et déterminer des actions. J'aime beaucoup l'instruction switch car elle est facile à lire.

private static void ennemiAction (int list []) {// Action ennemie (varie avec des nombres aléatoires) Random rand = new Random(); int randomValue = rand.nextInt (100); // Génère des nombres aléatoires

	if(list[3] == 0) {//check or bet
		switch(randomValue%2) {

case 0: // Vérifier System.out.println ("ennemi vérifié."); break; cas 1: // pari int bet = list [2]; // Le montant du pari est fixé à la taille du pot System.out.println ("pari ememy" + pari + "."); //手持ちチップを減らし、ポットをふやす、needtoCallも増やす list[1] = list[1] - bet; list[2] = list[2] + bet; list[3] = bet; break; } }else {//call or raise or fold switch(randomValue % 3) { case 0: // appel System.out.println ("ennemi appelé."); //手持ちチップを減らしポットをふやす。needtocallをリセット list[1] = list[1] - list[3]; list[2] = list[2] + list[3]; list[3] = 0; break; case 1: int raise = list[3] * 2; if(raise >= list[1]) { raise = list[1]; System.out.println ("ememy est All-in."); }else { System.out.println ("ememy élevé à" + lever + "."); } // needtocall-rise = prochain needtocall list[1] = list[1] - raise; list[2] = list[2] + raise; list[3] = list[3] - raise; break; case 2: System.out.println ("ememy plié"); list[4] = 2; break; } } }

Traitement préflop

Qu'il y ait ou non relance (avance au flop) est jugé par le fait que la liste [3] est égale ou non à 0. Il m'a fallu un certain temps pour décider quoi faire ici. Je l'ai inventé dans un bain public. Si l'entrée est erronée, demandez à nouveau l'entrée. Si foldFlag est défini, passez au processus de gain ou de perte.

private static void preFlop(List<Integer> hero, int list[], Scanner scan) {
	printData(hero, list);

if (list [3] == 0) {// Quand needchiptocall vaut 0, c'est-à-dire quand il n'y a pas de relance de mise while(true) { System.out.println ("Veuillez sélectionner une action check: c ou bet: b"); String str = scan.next(); boolean flag = checkBet(list, str, scan); if(flag == true) { break; }else { System.out.println ("Entrée incorrecte!"); } } }else { while(true) { System.out.println ("Veuillez sélectionner un appel à l'action: c ou lever: r ou fold: f"); String str = scan.next(); boolean flag = callRaiseFold(list, str, scan); if(flag == true) { break; }else { System.out.println ("Entrée incorrecte!"); } } } }

Résultat d'exécution

Démarrez une session! Bonne chance! Votre main est ♥ A ♣ K Vous avez 100 jetons Le pot est 0 Veuillez sélectionner un contrôle d'action: c ou parier: b b Combien voulez-vous parier? Jusqu'à 100 $ 3 Je parie 3 $ L'ennemi relance à 6 $. Votre main est ♥ A ♣ K Votre puce est 97 Le pot est de 9 Veuillez sélectionner un appel à l'action: c ou relancer: r ou se coucher: f r Combien récoltez-vous? Jusqu'à 97 $ 30 Augmenté à 30 $ l'ennemi a appelé. Aller au flop

Après-demain

Si vous utilisez la méthode d'action, vous pouvez facilement implémenter le traitement des virages et des rivières. Je ne sais toujours pas comment décider du résultat de la main (rôle) Il semble que cela prendra du temps Mon cou mal placé me fait mal (assez)

Je n'écris généralement pas de phrases + ce n'est pas pour les montrer aux gens, alors pardonnez-moi d'être difficile à lire ...

Recommended Posts

Les débutants en Java créent des parties de poker en 4 jours (2ème jour)
Les débutants en Java créent des parties de poker en 4 jours (3è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
Nouvel ingénieur qui servira en 100 jours (2ème jour)
Nouvel ingénieur qui servira dans 100 jours (jour 0)
Nouvel ingénieur qui servira en 100 jours (5e jour)
Nouvel ingénieur qui servira en 100 jours (6e jour)
Nouvel ingénieur qui servira en 100 jours (1er jour)
Nouvel ingénieur qui servira en 100 jours (4e jour)
Nouvel ingénieur qui servira en 100 jours (2ème jour)
26e jour d'ingénieur qui deviendra à part entière dans 100 jours
28e jour d'ingénieur qui deviendra à part entière dans 100 jours
Les débutants en Java créent des parties de poker en 4 jours (3ème jour)
[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