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();
}
}
}
});
});
다음과 같이 제안합니다.
따라서 코드는 다음과 같습니다.
$(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] 삭제
몇 마디 만하겠습니다