Javascript 如何在Simon游戏中重新运行函数?

Javascript 如何在Simon游戏中重新运行函数?,javascript,Javascript,我很有信心,我有我的西蒙游戏背后的基本逻辑。然而,我在进入下一轮时遇到了一些问题。我曾尝试使用if语句和while循环,但两者都不起作用。我应该如何进行 简要说明:gameColors是一个数组,它包含所有随机颜色,这些颜色将在几轮中以不断增加的数量播放。可变sequencelength用于增加用户输入函数中使用的计数器,而可变sequencelength与此相反,从gameColors.length中减去即可获得sequencelength random sequence显示颜色的随机序列,直

我很有信心,我有我的西蒙游戏背后的基本逻辑。然而,我在进入下一轮时遇到了一些问题。我曾尝试使用if语句和while循环,但两者都不起作用。我应该如何进行

简要说明:gameColors是一个数组,它包含所有随机颜色,这些颜色将在几轮中以不断增加的数量播放。可变sequencelength用于增加用户输入函数中使用的计数器,而可变sequencelength与此相反,从gameColors.length中减去即可获得sequencelength

random sequence显示颜色的随机序列,直至sequenceLength值

JS:

if(sequenceLengthInv>=0){
//让游戏随机播放颜色序列
对于(var i=0;i
尝试对循环使用
,并使用
抛出
/
拒绝
&
捕获
(或
中断
)。此外,
Promise
s在这里可能很有用

async function playGame(availableColors, minColors, maxColors) {
    await wait(333);

    var colors = Array.from({ length: maxColors }, () => randomChoice(availableColors));

    try {
        for (var i = minColors; i <= maxColors; i++) {
            console.log(colors.slice(0, i));
            await playRound(colors.slice(0, i));
        }

        alert('You win!');
    } catch (e) {
        if(e !== undefined) {
            throw e;
        }

        alert('You lose!');
    }
}
异步函数游戏(可用颜色、最小颜色、最大颜色){
等待等待(333);
var colors=Array.from({length:maxColors},()=>randomChoice(availableColors));
试一试{

对于(var i=minColors;i)您的尝试是什么?我试图运行do…while循环,但它仍然给我带来问题。如果我执行while循环,它会使浏览器崩溃。我会执行类似于我的randomSequence函数的操作吗?这是供参考的。
function randomSequence(){setTimeout(colorSequenceOn,timeInterval,i);setTimeout(colorSequenceOff,timeInterval+333,i);timeInterval+=666;}
此外,这里是指向Github repo的链接。当用户猜错时,
userInput
做什么?这里是userInput函数供参考:
function userInput(){color[i]。addEventListener('click',function(e){var result=this.getAttribute('class');if(result.includes(gameColors[counter])&&counter
目前,我只有一个console.log,说明它不正确,但如果他们单击次数超过计数器(如果序列闪烁5种颜色,则用户单击5种颜色)所以当我这么做的时候,simon游戏在一开始应该是5的时候,随机显示了超过10种颜色。你是指
gameColors
的长度,
color
的长度还是显示了多少种颜色?显示了多少种颜色。
gameColors
数组的长度是10种,但闪烁的颜色超过10种在屏幕上。@ShaneHarper我明白你的意思。我正在看。@ShaneHarper这里是我尝试的地方:。我想你可能会想使用回调链接而不是while循环。
async function playGame(availableColors, minColors, maxColors) {
    await wait(333);

    var colors = Array.from({ length: maxColors }, () => randomChoice(availableColors));

    try {
        for (var i = minColors; i <= maxColors; i++) {
            console.log(colors.slice(0, i));
            await playRound(colors.slice(0, i));
        }

        alert('You win!');
    } catch (e) {
        if(e !== undefined) {
            throw e;
        }

        alert('You lose!');
    }
}