0

だから私はJavascriptを使って古いメモリベースのゲームSimonをエミュレートしようとしています.

私は現在、「サイモン」に「再生」するランダム化されたコマンドを生成させようとしています(divを点灯させ、オーディオを再生します)。コマンドのリスト/配列を入力として受け取る関数を作成しました。Simon は、各コマンドの再生の間に 1 秒間隔でsetInterval.

function go_simon(simon_array) {

    var counter = 0;
    var interval = setInterval( function() {

        var current_val = parseInt(simon_array[counter]);
        switch (current_val) {
            case 1:
                TL_lightOn();
                var interval_1 = setTimeout( function() { TL_lightOff() }, 600);
                break;
            case 2:
                BL_lightOn();
                var interval_2 = setTimeout( function() { BL_lightOff() }, 600);
                break;
            case 3:
                BR_lightOn();
                var interval_3 = setTimeout( function() { BR_lightOff() }, 600);
                break;
            case 4:
                TR_lightOn();
                var interval_4 = setTimeout( function() { TR_lightOff() }, 600);
                break;
        }
        counter++;
        if (counter >= simon_array.length) 
            clearInterval(interval);

    }, 1000);
}

この関数do-whileを、メインのゲーム ループとして機能するループ内に配置しました。このループでは、ランダム コマンドが生成され、進行中のコマンド リストに追加され、現在のコマンド リストを再生する「go-simon」関数が呼び出されます。 .

各ループ反復が次のもので構成されることを意図していました。

 •Generate random command (1-4)
 •Append to running array of commands
 •Playback array of commands over time duration - # of commands * seconds

代わりに、loop... は go_simon 関数を何秒も実行せずにループします。alert()for each 反復を使用して、ループを 10 反復に制限しました。これにより、アラートが立て続けに 10 回呼び出され、最後に go_simon() が 1 回だけ呼び出され、10 個のコマンドで満たされた配列が再生されます。

do {
    // create int 1-4 and append to global array
    generate_value();

    alert(simon_array);
    go_simon(simon_array);

    if (simon_array.length >= 10) {
            alert(simon_array);
        condition = false;
    }
} while (condition); 

このdo-whileループを取得して、反復ごとに go_simon 関数を適切に実行する方法について何か提案はありますか?

どうもありがとう

4

1 に答える 1