当我选择何时在BlackJack游戏中抽牌时,我希望我的经销商更加“聪明”

时间:2012-12-07 06:49:27

标签: java logic artificial-intelligence complexity-theory blackjack

想想BlackJack游戏......我创建了一种方法,可以简单计算计算机是否应该绘制卡片并且只是对规则进行硬编码。我想让这更加“聪明”,因此即使对于创作者(我)来说,让游戏变得更加难以预测。

我可以在这里添加什么?如何让经销商在没有硬编码的情况下进行抽奖?

// Compute if computer should draw a hand or not depending on hand value of player.
// Also, computer may take higher risk if player has reached BLACKJACK.
private static Deck dealerDraw(Deck deck, Hand player, Hand player2, Hand dealer)
{
    if(player.getHandTotal() <= BLACKJACK)
    {
        // Dealer takes a precaution and only draws 
        // if hand total is less than or equal to 15.
        while(dealer.getHandTotal() <= 15 && 
                (dealer.getHandTotal() <= player.getHandTotal() || 
                dealer.getHandTotal() <= player2.getHandTotal()))
            deck = drawFromDeck(deck, dealer);

        // Player has reached BLACKJACK!
        // There's no or little chance to win, 
        // dealer risks and draws even if total is high.
        if (player.getHandTotal() == BLACKJACK || 
                player2.getHandTotal() == BLACKJACK)
            while(dealer.getHandTotal() < BLACKJACK && 
                    dealer.getHandTotal() != BLACKJACK)
                deck = drawFromDeck(deck, dealer);
    } // end if()

    return deck;
} // dealerDraw()

2 个答案:

答案 0 :(得分:4)

在你花大量时间写一个二十一点经销商AI之前,你可能会考虑the dealer doesn't get to make any choices,因为统计上最好的游戏并不真正完全取决于玩家所做的事情。

你可能会选择一个更有趣的游戏来编写真正的AI。

答案 1 :(得分:3)

要实现AI,我认为您不应该尝试将非AI代码修改为AI实现。相反,基于AI的计算机播放器大多需要完全不同的设计,因此我将重新设计整个“播放器”代码。我会去machine learning。随着机器学习,它可以学习,因为它越来越多,并在一段时间内(取决于算法及其实现)它可以让我感到惊讶。 例如,AI可以记录其所有移动/游戏(在数据库中),并根据成功移动的统计数据,在下次出现类似情况时得出决定移动的结论。