如何改进Java-Blackjack-Counter

时间:2016-06-07 09:12:23

标签: java loops counter

我正试图为我的二十一点游戏制作一个计数器。计数器应该计算ACE',以便它可以计算玩家的积分(Ace为1或11)。

如果玩家拥有ACE且超过21点,则应减去10点“setPointsPC(13)”。但它应该只减去它以前没有做过。如果玩家有2个Ace,它应该是这样的:

  

玩家命中 - >超过21 - >得分为10分 - >播放机   再次点击 - >再次超过21 - >再减去10分   (现在没有更多的Ace'es价值11) - >玩家再次点击 - >   超过21 - >玩家放松了比赛。

经过长时间的工作,它仍然无法正常工作。它不会减去任何积分。这是代码:

int acees1 = 0;
if (event.getSource() == bHit) {

        random = getRandom();
        CardsPL1.add(getCard(random));
        setPointsPL(random);

        int counter = 0;
        for(int a = 0; a < CardsPL1.size(); a++){

            if (CardsPL1.get(a).contains("A") && getPointsPL() > 21) { 
                counter++;
                //ACE'es get count here
            }
        }

        if (CardsPC.contains("A") && getPointsPC() > 21 && acees1 < counter){
            setPointsPC(13);
            acees1++;
            //Points get subtracted here if points exceed 21 and acees1 
            //counts how many times it subtracted so it shouldn't do it
            //again if there are more "acees1" than "counter" counted
        }
}

1 个答案:

答案 0 :(得分:0)

我认为你总是会重新计算这组卡的积分(在拿到新卡之后)。我的功能如下所示,其中CharSequence s代表卡片顺序为&#39; 2-9&#39;编号,A = ace,其他=面或10。

static public int blackjackPoints(CharSequence s) {
    int sum = 0;
    int aces = 0;
    for (int i=0; i < s.length(); ++i) {
        char c=s.charAt(i);
        if (c >= '2' && c <= '9') sum+=c-'0';
        else if (c=='A') ++aces;
        else sum+=10; //other fig
    }
    if (aces>0) {
        if (sum==0 && aces==2) return 21; //not sure
        sum+=aces;
        while (aces>0 && sum+10<=21) {sum+=10; --aces;}
    }
    return sum;
}

你可以根据你的游戏进行调整。