首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算cardSum (字符串手)

计算cardSum (字符串手)
EN

Stack Overflow用户
提问于 2018-09-26 18:24:59
回答 2查看 100关注 0票数 0

我正在尝试创建一个二十一点游戏。这个游戏本身非常简单(至少我的版本是这样)。玩家从洗过的一副牌中抽出一张牌,并计算已经抽出的牌的总和。我有一个带有字符串类型的扑克牌列表,这对我来说是一个大问题。我不知道如何计算总和,因为它们是String类型的。你对我能做什么有什么指导意见吗?我想出的唯一解决方案真的很糟糕,那就是将卡片与字符串进行比较,然后给它一个值。例如,drawnCard.equals("Four of hearts") = "4";

代码语言:javascript
运行
复制
    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());
        }
    }


  }
代码语言:javascript
运行
复制
    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;
    }

}
代码语言:javascript
运行
复制
    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;
    }
}
代码语言:javascript
运行
复制
 public class BlackJackGame {

    public static void main(String[] args) {

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

    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-09-26 18:34:09

创建一个枚举来表示人脸

代码语言:javascript
运行
复制
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;
    }
}

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

代码语言:javascript
运行
复制
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();
    }
}

添加一个方法,以便从card类中获取face number,然后相应地使用它。您将需要更改其他部分或您的项目以及,但我将留给你去做。

也建议使用enum作为套装。

票数 2
EN

Stack Overflow用户

发布于 2018-09-26 18:36:05

我在那里看不到扑克牌列表,但如果你的纸牌字符串总是遵循相同的命名约定(即“红心四”),你可以通过将每个字符串拆分成“”空格字段,然后比较字符串中的第一个单词来获得数字(或者对应于国王/王后等的10 ),从而使工作变得更容易。

代码语言:javascript
运行
复制
 String cardName = "four of hearts" (or whatever the variable name is);
   String[] parts = string.split(" ");
   String number = parts[0];

因此,数字将只等于“4”,而不是必须比较“红心四”才能返回数字4。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52515526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档