Cómo crear una instancia de una matriz de una baraja de cartas y comparar los valores de cada tarjeta de juego?

Kira:

Estoy tratando de desarrollar un programa Java que es un juego que utiliza enumeran los tipos / clases de representación de naipes. Quiero usar tipos enumerados para representar posibles demandas y posibles filas. El juego se basa azar dos cartas de una baraja de cartas y los compara.

Tengo 4 clases a saber SimpleCardGame, tarjeta, rango y palo. Actualmente, estoy teniendo problemas con SimpleCardGame y tarjeta.

Para SimpleCardGame, mi único problema es una instancia del mazo de cartas. ¿Qué hice mal? Una vez que soy capaz de resolver eso, toda la parte de debajo de la "todo lo que no tiene que modificar abajo" estará trabajando perfectamente.

Para la tarjeta, hay un método llamado public int compareTo (tarjeta c) que devuelve

  • a. -1 si el objeto llamar a este método es menor que c

  • si. 0 si el objeto llamar a este método es el mismo que c

  • C. 1 si el objeto llamar a este método es mayor que c

c1 tarjeta es menor que c2 si el rango de c1 es menor que c2, o si las filas de c1 y c2 son los mismos, el traje de c1 es menor que c2. Orden de palos: Spade> Heart> Club> Solicitar Diamond de Rangos: A> K> Q> J> 10> 9> 8> 7> 6> 5> 4> 3> 2

Así que mi problema de esto es ¿Cómo puedo comparar los valores de las cartas? Estoy pensando en usar el método de valor ordinal, pero no estoy muy seguro de cómo usarlo.

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

A continuación se muestra la supuesta salida de muestra del programa.

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:

Para SimpleCardGame, mi único problema es una instancia del mazo de cartas. ¿Qué hice mal?

Sí, la matriz de instancias no es adecuada. Debe especificar el tamaño de la matriz cuando se declara. Así que en la situación actual, la manera adecuada puede ser:

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

PD: No Hemos analizado completamente todo el problema y el código. Por lo tanto, si se soluciona su problema en algún momento podemos ir hacia adelante. (También hay algunos problemas de formato y de compilación en su código)

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=478646&siteId=1
Recomendado
Clasificación