Класс для представления карты в Java? - PullRequest
1 голос
/ 23 июля 2010

Я делаю программу для блэкджека на Java и начинаю писать объявление класса для объекта Card. Будет ли этого достаточно, или есть какие-то методы, которые я должен использовать?

public class Card {
    public int suit; //Value 1-4 to represent suit
    public int value; //Value 1-13 to represent value (i.e. 2, J)
    public Card(int suit, int value) {
        //Not yet implemented
    } 
}

Кроме того, есть ли хороший способ иметь что-то вроде структуры данных enum C ++ в Java, потому что это было бы хорошо для названий карт и мастей?

Ответы [ 6 ]

7 голосов
/ 23 июля 2010
public enum Suite {
    HEART, DIAMOND, CLUB, SPADE
}
public enum Value {
    TWO, THREE, ... , JACK, QUEEN, KING, ACE 
}

а остальное можно выяснить.

1 голос
/ 23 июля 2010

Да, ваш старт выглядит хорошо. Поменяйте ряды и костюмы на перечисления - это было бы неплохо. Что касается методов, создавайте их по мере необходимости и обнаруживайте, что они вам нужны. В зависимости от игры, которую вы пишете, вам может понадобиться совершенно другой набор методов.

У Java очень мощное перечисление. Посмотрите пример ниже.

public enum Rank {
  ACE(1, "Ace"),
  TWO(2, "Two"),
  ... etc
  KING(13, "King");

  private int value;
  private String display;

  private Rank (int value, String display) {
    this.value = value;
    this.display = display;
  }

  public int getValue() {
    return this.value;
  }

  public int getDisplay() {
    return this.display;
  }
}
0 голосов
/ 23 июля 2010

Возможно, вы захотите создать подклассы для разных игр.PokerCard и SolitareCard могут быть сопоставимыми;в одном туз больше короля;в другом туз меньше, чем король.

Для BlackjackCard сравнение не имеет значения.Вы можете рассмотреть возможность использования intValue (), где intValue () с K или Q или J равно 10, но это не сработает легко для BlackjackCard, потому что туз может быть один или одиннадцать.Так что это хорошее упражнение при разработке модели, соответствующей реальному миру: здесь есть проблема, когда целочисленное значение карты не полностью присуще карте, а зависит от контекста карты.

0 голосов
/ 23 июля 2010

Что касается «есть ли у меня какие-то методы, которые я замаскирую», это действительно субъективно и основано на контексте, в котором используется класс. Например, если вам никогда не нужно печатать объект, вам может не понадобиться функция 'toString ()', но если вы это сделаете, она может пригодиться (особенно если вы хотите, чтобы выходные данные были отформатированы определенным образом).

Java также имеет enum, см. здесь для учебника.

0 голосов
/ 23 июля 2010

Java от 1.5 полностью поддерживает перечисления . По совпадению, пример, приведенный в ссылке, использует класс карты в качестве примера, как вы пытаетесь сделать.

Базовый класс, который у вас есть, достаточно с добавлением геттеров. Внедрение Comparable может оказаться полезным, если в какой-то момент вам понадобится выполнить сортировку.

0 голосов
/ 23 июля 2010

Я бы (использовал) перечисление с костюмом и значением в качестве свойства.Костюм и стоимость также могут быть перечислениями.

...