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.
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)
** 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
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.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é.
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)
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 + "
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!"); } } } }
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
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