需要帮助在二十一点游戏中的if语句

Need assistance with if statement in Blackjack game

本文关键字:if 语句 游戏 十一点 帮助 二十一      更新时间:2023-09-26

我正在开发我的第一个二十一点游戏,我一直对最简单的事情感到困惑。问题出在我的 if 语句中,我这样说:

if ( cardsinhand < 7 && newcard != firstcard && newcard != secondcard )

当我按下"打我"按钮时,它会一遍又一遍地发给我同一张牌。这是我的函数。我需要 if 语句中的信息为真然后执行,否则就不执行。

cardsinhand = 2
firstcard = Math.floor(Math.random() * 1000 % 52)
secondcard = Math.floor(Math.random() * 1000 % 52)
newcard = Math.floor(Math.random() * 1000 % 52)
function hitCard()
{
  if ( cardsinhand < 7 && newcard != firstcard && newcard != secondcard )
  {
    document.images[cardsinhand].src = "http://www.biogow/images/cards/gbCard" + newcard + ".gif"
    cardsinhand++
  }
}

知道为什么这不起作用吗?

这实际上不是您的if语句本身的问题。看来:

newcard = Math.floor(Math.random() * 1000 % 52)

一次完成,而不是每次你击中。这意味着您将一遍又一遍地获得同一张卡。

您可能应该在每次执行命中操作时重新计算一张新牌。


您可能还应该研究如何生成卡片。通常,你会使用一副牌(包含一副或多副"真实"套牌(,这样概率就会随着牌的移除而改变,就像在现实生活中一样。

这也将解决使用* 1000 % 52的任何倾斜问题,这些倾向于在"套牌"的一端更喜欢牌。

这是因为你只在函数体之外生成一次newcard。你想要的是每次调用函数时生成新卡,所以这行: newcard = Math.floor(Math.random() * 1000 % 52)应该在函数内部,如下所示:

cardsinhand = 2
firstcard = Math.floor(Math.random() * 1000 % 52)
secondcard = Math.floor(Math.random() * 1000 % 52)

function hitCard()
{
    var newcard = Math.floor(Math.random() * 1000 % 52)
    if ( cardsinhand < 7 && newcard != firstcard && newcard != secondcard )
    {
        document.images[cardsinhand].src = "http://www.biogow/images/cards/gbCard"+newcard+".gif"
         cardsinhand++ 
    }
}

同样值得一提的是,如果您刚刚开始,您可能需要考虑使用数组来存储手牌。当你的新卡可能是第一张卡、第二张卡第三张卡时,if条件会发生什么?