游戏中的牌组排名

时间:2014-07-11 21:08:00

标签: java class

我是一名初学Java学生。所以任何帮助将不胜感激!

我设计了一个类卡和类甲板,我将在我创建的游戏中使用它。到目前为止,我的游戏似乎运行得很好,但我遇到的问题在于我的卡类。我想利用我的getRank()方法来积累玩家所拥有的牌的积分(无论是否合适)。

例如,如果他们画了2个钻石,那么它将值2分,3分3分......等等。我已经创建了一个名为String[]的{​​{1}}来尝试这样做,而我认为它的作用是什么。但是,我喜欢所有的面部卡片(如国王,女王......)的值为10.但并非所有这些卡片都位于我的阵列中的索引10处。我可以就如何调整此问题提供一些指导吗?

提前谢谢。

ranks

2 个答案:

答案 0 :(得分:7)

Enums是你的朋友。正如您所发现的那样,int是不恰当的,因为它们仅适用于某些案例(从1到10),并且没有什么可以阻止您的用户提供非法价值(否定)或大于13)。枚举既可以强制执行正确的值,也可以轻松关联您喜欢的任何数值。

public enum CardRank  {
   ACE(1),
   TWO(2),
   THREE(3),
   ...
   TEN(10),
   JACK(10),
   QUEEN(10),
   KING(10);

   private final int value;
   CardRank(int value)  {
      this.value = value;
   }
   public int getValue()  {
      return  value;
   }
}

使用此功能,您可以使用

设置排名
public void Card(CardRank rank, CardSuit suit)  {
   this.rank = rank;
   this.suit = suit;
}
public int getRankValue()  {
   return  rank.getValue();
}

枚举的另一个好处是很多更清晰,自我记录的功能。如果参数都是int s,那么,仅通过查看签名的类型,就不清楚哪个是排名,哪个是诉讼。使用枚举,这不是问题。

我将CardSuit作为练习离开:)

更多信息:

答案 1 :(得分:1)

您可以重新调整您的卡级别,使其具有“价值”'或等效参数,用于存储每张卡的点值。但是,点值更多的是游戏逻辑。也许为您的游戏提供一种方法getValue(Card c),可以根据您的逻辑将卡片的等级转换为值。该方法可能如下所示

public int getValue(Card c) {
    if (c.getRank() > 10) {
        return 10;
    } else {
        return c.getRank();
    }
}