353 lines
7.7 KiB
JavaScript
353 lines
7.7 KiB
JavaScript
//Variables
|
|
var iNumBarras = 5;
|
|
var iInterNewBar = 5;
|
|
var iContBarPuls = 0;
|
|
var iTiemCaidaBarr = 5000;
|
|
var iTiemSubirBarr = 500;
|
|
var iTiemDesapaCuadro = 2000;
|
|
var $botonEmpezar = $('#botonEmpezar');
|
|
var sTextReinicio = 'Replay';
|
|
var iTiemDelayTutorial = 3000;
|
|
var aBarrasOrden = new Array();
|
|
var $titulo = $('#titulo');
|
|
var $barras = $('.barras');
|
|
var $cuadro = $('#cuadro');
|
|
var $barra1 = $('#barra1');
|
|
var $barra2 = $('#barra2');
|
|
var $barra3 = $('#barra3');
|
|
var $barra4 = $('#barra4');
|
|
var $barra5 = $('#barra5');
|
|
var $tutorial = $('#tutorial');
|
|
var mostrarTutorial = false;
|
|
var bEmpezada = false;
|
|
var bJugando = false;
|
|
var iNivel = 1;
|
|
var iToques = 0;
|
|
var iTiem = 0;
|
|
var $nivel = $('#nivel');
|
|
var $nivelNum = $('#nivel #numero');
|
|
var $toques = $('#toques');
|
|
var $toquesNum = $('#toques #numeros');
|
|
var $tiempo = $('#tiempo');
|
|
var $tiempoNum = $('#tiempo #segundos');
|
|
var $cartelNivel = $('#cartelNivel');
|
|
$cartelNivel.hide();
|
|
$nivel.hide();
|
|
$toques.hide();
|
|
$tiempo.hide();
|
|
|
|
/* GESTION DE PARTIDA */
|
|
|
|
/**
|
|
* Método que inicia la partida
|
|
*/
|
|
var iniciarPartida = function() {
|
|
console.log('Iniciando');
|
|
bEmpezada = true;
|
|
generarNivel();
|
|
//Quitar titulo y boton de inicio
|
|
$titulo.fadeOut(iTiemDesapaCuadro);
|
|
$botonEmpezar.fadeOut(iTiemDesapaCuadro, 'linear', function() {
|
|
//Muestra el nivel
|
|
$cartelNivel.fadeIn(iTiemDesapaCuadro).delay(iTiemDesapaCuadro).fadeOut(iTiemDesapaCuadro, function() {
|
|
//Mover barras
|
|
$barra3.animate({
|
|
height: iAltura
|
|
}, iTiemCaidaBarr, 'linear');
|
|
//Mostrar carteles de tiempo, toques y nivel
|
|
$nivel.fadeIn(iTiemDesapaCuadro);
|
|
$toques.fadeIn(iTiemDesapaCuadro);
|
|
$tiempo.fadeIn(iTiemDesapaCuadro);
|
|
//Mover cuadro
|
|
moverCuadro();
|
|
//Muestra tutorial
|
|
setTimeout('mostrarTutorial()', iTiemDelayTutorial / 2);
|
|
//Cambiar posición de botón
|
|
$botonEmpezar.css('top', '90px');
|
|
|
|
bJugando = true;
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Método que reinicia la partida
|
|
*/
|
|
var reiniciarPartida = function() {
|
|
console.log('Reiniciando');
|
|
generarNivel();
|
|
//Quitar boton
|
|
$botonEmpezar.fadeOut(iTiemDesapaCuadro, 'linear', function() {
|
|
//Reinicia cuadro
|
|
$cuadro.css('left', '-25%');
|
|
$cuadro.fadeIn(1);
|
|
//Mover cuadro
|
|
moverCuadro();
|
|
bJugando = true;
|
|
//Reinicia barras
|
|
$barras.css('height', '0');
|
|
$barras.fadeIn(1);
|
|
//Mover barras
|
|
$barra3.animate({
|
|
height: iAltura
|
|
}, iTiemCaidaBarr, 'linear');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Método para terminar la partida
|
|
*/
|
|
var finPartida = function() {
|
|
console.log('Fin partida');
|
|
bJugando = false;
|
|
$barras.stop();
|
|
//Quitar barras
|
|
$barras.fadeOut(iTiemDesapaCuadro);
|
|
//Mostrar boton de reinicio
|
|
$botonEmpezar.html(sTextReinicio);
|
|
$botonEmpezar.fadeIn(iTiemDesapaCuadro);
|
|
//Quitar cuadro
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
}
|
|
|
|
var generarNivel = function() {
|
|
switch(iNivel) {
|
|
case 1:
|
|
iTiem = 20;
|
|
iToques = 15;
|
|
iInterNewBar = 5;
|
|
break;
|
|
case 2:
|
|
iTiem = 30;
|
|
iToques = 30;
|
|
iInterNewBar = 4;
|
|
break;
|
|
case 3:
|
|
iTiem = 30;
|
|
iToques = 25;
|
|
iInterNewBar = 4;
|
|
break;
|
|
case 4:
|
|
iTiem = 40;
|
|
iToques = 40;
|
|
iInterNewBar = 2;
|
|
break;
|
|
case 5:
|
|
iTiem = 30;
|
|
iToques = 20;
|
|
iInterNewBar = 4;
|
|
break;
|
|
default:
|
|
iTiem = 30;
|
|
iToques = 25 - iNivel;
|
|
iInterNewBar = 1;
|
|
break;
|
|
}
|
|
aBarrasOrden = new Array();
|
|
iContBarPuls = 0;
|
|
$tiempoNum.html(iTiem);
|
|
$nivelNum.html(iNivel);
|
|
$toquesNum.html(iToques);
|
|
$cartelNivel.html($nivel.html());
|
|
}
|
|
|
|
var gestionarTiempo = function() {
|
|
if(iTiem > 0 && bJugando) {
|
|
iTiem--;
|
|
$tiempoNum.html(iTiem);
|
|
} else if(iTiem == 0 && bJugando) {
|
|
cambiarNivel();
|
|
}
|
|
}
|
|
|
|
setInterval('gestionarTiempo()', 1000);
|
|
|
|
var cambiarNivel = function() {
|
|
iNivel++;
|
|
console.log('Cambiando a nivel' + iNivel);
|
|
bJugando = false;
|
|
$barras.stop();
|
|
//Quitar barras
|
|
$barras.fadeOut(iTiemDesapaCuadro);
|
|
//Quitar cuadro
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
$cuadro.stop();
|
|
$cuadro.fadeOut(iTiemDesapaCuadro);
|
|
//Mostrar cartel
|
|
$nivelNum.html(iNivel);
|
|
$cartelNivel.html($nivel.html());
|
|
$cartelNivel.fadeIn(iTiemDesapaCuadro).delay(iTiemDesapaCuadro).fadeOut(iTiemDesapaCuadro, function() {
|
|
//Empezar partida
|
|
reiniciarPartida();
|
|
});
|
|
}
|
|
|
|
/* GESTION DE BARRAS */
|
|
|
|
/**
|
|
* Método que devuelve entre 1 y iLim
|
|
* @return {Int}
|
|
*/
|
|
var numeroAlAzar = function(iniLim) {
|
|
return Math.floor((Math.random() * iniLim) + 1);
|
|
}
|
|
|
|
/**
|
|
* Método que mueve las barras según toca
|
|
*/
|
|
var moverOtrasBarras = function() {
|
|
//Genera posiciones aleatorias
|
|
if(aBarrasOrden.length < iNumBarras) {
|
|
var iAzar = 0;
|
|
var bMeter = true;
|
|
aBarrasOrden.push(3);
|
|
while(aBarrasOrden.length < iNumBarras) {
|
|
iAzar = numeroAlAzar(iNumBarras);
|
|
if(iAzar != 3 && aBarrasOrden.indexOf(iAzar) == -1) {
|
|
aBarrasOrden.push(iAzar);
|
|
}
|
|
}
|
|
}
|
|
//Cuenta las veces que se pulsa
|
|
iContBarPuls++;
|
|
//Inicia nueva barra
|
|
if((iContBarPuls % iInterNewBar) == 0
|
|
&& iContBarPuls / iInterNewBar < aBarrasOrden.length) {
|
|
var iPosSig = iContBarPuls / iInterNewBar;
|
|
reiniciarBarra(eval('$barra' + aBarrasOrden[iPosSig]));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Método que gestiona el toque de la barra
|
|
*/
|
|
var gestionarBarra = function($inBarra) {
|
|
if(iToques > 0) {
|
|
reiniciarBarra($inBarra);
|
|
iToques--;
|
|
$toquesNum.html(iToques);
|
|
if(mostrarTutorial) {
|
|
ocultarTutorial();
|
|
}
|
|
moverOtrasBarras();
|
|
} else {
|
|
finPartida();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Método que reinicia la posición de la barra
|
|
* @param {JQuery} $inBarra
|
|
*/
|
|
var reiniciarBarra = function($inBarra) {
|
|
$inBarra.stop();
|
|
$inBarra.animate({
|
|
height: 0
|
|
}, iTiemSubirBarr, 'linear', function() {
|
|
$inBarra.animate({
|
|
height: iAltura
|
|
}, iTiemCaidaBarr, 'linear');
|
|
});
|
|
}
|
|
|
|
/* GESTION DE CUADRO */
|
|
|
|
/**
|
|
* Método que mueve el cuadro
|
|
*/
|
|
var moverCuadro = function() {
|
|
$cuadro.animate({
|
|
left: iAnchura
|
|
}, iTiemCaidaBarr, 'linear', function() {
|
|
$cuadro.css('left', '-25%');
|
|
moverCuadro();
|
|
});
|
|
}
|
|
|
|
/* GESTION DE TUTORIAL */
|
|
|
|
/**
|
|
* Método que muestra el tutorial
|
|
*/
|
|
var mostrarTutorial = function() {
|
|
if(typeof(Storage) !== 'undefined') {
|
|
if(localStorage.getItem('tutorial') == null) {
|
|
localStorage.setItem('tutorial', '1');
|
|
$barras.stop();
|
|
$cuadro.stop();
|
|
$tutorial.css('visibility', 'visible');
|
|
$barra3.append('<div class="pulsar" id="pulsarTutorial"></div>');
|
|
mostrarTutorial = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Método que oculta el tutorial
|
|
* @return {[type]} [description]
|
|
*/
|
|
var ocultarTutorial = function() {
|
|
$tutorial.css('visibility', 'hidden');
|
|
$barra3.html('');
|
|
moverCuadro();
|
|
mostrarTutorial = false;
|
|
}
|
|
|
|
/* COLISIONES */
|
|
|
|
/**
|
|
* Método que comprueba el final del juego
|
|
*/
|
|
var comprobarFinJuego = function() {
|
|
if((collision($barra1, $cuadro)
|
|
|| collision($barra2, $cuadro)
|
|
|| collision($barra3, $cuadro)
|
|
|| collision($barra4, $cuadro)
|
|
|| collision($barra5, $cuadro))
|
|
&& bJugando) {
|
|
finPartida();
|
|
}
|
|
}
|
|
|
|
setInterval('comprobarFinJuego()', 50);
|
|
|
|
/**
|
|
* Método que comprueba si ha colisionado dos divs
|
|
* @param {JQuery} $div1
|
|
* @param {JQuery} $div2
|
|
* @return {boolean}
|
|
*/
|
|
function collision($div1, $div2) {
|
|
var x1 = $div1.offset().left;
|
|
var y1 = $div1.offset().top;
|
|
var h1 = $div1.outerHeight(true);
|
|
var w1 = $div1.outerWidth(true);
|
|
var b1 = y1 + h1;
|
|
var r1 = x1 + w1;
|
|
var x2 = $div2.offset().left;
|
|
var y2 = $div2.offset().top;
|
|
var h2 = $div2.outerHeight(true);
|
|
var w2 = $div2.outerWidth(true);
|
|
var b2 = y2 + h2;
|
|
var r2 = x2 + w2;
|
|
|
|
if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false;
|
|
return true;
|
|
} |