java - 计算cardSum(字符串之手)

标签 java arrays arraylist blackjack

我正在尝试创建一个二十一点游戏。游戏本身非常简单(至少我的版本是这样)。玩家从洗过的牌堆中抽一张牌,并计算抽出的牌的总和。我有一个字符串类型的牌组列表,这对我来说是一个大问题。我不知道如何计算总和,因为它们是字符串类型。您对我能做什么有任何指导吗?我想出的唯一解决方案非常糟糕,是将卡与字符串进行比较并给它一个值。例如,drawnCard.equals("四红心") = "4";

    public class Player {


    private String nickName;
    private int playerNumOfCards;
    ArrayList<Card> playerHand = new ArrayList<>();


    public Player (String name){
        this.nickName = name;
    }

    public String getNickName() {
        return nickName;
    }

    public void addCard(Card aCard){
        playerHand.add(aCard);
        this.playerNumOfCards++;

    }

    public void getHandSum(){

    }

    public void getPlayerHand(){
        for(Card cards: playerHand){
            System.out.println(cards.toString());
        }
    }


  }


    public class DeckOfCards {

    private Card[] deck;
    private static final Random random = new Random();

    private int currentCard; //index of next Card to be deal (0-51)
    private static int NUMBER_OF_CARDS = 52; //Constant number of cards

    public DeckOfCards(){

        String [] faces = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack","Queen", "King"};
        String [] suits = {"Hearts", "Diamonds", "Clubs", "Spades"};

        deck = new Card [NUMBER_OF_CARDS]; // create array with Cards (52)
        currentCard = 0;

        //Populate deck with Cards
        for(int count = 0; count < deck.length; count++)
            deck [count] = new Card(faces [count % 13], suits [count / 13]);
    }

    public void shuffleDeck(){
        currentCard = 0;

        for (int first = 0; first < deck.length; first++){

            int second = random.nextInt(NUMBER_OF_CARDS); //Select a random card from number 0-51 (Number_of_cards)

            //Loops through all the cards and swaps it with the "Second" card which is randomly chosen card from hte same list.
            Card temp = deck[first];
            deck [first] = deck [second];
            deck [second] = temp;
        }
    }

    public void getCardDeck(){
        int start = 1;
        for(Card k : deck) {
            System.out.println("" + start + "/52 " + k);
            start++;
        }
    }

    public Card dealNextCard(){

        //Get the top card
        Card topCard = this.deck[0];

        //shift all the subsequent cards to the left by one index
        for(int currentCard = 1; currentCard < NUMBER_OF_CARDS; currentCard ++){
            this.deck[currentCard-1] = this.deck[currentCard];
        }
        this.deck[NUMBER_OF_CARDS-1] = null;

        //decrement the number of cards in our deck
        this.NUMBER_OF_CARDS--;

        return topCard;
    }

}


    public class Card {
    private String face; //Face of card, i.e "King" & "Queen"
    private String suit; //Suit of card, i.e "Hearts" & "diamonds"

    public Card (String cardFace, String cardSuit){ //Constructor which initializes card's face and suit
        this.face = cardFace;
        this.suit = cardSuit;
    }

    public String toString(){ //return String representation of Card
        return face + " of " + suit;
    }
}


 public class BlackJackGame {

    public static void main(String[] args) {

        DeckOfCards deck1 = new DeckOfCards();
        Player player1 = new Player("mille");
        deck1.shuffleDeck();

    }
}

最佳答案

创建一个枚举来表示 Face

enum Face {
    Ace(number), //I don't know what number is for Ace and others.
    Deuce(number),
    Three(3),
    Four(4),
    Five(5),
    Six(6),
    Seven(7),
    Eight(8),
    Nine(9),
    Ten(10),
    Jack(number),
    Queen(number),
    King(number);

    private final int number;

    Faces(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

将面的类型从字符串更改为面。

class Card {

    private Face face;
    private String suit;

    public Card (Face cardFace, String cardSuit){card's face and suit
        this.face = cardFace;
        this.suit = cardSuit;
    }

    public String toString(){
        return face + " of " + suit;
    }

    public int getNumber() {
        return face.getNumber();
    }
}

添加一个方法来从卡类中获取面号,然后相应地使用它。您还需要更改其他部分或您的项目,但我会将其留给您来做。

还建议对 Suit 使用枚举。

关于java - 计算cardSum(字符串之手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515526/

相关文章:

java - 移动部分数组中的对象

java arraylist indexOutOfBonds 异常原因

java - 使用 Jackson 反序列化带有列表的 XML

java - 如何根据设备制造商执行不同的代码?

Javascript:检查数组的所有元素是否与变量相同,或者都不相同

java - Java 的隐藏特性 - ArrayList/实例初始化器说明

java - 从泛型 ArrayList 派生泛型类型

java - nosuchwindowexception Selenium 与 PhantomJS Java

java - 从 config.properties 文件读取路径

javascript - 基于 "category"属性和 sum "amount"属性减少对象数组