如何在Java中添加两个“卡”的值?

时间:2014-10-21 00:13:59

标签: java blackjack

我正在开发一个模拟二十一点游戏中的第一笔交易的项目。到目前为止,该程序创建了随机等级的两张随机等级卡(如2或3)。我正在努力创建一个切换表或if-else梯子来将两张卡的附加值分配为变量“得分”。教授创建了一个java .class,其中每个卡片等级被分配一个整数值(两个是第0张卡片,因此它的值为0,三张是第一张卡片,所以它的值为1)。我的问题是创建一个Score()方法来计算两张卡的实际添加分数。

if (card1.rank() == 0){
        score = 2;            
    } else if (card1.rank() == 1){ //I need the program to examine both card1 and card2
        score = 3;
    } else if (card1.rank() == 2){
        score = 4;

我只知道如何为一张卡分配一个新值,如何更改此代码,使其获取两张卡的值并返回正确的分数,而不仅仅是其中一张牌?非常感谢您的帮助,我将尽我所能快速回答任何问题以澄清。

2 个答案:

答案 0 :(得分:1)

获得card1的分数,然后获得card2的分数,然后将这些相应的值加在一起(添加),这是您的累积分数。

int score = getScore(card1) + getScore(card2);

getScore(Card)是您所指的switchif else链。 ,您可以选择将getScore()作为Card课程的一部分,然后将其用作

int score = card1.getScore() + card2.getScore();

修改

return card1.getRank() + card2.getRank() + 4;

一张卡的得分为rank() + 2。两张卡的分数为card1.rank() + 2card2.rank() + 2card1.getRank() + card2.getRank() + 4

答案 1 :(得分:0)

您的方法存在一些问题。使用整数来表示卡的等级很好,但是使用0 = deuce ... 12 = ace会使事情变得太复杂。更好的是1 = ace,2 = deuce,... 13 =国王。

例如,按照您的方式,单张卡的得分类似于:

int cardValue() {
    if (this.rank == 12) return 1;
    if (this.rank >= 8) return 10;
    return this.rank + 2;
}

我的方式,这变成了:

int cardValue() {
    if (this.rank >= 10) return 10;
    return this.rank;
}

你的Score()功能在不知名的地方。它在哪里适合你的对象结构?它不能是卡的方法,因为它应该只返回一张卡的分数。什么对象代表一手牌?那将是Score()方法的一个地方。如果你没有手持对象而只是使用卡片列表,那么Score()可能是卡片的静态方法,但它会将卡片列表作为参数。最后,Score()无法表示硬/软手。软17的得分与硬17的得分不同(例如,一些赌场击中一个而不是另一个)。

假设您有一个Hand对象,其中包含一组名为cards的卡片。这是一种方式:

int handTotal() {
    int total = 0;
    boolean foundAce = false;

    for (Card c: this.cards) {
        total += c.cardValue();
        if (c.cardValue() == 1) foundAce = true;
    }
    if (foundAce && total < 12) total += 10;
    return total;
}