有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

游戏中纸牌的等级

我是一名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];
}

共 (2) 个答案

  1. # 1 楼答案

    您可以重新构造您的卡类,使其也具有用于存储每张卡的点值的“值”或等效参数。然而,分值更多的是一种游戏逻辑。也许给你的游戏一个方法getValue(Card c),根据你的逻辑将一张牌的等级转换成一个值。该方法可以如下所示

    public int getValue(Card c) {
        if (c.getRank() > 10) {
            return 10;
        } else {
            return c.getRank();
        }
    }
    
  2. # 2 楼答案

    Enum是你的朋友。正如您所发现的,int是不合适的,因为它们只适用于某些情况(ace到ten),并且没有任何东西可以阻止您的用户提供非法值(负值或大于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();
    }
    

    Enum的另一个好处是更加清晰、自我记录功能。如果参数都是int,那么,仅通过查看签名的类型,就不清楚哪个是秩,哪个是适合的。对于枚举,这不是问题

    我将把CardSuit作为练习:)

    更多信息: