在Javascript中,如何防止在setTimeout持续时间之内调用其他函数?

问题描述

我正在打井字游戏。

包括了setTimeout函数,以便在计算机开始移动之前,它看起来像是在“思考”,直到计算机实际在板上留下痕迹。

但是,我注意到当计算机在“思考”时,我可以做出自己的举动,从而击败了让对手先做出自己的举动,然后再做出自己的另一举动的目的(如果这样的话)

示例:

(轮到我)用圆圈标记一个盒子
(计算机转向)计算机“思考” ...

  • 我在电脑思考的时候动了手
  • 我的举动在计算机开始移动之前就在板上留下了痕迹,这意味着在setTimeout持续时间内仍会调用一个函数

如何防止这种情况?这可能吗?

setTimeout(compTurn,1000)

解决方法

在您的点击侦听器中,查看播放器何时转弯,请检查是否允许播放器首先播放。在安排compTurn时切换一个布尔值,并在compTurn完成时将其关闭:

// Start of game:
let playerTurn = true;

// ...

// Make computer take a turn:

playerTurn = false;
setTimeout(compTurn,1000);
const compTurn = () => {
  // ...
  playerTurn = true;
};
board.addEventListener('click',(e) => {
  if (!playerTurn) return;
});