有没有一种优雅的方式来应对二十一点的王牌?

Joh*_*sch 14 java blackjack

我的孩子有一个家庭作业,用Java编写Blackjack.我帮助了他一点但是大部分时间他都是自己做的,而且实际上打得很好.他甚至发现了一个错误,我没有看到它是如何计算手值的.但是,有一个他没有处理过的障碍,我能想到的每个解决方案都非常复杂,超出了他能够轻松编写他仍然基本的Java技能的能力.

王牌.事实上,不只是一个Ace,其中有四个,你可以用一只手拿到所有四个.当有一个或多个A时,你如何优雅地计算一手牌的价值,每个A值可能是一个或十一个.我觉得应该有一个优雅的算法,但我没有看到它.当然,部分原因可能就是我累了,但也许你可以提供帮助.

Unk*_*own 24

只需将每个ace视为11.然后当值超过21时,从手中每个ace的总数中减去10.

  • 令人惊讶的是错误的答案如何被投票到顶部.正如后面的正确答案所指出的那样,只有一个ace被计为11,所以简单地将每个ace计为1更有效率,然后,如果你找到一个ace,总数<12,加10.不需要跟踪多少个A,只需要一个额外的添加.如果添加了10,则可以设置"软"标记,如果需要跟踪总计是硬还是软. (12认同)
  • 你不一定要看多次.只要你第一次看,就保持一个ace数. (3认同)
  • 漂亮而优雅,除了不得不在卡片上看多次.+1 (2认同)

Mil*_*ous 7

11点只能使用1个ace.因此,除最后一个ace之外的所有ace计算为1,如果有10个或更少的点,则最后一个ace计为10.


elu*_*ark 5

只有1个Ace算作11.

因此,将每个Ace处理为11的另一种方法是将每个Ace视为1.然后将总数加10(无论手头是否携带),并将其保存在单独的"高"变量(值+ 10)中.还要创建~camp的布尔值:如果(任何)ace出现,则为true.

因此,在检查经销商的分数时; 检查球员的牌是否有(任何)Ace,在这种情况下你(可以)使用"高"值,否则(没有Ace)使用"低"值.

那样King + 9 + Ace(可能是坏例子)将是〜低:20&high:30&ace:true - 有了这些信息,你可以检查30 - 10是否会"赢得比赛".所以,King + 5 + 5(低:20高:30 ace:false)将不会使用它的高值30.

我正在使用这种方法所以我知道什么时候显示alt.屏幕上的Ace得分; 像3/13(Ace + 2),使用相同的ace:true | false布尔我已经拥有.这肯定和第一个给出的答案相同,但这对我来说更有意义:)