Java BlackJack Game Ace值

时间:2015-09-15 20:38:10

标签: java blackjack

我无法将我的Ace卡值设置为1或11.当我问他怎么做时,我的教授对我说:

  

ace的值取决于你手中的其他牌。你必须先添加所有其他牌,然后决定ace是否应该算作一个或十一个。你应该在你的手类中使用一个方法(我使用的是玩家类),称为" value"这决定了你手的价值。在该方法内部将是确定一个ace是一个还是十一个的逻辑。

还不确定如何做到这一点。

class Card
{
    private char suit;
    private char rank;
    private boolean facedown;

    Card (char R, char S)
    {
        rank = R;
        suit = S;
    }

    public int value ()
    {
        int index = 0;
        int [] valueArray = {
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10
        };
        char [] suitArray = {
            'A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K'
        };

        while (rank != suitArray[index]) {
            index++;
        }

        return valueArray [index];   
    }
}

class Player
{
    private Card [] storage;
    private int top;

    public Player()
    {
        storage = new Card[20];
        top = 0;
    }

    public void take(Card c1)
    {
        storage[top] = c1;
        top++;
    }

    public int value()
    {
    }
}

1 个答案:

答案 0 :(得分:0)

一旦你意识到一件事,处理二十一点的Ace很简单:从来都不是玩家的选择。 A计数一个;如果你的手牌中包含一张ace,总数为11或者更少,那么一张牌照升级到11张。永远不会有一张以上的王牌计为11张,如果有必要,玩家也不会这样做。

但是,即使价值本身是由规则而不是选择决定的,“软”18和“硬”18之间仍然存在很大差异,所以如果你是价值函数,则返回数字18,它没有做好自己的工作。由于Java,C和其他语言不会让函数同时返回boolean和int,您可能希望以某种方式将函数隐藏在布尔值中,例如使用结果的符号位(使软值为负) ,或添加固定偏移(例如,将100加到软值)。

所以这里有一些伪代码:

soft = false
found_ace = false
total = 0

for each card in hand:
    if ace:
        total += 1
        found_ace = true
    elseif facecard:
        total += 10
    else:
        total += card value
if found_ace and total < 12:
    total += 10
    soft = true
return soft, total