我正在制作我的第一个黑杰克游戏,我一直对最简单的东西感到困惑。问题出在我的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++
}
}
知道为什么这样做不对吗?
答案 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
条件会发生什么?