1

我正在尝试用 jQuery 制作卡片记忆游戏,但我有一个小问题。我想要它,所以当您单击卡片时,每次启动程序时图像都是随机的。我也在尝试使一张卡的图像与另一张随机卡共享。现在我有卡片,但是当随机选择图像时,它会应用于所有卡片。到目前为止,这是我的 JavaScript。如果有人可以在这里帮助我,那就太好了。

var score = 0;
var images = ["images are here"];
Image = images[Math.floor(Math.random() * images.length)];
$("#score").text("Number of turns: " + score);

$(".cards").mouseenter(function () {
    $(this).animate({
       height: "+=10px",
        width: "+=10px"
    });
});
$(".cards").mouseleave(function () {
    $(this).animate({
        height: "-=10px",
        width: "-=10px"
    });
});

$(".cards").click(function () {
    score++;
    $("#score").text("Number of turns: " + score);

    $(this).css({
        "background-image": 'url(' + Image + ')'
    });
});

编辑:这是html:

<body>
     <h5>card game</h5>

    <div id="card1" class="cards"></div>
    <div id="card2" class="cards"></div>
    <div id="card3" class="cards"></div>
    <div id="card4" class="cards"></div>
    <div id="card5" class="cards"></div>
    <div id="card6" class="cards"></div>
    <div id="score"></div>
</body>
4

2 回答 2

0

我盯着这个看了好久才弄明白。这是您的问题:图像仅设置一次。Image每次用户点击时都需要重新分配。这是您的代码的外观:

var score = 0;
var images = ["images are here"];
$("#score").text("Number of turns: " + score);

$(".cards").mouseenter(function () {
    $(this).animate({
       height: "+=10px",
        width: "+=10px"
    });
});
$(".cards").mouseleave(function () {
    $(this).animate({
        height: "-=10px",
        width: "-=10px"
    });
});

$(".cards").click(function () {
    score++;
    $("#score").text("Number of turns: " + score);

    Image = images[Math.floor(Math.random() * images.length)];
    $(this).css({
        "background-image": 'url(' + Image + ')'
    });
});

注意:您用于随机化的方法并不能保证同一张卡片不会弹出两次。

于 2013-08-22T18:37:08.910 回答
0

如果我正确理解你的目标,你不想在点击卡片的时候随机选择卡片,否则你不能保证每张卡片只会出现两次,更不用说在玩游戏时改变。相反,你想在一开始就洗牌一次。这是编码洗牌的一种方法:

var N = 10; // number of images
var indices = new Array(2*N);
for( var i=0 ; i<2*N ; ++i ) indices[i] = i>>1; // 0,0,1,1,2,2,...
// Do a Fisher-Yates shuffle
for( var i=2*N-1 ; 1<=i ; --i )
{
  var j = Math.floor( Math.random() * (i+1) ); // random 0 <= j <= i
  if( i == j ) continue;
  // Swap i and j
  indices[i] ^= indices[j];
  indices[j] ^= indices[i];
  indices[i] ^= indices[j];
}

将 N 更改为不同图像的数量。那么你的牌组中的牌张数为 2*N。

运行上述代码后,以 images[indices[0]]、images[indices[1]]、images[indices[2]]、...、images[indices[2*N-1]] 的形式访问洗牌后的牌组. 每个图像将以随机顺序在此序列中精确显示两次。

希望有帮助。

于 2013-08-22T18:59:59.057 回答