游戏中的牌组排名

use*_*226 4 java class

我是初学者Java学生.所以任何帮助将不胜感激!

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

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

先感谢您.

int rank;
int suit;
String[]ranks = { " "," ", " " } //all 13 ranks from Ace to King 
String[]suits = { " ", " ", " "} //all ranks

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

public void setRank(int rank){
   this.rank = rank;
}

public int getRank(){
   return rank;
}

//more code for suits

public String toString(){
   return ranks[rank]+" of "+suits[suit];
}
Run Code Online (Sandbox Code Playgroud)

ali*_*ind 7

枚举是你的朋友.正如您所发现的,ints不合适,因为它们只适用于某些情况(从ace到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;
   }
}
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以设置等级

public void Card(CardRank rank, CardSuit suit)  {
   this.rank = rank;
   this.suit = suit;
}
public int getRankValue()  {
   return  rank.getValue();
}
Run Code Online (Sandbox Code Playgroud)

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

我会离开CardSuit这个运动:)

更多信息: