我是一名初学Java学生。所以任何帮助将不胜感激!
我设计了一个类卡和类甲板,我将在我创建的游戏中使用它。到目前为止,我的游戏似乎运行得很好,但我遇到的问题在于我的卡类。我想利用我的getRank()方法来积累玩家所拥有的牌的积分(无论是否合适)。
例如,如果他们画了2个钻石,那么它将值2分,3分3分......等等。我已经创建了一个名为String[]
的{{1}}来尝试这样做,而我认为它的作用是什么。但是,我喜欢所有的面部卡片(如国王,女王......)的值为10.但并非所有这些卡片都位于我的阵列中的索引10处。我可以就如何调整此问题提供一些指导吗?
提前谢谢。
ranks
答案 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();
}
}