【问题标题】:Need assistance with if statement in Blackjack game二十一点游戏中的 if 语句需要帮助
【发布时间】:2013-04-29 18:35:43
【问题描述】:

我正在开发我的第一个黑杰克游戏,但我一直对最简单的事情感到困惑。问题出在我的 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++
  }
}

知道为什么这不能正常工作吗?

【问题讨论】:

    标签: javascript if-statement blackjack


    【解决方案1】:

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

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

    只进行一次一次,而不是每次击中。这意味着您一遍又一遍地获得同一张卡片。

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


    您可能还应该了解如何您正在生成卡片。通常,您会使用一副牌(包含一个或多个“真实”牌组),这样概率会随着卡片被移除而发生变化,就像在现实生活中一样。

    这也将解决使用 * 1000 % 52 时出现的任何倾斜问题,这会倾向于将卡片放在“套牌”的一端。

    【讨论】:

    • 谢谢你,毕竟这是我的问题
    【解决方案2】:

    这是因为您只在函数体之外生成一次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++ 
        }
    }
    

    另外,如果您刚刚开始,您可能想考虑使用Array 来存储您的手牌。当您的新卡可能是第一张卡、第二张卡第三张卡时,if 条件会发生什么?

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 2013-10-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多