1

我正在用 Java 制作一个二十一点程序,并且开始为对象卡编写类声明。这是否足够,或者我应该有一些我正在掩饰的方法?

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

此外,有没有一种好方法可以在 Java 中使用类似 C++ 的枚举数据结构,因为这对于卡名和套装来说会很好?

4

6 回答 6

7
public enum Suite {
    HEART, DIAMOND, CLUB, SPADE
}
public enum Value {
    TWO, THREE, ... , JACK, QUEEN, KING, ACE 
}

其余的你可以弄清楚。

于 2010-07-23T17:23:08.877 回答
1

是的,你的开始看起来不错。将等级和套装切换为枚举 - 这将是一个好主意。至于方法,在你去发现你需要它们的时候创建它们。根据您正在编写的游戏,您可能需要一组完全不同的方法。

Java 有一个非常强大的枚举。看看下面的例子。

公共枚举排名{
  王牌(1,“王牌”),
  二(2,“二”),
  ... ETC
  国王(13,“国王”);

  私有 int 值;
  私有字符串显示;

  私有等级(int值,字符串显示){
    this.value = 值;
    this.display = 显示;
  }

  公共 int getValue() {
    返回 this.value;
  }

  公共 int getDisplay() {
    返回这个。显示;
  }
}
于 2010-07-23T17:21:12.160 回答
0

我会(已经)使用带有套装和价值的枚举作为属性。Suit 和 value 也可以是枚举。

于 2010-07-23T17:21:12.003 回答
0

从 1.5 开始的 Java 完全支持enums。巧合的是,链接中提供的示例使用卡片类作为示例,就像您尝试做的那样。

添加吸气剂后,您拥有的基类就足够了。如果您需要在某些时候进行排序,实施 Comparable 可能会证明是有价值的。

于 2010-07-23T17:22:05.953 回答
0

关于“我是否应该有一些我正在掩饰的方法”,这确实是主观的,并且基于使用该类的上下文。例如,如果您从不需要打印对象,则可能不需要“toString()”函数,但如果这样做,它可能会派上用场(特别是如果您希望以特定方式格式化输出)。

Java 也有枚举,请参阅此处获取教程。

于 2010-07-23T17:22:22.263 回答
0

您可能想为不同的游戏创建子类。PokerCard 和 SolitareCard 可以相提并论;一方面,王牌大于王;另一方面,Ace 小于 King。

对于 BlackjackCard,比较无关紧要。您可能会考虑使用 intValue(),其中 K 或 Q 或 J 的 intValue() 为 10,但这对于 BlackjackCard 来说并不容易,因为 A 可以是 1 或 11。所以这是设计模型以匹配现实世界的一个很好的练习:这里有一个问题,卡片的整数值并不完全是卡片固有的,而是取决于卡片的上下文。

于 2010-07-23T17:31:30.207 回答