在Blackjack游戏中需要if语句的帮助

时间:2013-05-06 02:59:51

标签: javascript if-statement blackjack

我正在制作我的第一个黑杰克游戏,我一直对最简单的东西感到困惑。问题出在我的if语句中我这样说:

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

当我按下按下按钮时,它会一遍又一遍地给我同一张卡片。这是我的功能。我需要if语句中的信息为true然后执行,否则只是不执行。

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++
  }
}

知道为什么这样做不对吗?

2 个答案:

答案 0 :(得分:4)

if语句本身并不是问题。看来这个:

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

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

每次执行点击操作时,您都应该重新计算新卡片。


您可能还应该查看 您生成卡片的方式。通常情况下,你会使用一个牌组(包含一个或多个“真实”牌组),以便在牌被移除时概率发生变化,就像在现实生活中一样。

这也可以解决使用* 1000 % 52的任何偏斜问题,而{{1}}倾向于更喜欢“牌组”一端的牌。

答案 1 :(得分: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++ 
    }
}

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