我用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)];
这将使您获取的最大随机数与剩余空间数成比例。