Créer Un Jeu De Cartes Pour Blackjack simulator en Java


Je crée un simulateur de blackjack pour mieux apprendre java. J'ai récemment terminé le cours gratuit disponible à udacity qui est une excellente ressource, https://www.udacity.com/course/cs046 .

Jusqu'à présent, j'ai créé un jeu de cartes et imprimé avec succès. Il se compose de 3 classes, Blackjack qui détient la méthode principale, pont qui crée le pont et la carte qui crée les cartes.

Y a-t-il une meilleure façon de le faire? Une chose qui me saute aux yeux c'est comment longtemps le pont constructeur. Dans tous les exemples que j'ai vus, les constructeurs sont beaucoup plus courts.

De plus, je n'utilise aucune méthode getter dans card, elles doivent donc être supprimées ou utilisées. Je penche pour les supprimer car aucune autre méthode ne va appeler ces méthodes une fois le deck créé.

Je n'ai pas googlé cela car je ne veux pas avoir les réponses pour les méthodes futures qui me sont données. Je ne suis pas la première personne à avoir cette idée!

Merci pour vos commentaires.

Carte.java

package blackjack;

public class Card {
    private final String name;
    private final String suit;
    private final int value;

    public Card(String name, String suit, int value){
        this.name = name;
        this.suit = suit;
        this.value = value;
    }

    public String getName(){
        return name;
    }

    public String getSuit() {
        return suit;
    }

    public int getValue() {
        return value;
    }

    public String toString(){
        return (this.name + " of " + this.suit + " " + this.value);
    }
}

Pont.java

package blackjack;

import java.util.*;

public class Deck {

    private static int numSuits = 4;
    private static int numRanks = 13;
    private static int numCards = numSuits * numRanks;

    private Card[] cards;

    public Deck() {

        String suit = null;
        String name = null;        
        int value = 0;
        cards = new Card[numCards];

        int arrayIndex=0;

        for (int i=1; i<=numSuits; i++){
            for (int j=1; j <= numRanks; j++){
                switch (i){
                    case 1: suit = "Clubs"; break;
                    case 2: suit = "Diamonds"; break;
                    case 3: suit = "Hearts";  break;
                    case 4: suit = "Spades"; break;
                }

                switch (j){
                    case 1: name = "Ace"; value = 0; break;
                    case 2: name = "Two"; value = 2; break;
                    case 3: name = "Three"; value = 3; break;
                    case 4: name = "Four"; value =4; break;
                    case 5: name = "Five"; value = 5; break;                             
                    case 6: name = "Six"; value = 6; break;
                    case 7: name = "Seven"; value = 7; break;
                    case 8: name = "Eight"; value = 8; break;
                    case 9: name = "Nine"; value = 9; break;
                    case 10: name = "Ten"; value = 10; break;                           
                    case 11: name = "Jack"; value = 10; break;
                    case 12: name = "Queen"; value = 10; break;
                    case 13: name = "King"; value = 10; break;                           
                }

                Card card = new Card (name, suit, value);  
                cards[arrayIndex] = card; 
                arrayIndex++;
            }
        }
    }

    public void printDeck(){
        System.out.println(Arrays.toString(cards));
    }

}

Blackjack.java

package blackjack;

import java.util.*;

/**
 *
 * @author
 */
public class Blackjack {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Deck deck = new Deck();
        deck.printDeck();
    }
}
Author: mks212, 2014-07-16

1 answers

Y a-t-il une meilleure façon de le faire? Une chose qui saute aux yeux est combien de temps le pont constructeur. Dans tous les exemples que j'ai vus, les constructeurs sont beaucoup plus courts.

Réponse:
Vous avez raison, en général, les constructeurs devraient être minimaliste. La raison en est que vous voulez que l'objet soit créé dès que possible, et lorsque le constructeur fait trop de travail, le risque que "quelque chose de mauvais se produise" augmente et que vous obteniez un objet" foiré " (qui est quelque chose qui est très difficile à déboguer au moment où vous le découvrez...). Cela dit, votre constructeur a deux boucles imbriquées qui s'exécutent 52 fois et effectuent 2 actions (+2 comparaisons) à chaque cycle. Ce n'est pas que beaucoup de travail - donc, à mon HUMBLE avis, c'est bien.


De plus, je n'utilise aucune méthode getter dans card, elles doivent donc être supprimées ou utilisées. Je penche pour les supprimer car aucune autre méthode ne va appeler ces méthodes une fois que le deck est créé.

Réponse:
Non! tous les champs de Card sont privés et vous ne pourrez pas y accéder pour lire réellement les cartes lorsque vous passerez sur Card[] cards (dans la classe Deck). Oui, dans le futur...

 1
Author: alfasin, 2014-07-16 03:17:43