루프 내에서 특정 시간 후에 함수 호출

인간 사이보그 관계

Simon ( https://en.wikipedia.org/wiki/Simon_(game) ) 이라는 메모리 게임을 만들려고합니다.

나는 모든 것을 끝냈다. 유일한 문제는 전체 시퀀스가 ​​표시되어야 할 때마다 (플레이어가 잘못된 버튼을 누르거나 새 시퀀스가 ​​추가 된 경우) 모든 사운드가 동시에 재생되고 버튼이 분할 된 경우에만 깜박입니다. 둘째. 하나의 버튼이 먼저 표시되고 해당 사운드가 재생되고 다음 버튼으로 진행되도록하려면 어떻게해야합니까? for 루프 내부에서 setTimeout을 설정하려고 시도했지만 'btn'이 정의되지 않았다는 오류가 발생합니다.

내 코드는 다음과 같습니다.

$(document).ready(function(){
var button = $(".buttons");
var redbtn = $("#red");
var bluebtn = $("#blue");
var greenbtn = $("#green");
var yellowbtn = $("#yellow");
var allButtons = [redbtn, bluebtn, greenbtn, yellowbtn];
var sequence, playerTurn, wins, strict, seqPosition;

startGame();

function startGame() {
    console.log("Starting game...");
    strict = confirm("Would you like to play the difficult mode?");
    sequence = [];
    playerTurn = false;
    wins = 0;
    computerTurn();
}

function computerTurn() {
    seqPosition = 0; // position of player in sequence
    $("#count").html(wins);
    console.log("It's the computer's turn");
    if (wins === 20) {
        alert("You win!");
        startGame();
    } else {
        sequence.push(Math.floor(Math.random() * 4));
        console.log("Picked new button");
        playSequence();
    }
}

function playSequence() {
    setTimeout(function(){
        console.log("Playing the sequence... " + sequence.toString());
        playSound(allButtons[sequence[0]]);
        var progress = false;
        for (var i = 1; i < sequence.length; i++){
            console.log(i);
            playSound(allButtons[sequence[i]])
        }
        playerTurn = true;
    }, 1000)
}

function playSound(btn) {
    btn.toggleClass("act");
    console.log("Playing the sound...");
    var link;
    switch (parseInt(btn.attr("val"))) {
            case 0:
                link = "https://s3.amazonaws.com/freecodecamp/simonSound1.mp3";
                break;
            case 1:
                link = "https://s3.amazonaws.com/freecodecamp/simonSound2.mp3";
                break;
            case 2:
                link = "https://s3.amazonaws.com/freecodecamp/simonSound3.mp3";
                break;
            case 3:
                link = "https://s3.amazonaws.com/freecodecamp/simonSound4.mp3";
                break;
    }
    var audio = new Audio(link);
    audio.play();
    setTimeout(function(){
        btn.toggleClass("act")
    }, 700);
}

button.on("click", function(){
    if (playerTurn) {
        var btnVal = parseInt($(this).attr("val"));
        if (btnVal === sequence[seqPosition]) {

            console.log("Correct button pressed!");
            playSound(allButtons[sequence[seqPosition]]);
            seqPosition++;
            console.log("seq position is " + seqPosition);
            setTimeout(function(){
                if (seqPosition === sequence.length) {
                    playerTurn = false;
                    wins++;
                    computerTurn();
                }
            }, 1000);

        } else {
            playerTurn = false;
            if (strict) {
                alert("You lose!");
                startGame();
            } else {
                console.log("Incorrect button pressed!");
                seqPosition = 0;

                var audio = new Audio("horn.mp3");
                audio.play();
                playSequence();
            }
        }
    }
});

});

바이올린 : https://jsfiddle.net/otep6yx0/

gaetanoM

다음과 같이 제안합니다.

따라서 코드는 다음과 같습니다.

$(document).ready(function () {
  var button = $(".buttons");
  var redbtn = $("#red");
  var bluebtn = $("#blue");
  var greenbtn = $("#green");
  var yellowbtn = $("#yellow");
  var allButtons = [redbtn, bluebtn, greenbtn, yellowbtn];
  var sequence, playerTurn, wins, strict, seqPosition;

  startGame();

  function startGame() {
    console.log("Starting game...");
    strict = confirm("Would you like to play the difficult mode?");
    sequence = [];
    playerTurn = false;
    wins = 0;
    computerTurn();
  }

  function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
      var j = Math.floor(Math.random() * (i + 1));
      var temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
    return array;
  }

  function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
      if ((new Date().getTime() - start) > milliseconds) {
        break;
      }
    }
  }

  function computerTurn() {
    seqPosition = 0; // position of player in sequence
    $("#count").html(wins);
    console.log("It's the computer's turn");
    if (wins === 20) {
      alert("You win!");
      startGame();
    } else {
      sequence = shuffleArray([0, 1, 2, 3]);
      console.log("Picked new button");
      playSequence();
    }
  }

  function playSequence() {
    for (var i = 0; i < sequence.length; i++) {
      (function (i) {
        setTimeout(function () {
          console.log("Playing the sequence... " + sequence.toString());
          playSound(allButtons[sequence[0]]);
          var progress = false;
          console.log(i);
          playSound(allButtons[sequence[i]]);
          if ((i + 1) == sequence.length) {
            setTimeout(function () {
              $(".buttons.act").removeClass('act');
              playerTurn = true;
            }, 1000);
          }
        }, i * 1000);
      })(i);
    }
  }

  function playSound(btn) {
    $(".buttons.act").removeClass('act');
    btn.toggleClass("act").show();
    console.log("Playing the sound...");
    var link;
    switch (parseInt(btn.attr("val"))) {
      case 0:
        link = "https://s3.amazonaws.com/freecodecamp/simonSound1.mp3";
        break;
      case 1:
        link = "https://s3.amazonaws.com/freecodecamp/simonSound2.mp3";
        break;
      case 2:
        link = "https://s3.amazonaws.com/freecodecamp/simonSound3.mp3";
        break;
      case 3:
        link = "https://s3.amazonaws.com/freecodecamp/simonSound4.mp3";
        break;
    }
    var audio = new Audio(link);
    audio.play();
  }

  button.on("click", function (e) {
    if (playerTurn) {
      var btnVal = parseInt($(this).attr("val"));
      if (btnVal === sequence[seqPosition]) {
        console.log("Correct button pressed!");
        playSound(allButtons[sequence[seqPosition]]);
        seqPosition++;
        console.log("seq position is " + seqPosition);
        if (seqPosition === sequence.length) {
          playerTurn = false;
          wins++;
          computerTurn();
        }
      } else {
        playerTurn = false;
        if (strict) {
          alert("You lose!");
          startGame();
        } else {
          console.log("Incorrect button pressed!");
          seqPosition = 0;
          var audio = new Audio("horn.mp3");
          audio.play();
          playSequence();
        }
      }
    }
  });
});
h1 {
  font-size: 3em;
}

.buttons {
  cursor: pointer;
  height: 200px;
  width: 200px;
  display: inline-block;
  vertical-align: middle;
}

.act {
  background-color: black !important;
}

#red {
  background-color: red;
}

#red:active {
  background-color: black;
}

#blue {
  background-color: blue;
}

#blue:active {
  background-color: black;
}

#green {
  background-color: green;
}

#green:active {
  background-color: black;
}

#yellow {
  background-color: yellow;
}

#yellow:active {
  background-color: black;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>


<div class="container-fluid">
    <h1>Simon Game</h1>

    <div class="buttons" id="red" val="0"></div>
    <div class="buttons" id="blue" val="1"></div>
    <div class="buttons" id="green" val="2"></div>
    <div class="buttons" id="yellow" val="3"></div>

    <div class="row">
        <div class="col-md-5"></div>
        <div class="col-md-1"><h4>Count: <span id="count">0</span></h4></div>
    </div>
</div>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ForEach 루프 내에서 함수 호출

분류에서Dev

루프 내에서 함수 호출

분류에서Dev

일정 시간 후에 함수 호출을 죽이는 방법

분류에서Dev

Ionic Application에서 특정 시간에 매일 하나의 함수 호출

분류에서Dev

API 호출 수 및 시간 간격에 대한 루프

분류에서Dev

Javascript는 for 루프 내에서 시간 초과 함수를 설정합니다.

분류에서Dev

WPF C #의 For 루프에서 사용자 정의 함수 호출

분류에서Dev

setInterval 내에서 함수를 호출 할 적절한 시간 지정

분류에서Dev

for 루프에서 직접 함수 호출

분류에서Dev

루프 헤더에서 함수 호출

분류에서Dev

Django에서 매일 고정 된 시간에 함수 호출

분류에서Dev

PHP의 시스템 함수에서 특정 Python 버전 호출

분류에서Dev

루프 내에서 함수 호출, "정의되지 않음은 함수가 아닙니다."

분류에서Dev

루프 내에서 x 초 후에 호출되도록 publishProgress ()를 어떻게 지정할 수 있습니까?

분류에서Dev

for 루프 C ++ 내에서 Void 함수 호출

분류에서Dev

루프 내에서 조건부 및 함수 호출 방지

분류에서Dev

while 루프 내에서 40 초마다 함수 호출

분류에서Dev

ForEach 루프 내부에서 호출 된 함수에서 PowerShell 오류 세부 정보를 얻는 방법

분류에서Dev

특정 시간 (초) 후에 js URL 호출

분류에서Dev

for 루프에 함수 호출 배치

분류에서Dev

파이프 내에서 함수 호출

분류에서Dev

동일한 루프 내에서 호출되는 함수의 콜백 함수에서 사용할 for 루프의 플래그 설정

분류에서Dev

함수 호출 후 종료되는 루프에 대한 BASH

분류에서Dev

루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

분류에서Dev

VTune에 표시되지 않는 특정 함수 호출

분류에서Dev

루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

분류에서Dev

내 함수 수정에서 2 개의 중첩 while 루프의 시간 복잡도가 o (N)입니까?

분류에서Dev

for 루프 안에 for 루프가 포함 된 함수를 호출하면 O (n ^ 2) 시간 또는 O (n)으로 간주됩니까?

Related 관련 기사

  1. 1

    ForEach 루프 내에서 함수 호출

  2. 2

    루프 내에서 함수 호출

  3. 3

    일정 시간 후에 함수 호출을 죽이는 방법

  4. 4

    Ionic Application에서 특정 시간에 매일 하나의 함수 호출

  5. 5

    API 호출 수 및 시간 간격에 대한 루프

  6. 6

    Javascript는 for 루프 내에서 시간 초과 함수를 설정합니다.

  7. 7

    WPF C #의 For 루프에서 사용자 정의 함수 호출

  8. 8

    setInterval 내에서 함수를 호출 할 적절한 시간 지정

  9. 9

    for 루프에서 직접 함수 호출

  10. 10

    루프 헤더에서 함수 호출

  11. 11

    Django에서 매일 고정 된 시간에 함수 호출

  12. 12

    PHP의 시스템 함수에서 특정 Python 버전 호출

  13. 13

    루프 내에서 함수 호출, "정의되지 않음은 함수가 아닙니다."

  14. 14

    루프 내에서 x 초 후에 호출되도록 publishProgress ()를 어떻게 지정할 수 있습니까?

  15. 15

    for 루프 C ++ 내에서 Void 함수 호출

  16. 16

    루프 내에서 조건부 및 함수 호출 방지

  17. 17

    while 루프 내에서 40 초마다 함수 호출

  18. 18

    ForEach 루프 내부에서 호출 된 함수에서 PowerShell 오류 세부 정보를 얻는 방법

  19. 19

    특정 시간 (초) 후에 js URL 호출

  20. 20

    for 루프에 함수 호출 배치

  21. 21

    파이프 내에서 함수 호출

  22. 22

    동일한 루프 내에서 호출되는 함수의 콜백 함수에서 사용할 for 루프의 플래그 설정

  23. 23

    함수 호출 후 종료되는 루프에 대한 BASH

  24. 24

    루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

  25. 25

    VTune에 표시되지 않는 특정 함수 호출

  26. 26

    루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

  27. 27

    다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

  28. 28

    내 함수 수정에서 2 개의 중첩 while 루프의 시간 복잡도가 o (N)입니까?

  29. 29

    for 루프 안에 for 루프가 포함 된 함수를 호출하면 O (n ^ 2) 시간 또는 O (n)으로 간주됩니까?

뜨겁다태그

보관