gpt4 book ai didi

javascript - 如何将倒数计时器添加到我的页面

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:55 26 4
gpt4 key购买 nike

我目前正在使用 jQuery 和 JavaScript 开发一个 Simon says 类型的游戏。

我已经在 Github 上链接了一个完整的游戏副本

Github下载解压完整游戏https://github.com/Jamiex304/Simon_Says_Game_Demo(现已停用)

我遇到了一个问题,我想添加一个玩家可以看到的计时器。

目前,关卡会一直持续到用户点击序列中的错误按钮为止。

游戏的一些基本信息:
用户将看到一个随机序列,每个级别都会添加一个新序列以及一个额外的移动。每次用户输入正确的序列时,他们都会进入下一个级别所有信息都可以在附带的带有注释的 JavaScript 中找到

我需要帮助添加的内容

我只想添加一个计时器,当用户单击开始按钮时,它会在 10 秒后开始计时。
每次输入正确的顺序时,计时器都会再次启动当他们达到 5 个正确的序列时,计时器会额外增加 5 秒。

我附上了处理游戏事件的 JavaScript,并且有一个指向完整站点的链接。

任何帮助都会很棒。

JavaScript

var game={ //game object
level: 1, //current level
turn: 0, //current turn
difficulty: 1, // user difficulty
score: 0, //current score
active: false, //whether a turn is active or not
handler: false, // whether the click and sound handlers are active
shape: '.shape', // cached string for the pad class
genSequence: [], //array containing the generated/randomized pads
plaSequence: [], //array containing the users pad selections

init: function(){ //initialises the game
if(this.handler === false){ //checks to see if handlers are already active
this.initPadHandler(); //if not activate them
}
this.newGame(); //reset the game defaults

},

initPadHandler: function(){

that=this;

$('.pad').on('mouseup',function(){

if(that.active===true){

var pad=parseInt($(this).data('pad'),10);

that.flash($(this),1,300, pad);

that.logPlayerSequence(pad);

}
});

this.handler=true;

},

newGame: function(){ //resets the game and generates a starts a new level

this.level=1;
this.score=0;
this.newLevel();
this.displayLevel();
this.displayScore();

},

newLevel: function(){

this.genSequence.length=0;
this.plaSequence.length=0;
this.pos=0;
this.turn=0;
this.active=true;

this.randomizePad(this.level); //randomize pad with the correct amount of numbers for this level
this.displaySequence(); //show the user the sequence

},

flash: function(element, times, speed, pad){ //function to make the pads appear to flash

var that = this; //cache this

if(times > 0){ //make sure we are supposed to flash
that.playSound(pad); //play the corresponding pad sound
element.stop().animate({opacity: '1'}, { //animate the element to appear to flash
duration: 50,
complete: function(){
element.stop().animate({opacity: '0.6'}, 200);
}
}); //end animation

}

if (times > 0) { //call the flash function again until done the correct amount of times
setTimeout(function () {
that.flash(element, times, speed, pad);
}, speed);
times -= 1; //times - 1 for each time it's called
}
},

playSound: function(clip){ //plays the sound that corresponds to the pad chosen


var sound= $('.sound'+clip)[0];
console.log(sound);
console.log($('.sound'+clip));
sound.currentTime=0; //resets audio position to the start of the clip
sound.play(); //play the sound


},

randomizePad: function(passes){ //generate random numbers and push them to the generated number array iterations determined by current level

for(i=0;i<passes;i++){

this.genSequence.push(Math.floor(Math.random() * 4) + 1);
}
},

logPlayerSequence: function(pad){ //log the player selected pad to user array and call the checker function

this.plaSequence.push(pad);
this.checkSequence(pad);


},

checkSequence: function(pad){ //checker function to test if the pad the user pressed was next in the sequence

that=this;

if(pad !== this.genSequence[this.turn]){ //if not correct

this.incorrectSequence();

}else{ //if correct
this.keepScore(); //update the score
this.turn++; //incrememnt the turn

}

if(this.turn === this.genSequence.length){ //if completed the whole sequence

this.level++; //increment level, display it, disable the pads wait 1 second and then reset the game
this.displayLevel();
this.active=false;
setTimeout(function(){
that.newLevel();
},1000);
}
},

displaySequence: function(){ //display the generated sequence to the user

var that=this;

$.each(this.genSequence, function(index, val) { //iterate over each value in the generated array

setTimeout(function(){

that.flash($(that.shape+val),1,300,val);

},500*index*that.difficulty); // multiply timeout by how many items in the array so that they play sequentially and multiply by the difficulty modifier
});
},

displayLevel: function(){ //just display the current level on screen

$('.level h2').text('Level: '+this.level);

},

displayScore: function(){ //display current score on screen
$('.score h2').text('Score: '+this.score);
},

keepScore: function(){ //keep the score

var multiplier=0;

switch(this.difficulty) //choose points modifier based on difficulty
{
case '2':
multiplier=1;
break;

case '1':
multiplier=2;
break;

case '0.5':
multiplier = 3;
break;

case '0.25':
multiplier = 4;
break;
}

this.score += (1 * multiplier); //work out the score

this.displayScore(); //display score on screen
},

incorrectSequence: function(){ //if user makes a mistake

var corPad = this.genSequence[this.turn], //cache the pad number that should have been pressed

that = this;
this.active=false;
this.displayLevel();
this.displayScore();

setTimeout(function(){ //flash the pad 4 times that should have been pressed
that.flash($(that.shape+corPad),4,300,corPad);
},500);

$('.start').show(); //enable the start button again and allow difficulty selection again
$('.difficulty').show();

}

};
$(document).ready(function(){ //document ready

$('.start').on('mouseup', function(){ //initialise a game when the start button is clicked
$(this).hide();
game.difficulty = $('input[name=difficulty]:checked').val();
$('.difficulty').hide();
game.init();


});


});

最佳答案

好的,我想我已经按照你想要的方式做到了,这里是完整的 js:

(我已经评论了我添加的部分)

var game={ //game object
level: 1, //current level
turn: 0, //current turn
difficulty: 1, // user difficulty
score: 0, //current score
active: false, //whether a turn is active or not
handler: false, // whether the click and sound handlers are active
shape: '.shape', // cached string for the pad class
genSequence: [], //array containing the generated/randomized pads
plaSequence: [], //array containing the users pad selections

init: function(){ //initialises the game
if(this.handler === false){ //checks to see if handlers are already active
this.initPadHandler(); //if not activate them
}
this.newGame(); //reset the game defaults

},

initPadHandler: function(){

that=this;

$('.pad').on('mouseup',function(){

if(that.active===true){

var pad=parseInt($(this).data('pad'),10);

that.flash($(this),1,300, pad);

that.logPlayerSequence(pad);

}
});

this.handler=true;

},

newGame: function(){ //resets the game and generates a starts a new level

this.level=1;
this.score=0;
this.newLevel();
this.displayLevel();
this.displayScore();

//initialize timer to 10 seconds
this.timer = 10;

},

newLevel: function(){

this.genSequence.length=0;
this.plaSequence.length=0;
this.pos=0;
this.turn=0;
this.active=true;

this.randomizePad(this.level); //randomize pad with the correct amount of numbers for this level
this.displaySequence(); //show the user the sequence
},

flash: function(element, times, speed, pad){ //function to make the pads appear to flash

var that = this; //cache this

if(times > 0){ //make sure we are supposed to flash
that.playSound(pad); //play the corresponding pad sound
element.stop().animate({opacity: '1'}, { //animate the element to appear to flash
duration: 50,
complete: function(){
element.stop().animate({opacity: '0.6'}, 200);
}
}); //end animation

}

if (times > 0) { //call the flash function again until done the correct amount of times
setTimeout(function () {
that.flash(element, times, speed, pad);
}, speed);
times -= 1; //times - 1 for each time it's called
}
},

playSound: function(clip){ //plays the sound that corresponds to the pad chosen


var sound= $('.sound'+clip)[0];
console.log(sound);
console.log($('.sound'+clip));
sound.currentTime=0; //resets audio position to the start of the clip
sound.play(); //play the sound


},

randomizePad: function(passes){ //generate random numbers and push them to the generated number array iterations determined by current level

for(i=0;i<passes;i++){

this.genSequence.push(Math.floor(Math.random() * 4) + 1);
}
},

logPlayerSequence: function(pad){ //log the player selected pad to user array and call the checker function

this.plaSequence.push(pad);
this.checkSequence(pad);


},

checkSequence: function(pad){ //checker function to test if the pad the user pressed was next in the sequence

that=this;

if(pad !== this.genSequence[this.turn]){ //if not correct

this.incorrectSequence();

}else{ //if correct
this.keepScore(); //update the score
this.turn++; //incrememnt the turn

}

if(this.turn === this.genSequence.length){ //if completed the whole sequence

this.level++; //increment level, display it, disable the pads wait 1 second and then reset the game
this.displayLevel();
this.active=false;

// Stop counting when sequence is correct to avoid time running out before starting next level
clearInterval(this.timerInterval);

//Add 5 seconds each 5th level
this.timer = 10 + 5 * Math.floor(this.level / 5);

//Update timerdisplay to show fulltime while displaying next level sequence
$(".Timer p").html(this.timer);

setTimeout(function(){
that.newLevel();
},1000);
}
},

// Countdown and update timer, call incorrectsequence when time's up
countDown: function(){
this.timer -= 0.1;
$(".Timer p").html(this.timer.toFixed(1)); // Display 9.0 instad of 9
if(this.timer < 0.1){
this.incorrectSequence();
}
},

displaySequence: function(){ //display the generated sequence to the user

var that=this;

var timerCount = 0;

$.each(this.genSequence, function(index, val) { //iterate over each value in the generated array
timerCount = index;
setTimeout(function(){

that.flash($(that.shape+val),1,300,val);

},500*index*that.difficulty); // multiply timeout by how many items in the array so that they play sequentially and multiply by the difficulty modifier
});

// Wait to start timer until full sequence is displayed
setTimeout(function(){ that.timerInterval = setInterval(function(){that.countDown()}, 100)}, 500*timerCount*that.difficulty);
},

displayLevel: function(){ //just display the current level on screen

$('.level h2').text('Level: '+this.level);

},

displayScore: function(){ //display current score on screen
$('.score h2').text('Score: '+this.score);
},

keepScore: function(){ //keep the score

var multiplier=0;

switch(this.difficulty) //choose points modifier based on difficulty
{
case '2':
multiplier=1;
break;

case '1':
multiplier=2;
break;

case '0.5':
multiplier = 3;
break;

case '0.25':
multiplier = 4;
break;
}

this.score += (1 * multiplier); //work out the score

this.displayScore(); //display score on screen
},

incorrectSequence: function(){ //if user makes a mistake

//Stop counting down timer and display start message
clearInterval(this.timerInterval);
$(".Timer p").html("Get Ready your time starts when you click start");

var corPad = this.genSequence[this.turn], //cache the pad number that should have been pressed

that = this;
this.active=false;
this.displayLevel();
this.displayScore();

setTimeout(function(){ //flash the pad 4 times that should have been pressed
that.flash($(that.shape+corPad),4,300,corPad);
},500);

$('.start').show(); //enable the start button again and allow difficulty selection again
$('.difficulty').show();

}

};
$(document).ready(function(){ //document ready

$('.start').on('mouseup', function(){ //initialise a game when the start button is clicked
$(this).hide();
game.difficulty = $('input[name=difficulty]:checked').val();
$('.difficulty').hide();
game.init();


});


});

您可以在这里查看:JSFiddle (声音在 fiddle 中被禁用)

关于javascript - 如何将倒数计时器添加到我的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com