我用Javascript创建了一个Tic-Tac-Toe游戏。现场演示here
代码运行良好,但有一个小错误。当我点击画布时,图像被绘制出来,一切工作正常。但当我在画布上单击时,我调用superclick()函数,该函数采用尚未单击的随机路径,并在设置位置绘制设置图片(O或X)。

function superclick() {
    var filt = paths.filter(function(x) {
        return x.avaible == true;

    });
    var rand = filt[getRandomIntInclusive(0, paths.length - 1)];

    /*var evt = new MouseEvent("click", {
        view: window,
        bubbles: true,
        cancelable: true,
        clientX: (canvas.offsetLeft + rand.x)+5,
        clientY: (canvas.offsetTop + rand.y)+5

    });
    canvas.dispatchEvent(evt)*/
    ctx.drawImage(turn[turns],rand.x,+ rand.y);
    score[turns] += rand.id;
    rand.avaible = false;
     turns = turns == "x" ? "o" : "x";

}

这里的问题是,这个函数有时被调用,有时不被调用。当它没有被调用时,它抛出一个错误“无法读取未定义的属性'x'”,我不明白为什么。当我试图设置随机路径x时,它起作用。我错过什么了吗?

最佳答案

你得到了一个介于0和paths.length之间的随机数(所以是0和8),但是你使用这个索引来访问“filt[],这只是那些没有填充的方块。所以当只剩下4个元素时,您可以尝试获取“filt[]的第8个元素。
尝试

var rand = filt[getRandomIntInclusive(0, filt.length - 1)];

这将使您获取的最大随机数与剩余空间数成比例。

09-25 18:19