Comment instancier un tableau d'un jeu de cartes et de comparer les valeurs de chaque carte à jouer?

Kira:

Je suis en train de développer un programme Java qui est un jeu qui utilise dénombrées types / classes pour représenter des cartes à jouer. Je veux utiliser les types énumérés pour représenter les costumes possibles et les rangs possibles. Le jeu tire au hasard deux cartes d'un jeu de cartes et les compare.

J'ai 4 classes à savoir SimpleCardGame, carte, rang et la couleur. À l'heure actuelle, j'avoir des problèmes avec SimpleCardGame et la carte.

Pour SimpleCardGame, mon seul problème est instancié avec la plate-forme de cartes. Qu'ai-je fait de mal? Une fois que je suis en mesure de résoudre ce, toute la partie au-dessous du « VOUS NE DEVEZ PAS QUOI QUE CE SOIT EN DESSOUS ACTUALISATION » travaillera parfaitement.

Pour la carte, il y a une méthode appelée public int compareTo (Carte c) qui retourne

  • une. -1 si l'objet appelant cette méthode est plus petite que c

  • b. 0 si l'objet appelant cette méthode est la même que c

  • c. 1 si l'objet appelant cette méthode est plus grande que c

Carte c1 est plus petite que c2 si le rang de c1 est inférieur à c2, ou si les rangs de c1 et c2 sont les mêmes, la combinaison de c1 est plus petit que c2. Classement des costumes: Cosse> Coeur> Club> Diamond Ordre des Grades: A> K> Q> J> 10> 9> 8> 7> 6> 5> 4> 3> 2

Donc, ma question est de savoir comment pour ce que je compare les valeurs de carte? Je pense à l'aide de la méthode de la valeur ordinale, mais je ne suis pas tout à fait sûr de savoir comment l'utiliser.

public class SimpleCardGame {

  public static void main(String[] args) {

    Card cards[];  // an array of Cards, representing a deck of cards

    // put a copy of each card into cards
    // The order of the cards in the array is: 
    // S2, S3, ..., SK, H2, ..., HK, C2, ..., CK, D2, ..., DK

    int i = 0;
    for (Suit s : Suit.values()) {
      for (Rank r : Rank.values()) {
        cards[i]= new Card(s,r);
        i++;
      }
    }

    }

    //
    // YOU DO NOT HAVE TO MODIFY ANYTHING BELOW
    //
    // print out the whole deck once
    System.out.println("The whole deck is:");
    for (Card card : cards)
      System.out.print(card + " ");
    System.out.println();

    // randomly draw two cards 
    MyRandom rnd = new MyRandom();
    Card c1 = cards[rnd.nextInt(cards.length)-1];
    Card c2 = cards[rnd.nextInt(cards.length)-1];

    System.out.println("Two cards are drawn:");
    System.out.println("c1 = " + c1 + " and c2 = " + c2);

    // compare c1 and c2
    if (c1.compareTo(c2) < 0) {
      System.out.println(c1 + " is smaller than " + c2);
    }
    else if (c1.compareTo(c2) == 0) { 
      System.out.println(c1 + " is the same as " + c2); 
    }
    else {
      System.out.println(c1 + " is larger than " + c2);
    }
  }
}


public class Card {
    private Rank rank;
    private Suit suit;

    public Card (Suit suit, Rank rank) {
        this.rank = rank;
        this.suit = suit;
    }

    public String toString() {
        return suit + "" + rank;
    }

    public int compareTo(Card c) {
        int diffRank = rank - c.rank;
        if (diffRank < 0) {
            return -1;
        }
        else if (diffRank > 0) {
            return 1;
        }
        else if (diffRank == 0) {
            int diffSuit = suit - c.suit;
            if (diffSuit < 0) {
                return -1;
            }
            else if (diffSuit > 0) {
                return 1;
            } 
        }
        return 0;
    }
}

public enum Rank {
  TWO("2"), 
  THREE("3"), 
  FOUR("4"), 
  FIVE("5"), 
  SIX("6"), 
  SEVEN("7"), 
  EIGHT("8"),
  NINE("9"), 
  TEN("10"), 
  JACK("J"), 
  QUEEN("Q"), 
  KING("K"),
  ACE("A"); 

  private String rank;

  // Constructor
  Rank (String r) {
    rank = r;
  }

  public String toString() {
    return rank;
  }
}
public enum Suit {
    SPADE("S"), 
    HEART("H"), 
    CLUB("C"), 
    DIAMOND("D"); 

    private String suit;

    Suit (String s) {
      suit = s;
    }

    public String toString() {
      return suit;
    }
}

Ci-dessous la sortie échantillon supposé du programme.

The whole deck is:
S2 S3 S4 S5 S6 S7 S8 S9 S10 SJ SQ SK SA H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK HA C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK CA D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DQ DK DA 
Two cards are drawn:
c1 = S7 and c2 = HQ
S7 is smaller than HQ

Joshgun:

Pour SimpleCardGame, mon seul problème est instancié avec la plate-forme de cartes. Qu'ai-je fait de mal?

Oui, votre instanciation de tableau n'est pas bon. Vous devez spécifier la taille du tableau lorsque vous déclarez. Ainsi, dans la situation actuelle, la bonne façon peut être:

Card cards[] = new Card[Suit.values().length * Rank.values().length];

PS: Je n'ai pas complètement analysé le problème et le code. Donc, si cela résout votre problème à un moment donné, nous pouvons aller de l'avant. (Il y a aussi des problèmes de formatage et de compilation dans votre code)

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=478642&siteId=1
conseillé
Classement