0

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

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

4

2 回答 2

4

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

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

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

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


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

这也将解决使用* 1000 % 52倾向于在“甲板”一端使用卡片的任何倾斜问题。

于 2013-05-06T03:02:59.610 回答
1

这是因为您只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当您的新卡可能是第一张卡、第二张卡第三张卡时,这种情况会发生什么?

于 2013-05-06T03:05:26.117 回答