Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在用户输入上设置计时器?_Javascript - Fatal编程技术网

Javascript 如何在用户输入上设置计时器?

Javascript 如何在用户输入上设置计时器?,javascript,Javascript,我正在尝试制作一个炸弹拆除迷你游戏,在游戏中,你会得到4种随机颜色,你需要切断正确的电线才能获胜。我现在遇到的问题是如何得到它,所以每个部分都有一个计时器,需要玩家输入要剪切的颜色,如果计时器用完,玩家就会失败 我觉得我使用setTimeout是错误的,我不知道如何让它以我想要的方式工作 const asdf = require('readline').createInterface({ input: process.stdin, output: process.

我正在尝试制作一个炸弹拆除迷你游戏,在游戏中,你会得到4种随机颜色,你需要切断正确的电线才能获胜。我现在遇到的问题是如何得到它,所以每个部分都有一个计时器,需要玩家输入要剪切的颜色,如果计时器用完,玩家就会失败

我觉得我使用setTimeout是错误的,我不知道如何让它以我想要的方式工作

const asdf = require('readline').createInterface({
        input: process.stdin,
        output: process.stdout
});

asdf.question('What will you cut?', wire => { //First part where you are given 4 colors
    setTimeout(asdf.question, 7000, console.log("asdf"))
    if (!allowedColors.includes(wire)) {
        console.log("You need to pick one of the 4 colors!");
        return;
    }
    console.log(`You cut ${wire}!`);
    asdf.close();
    ruleEnforcer(wire, fourRandomColors, f);

})

你有一些东西需要调整:

  • 您正在调用
    question
    的回调函数中的
    setTimeout
    ,因此当用户键入颜色并按enter键时,计时器将启动

  • 按照您使用它的方式,
    setTimeout
    将在7000ms后调用函数
    asdf.question
    ,并将
    console.log(“asdf”)
    作为被调用函数的参数传递。你应该再看一次

  • setTimeout
    是异步的,因此如果你想在计时器用完时停止游戏,你的整个游戏也应该是异步的

  • 这个过程的一个非常基本的实现(没有多个问题,也没有实际检查输入的颜色是否正确)可能如下所示

    const readline = require('readline').createInterface({
            input: process.stdin,
            output: process.stdout
    });
    
    // start game and react to callback
    startGame((win) => {
      readline.close()
      if(win) {
        console.log('you won')
      } else {
        console.log('you lost')
      }
    })
    
    function startGame(callback) {
    
      // set timer when game starts, if it runs out player loses -> call callback false
      let timer = setTimeout(() => {
        callback(false)
      }, 7000);
    
      readline.question('What will you cut?', wire => {
       // stop timer from running when player enters a color
       clearTimeout(timer);
    
       // wire is correct and player won the game -> call callback true
       callback(true)
      })
    }
    
    您是否尝试在7秒后记录“asdf”?如果是这样,它的
    setTimeout(console.log(“asdf”),7000)