Game PunkPong
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>PunkPong © (by Joan Alba Maldonado)</title>
<!-- (c) PunkPong - Programa realizado por Joan Alba Maldonado (granvino@granvino.com). Prohibido publicar, reproducir o modificar sin citar expresamente al autor original. -->
<script language="JavaScript1.2" type="text/javascript">
<!--
//(c) PunkPong - Programa realizado por Joan Alba Maldonado (granvino@granvino.com). Prohibido publicar, reproducir o modificar sin citar expresamente al autor original.
//Variable que guardara el primer evento de teclado en ejecutarse por primera vez (pude ser onkeydown u onkeypress):
var primer_evento;
//Variable que guarda la dimension del area de juego:
var area_juego_x = 700; //Pixels de la horizontal.
var area_juego_y = 400; //Pixels de la vertical.
//Variable que guarda el alto de las paletas:
var paletas_height = 80;
//Variable que guarda el ancho de las paletas:
var paletas_width = 20;
//Variable que guarda el alto de la pelota:
var pelota_height = 10;
//Variable que guarda el ancho de la pelota:
var pelota_width = 10;
//Variable para saber si se ha de sacar la pelota:
var se_ha_de_sacar = true;
//Variable que guarda el ultimo ganador (para saber quien saca):
var ultimo_ganador = "usuario";
//Varialbe que define si la pelota esta en movimiento o quita:
var pelota_moviendose = false;
//Variable que guardara el setInterval que llamara a la funcion de mover_pelota:
var pelota_movimiento = setInterval("", 10000);
//Variable que guardara el setInterval que hara moverse al ordenador:
var ordenador_movimiento = setInterval("", 10000);
//Variable que contiene el numero de pixels que la pelota se desplaza:
var desplazamiento_x = 4; //Desplazamiento horizontal.
var desplazamiento_y = 1; //Desplazamiento vertical.
//Variable que contiene los milisegundos entre movimiento y movimiento, para la pelota:
var velocidad_pelota_inicial = 25; //La velocidad al empezar.
var velocidad_pelota = velocidad_pelota_inicial; //Aqui se ira decrementando (mas rapido) cuando se requiera.
//Variable que contendra un numero aleatorio para saber sobre que extremo de la paleta ha de rematar el ordenador:
var vertical_aleatorio = 0;
//Variable que guarda la puntuacion del usuario:
var puntuacion = 0;
//Variables que guardan el numero de goles de cada jugador:
var goles_ordenador = 0; //Goles del ordenador.
var goles_usuario = 0; //Goles del usuario.
//Variable que define los reflejos del ordenador (se incrementa segun nivel):
var reflejos_iniciales = 0; //Reflejos iniciales.
var reflejos_ordenador = reflejos_iniciales; //Reflejos que iran aumentando conforme el nivel.
//Variable que guarda el numero de nivel:
var nivel = 1; //Nivel inicial.
//Numero de vidas inicial:
var vidas_inicial = 5;
var vidas = vidas_inicial;
//Varialbe que impide el movimiento de la paleta del usuario (para cuando se inicia el juego):
var impedir_movimiento = true;
//Variable para saber con que se controlara el juego:
var tipo_control = "teclado";
//Funcion que inicia el juego:
function iniciar_juego()
{
//Se borran los intervalos:
clearInterval(pelota_movimiento); //Se para la pelota.
clearInterval(ordenador_movimiento); //Se para la paleta del ordenador.
//La pelota ya no se mueve:
pelota_moviendose = false;
//Se debe sacar:
se_ha_de_sacar = true;
//El ultimo ganador (el primero en tirar) es el usuario:
ultimo_ganador = "usuario";
//Setear velocidad a inicial, desplazamientos a inicial, vidas a tope, puntuacion a cero, etc...
vidas = vidas_inicial;
//Se setea la puntuacion a cero:
puntuacion = 0;
//Se setean los goles de ambos a cero:
goles_ordenador = 0;
goles_usuario = 0;
//Se setea el nivel al primero (inicial):
nivel = 1;
//Se setea la velocidad de la pelota a la inicial:
velocidad_pelota = velocidad_pelota_inicial;
//Se setean los reflejos del ordenador a los iniciales:
reflejos_ordenador = reflejos_iniciales;
//La variable para saber sobre que lado golpear la paleta del ordenador a la pelota se setea a cero:
vertical_aleatorio = 0;
//Se setea el desplazamiento inicial de la pelota:
desplazamiento_x = 2;
desplazamiento_y = 1;
//Se actualizan los marcadores:
actualizar_marcadores();
//Se posiciona la pelota en la paleta:
posicionar_pelota(0);
//Se hace visisble el cartel de anuncios e inicia la cuentra atras:
setTimeout("document.getElementById('cartel_anuncios').style.visibility = 'visible'; document.getElementById('cartel_anuncios').innerHTML = 'Countdown<br>Wait...<br>3';", 1000);
setTimeout("document.getElementById('cartel_anuncios').innerHTML = 'Countdown<br>Wait...<br>2';", 2000);
setTimeout("document.getElementById('cartel_anuncios').innerHTML = 'Countdown<br>Wait...<br>1';", 3000);
//Despues de la cuenta atras, se anuncia que comienza el juego y se desbloquea la paleta del usuario para que se pueda mover:
setTimeout("document.getElementById('cartel_anuncios').innerHTML = 'The<br>game<br>begins'; impedir_movimiento = false;", 4000);
setTimeout("document.getElementById('cartel_anuncios').style.visibility = 'hidden';", 7000); //Se quita el cartel a los 3 segundos del "Comienza el juego".
}
//Funcion que comienza el movimiento de la pelota:
function sacar_pelota()
{
//Calcular si se ha de sacar:
//if (se_ha_de_sacar) { sadfsd }
if (!pelota_moviendose && se_ha_de_sacar)
{
//Se setea la variable para saber que ya se ha sacado:
se_ha_de_sacar = false;
//Se setea la variable para saber que la pelota ha comenzado a moverse:
pelota_moviendose = true;
//Se destruye el movimiento anterior, si aun existiera:
clearInterval(pelota_movimiento);
//Si al que le toca sacar es el usuario:
if (ultimo_ganador == "usuario")
{
//Se define el desplazamiento (positivo):
desplazamiento_x = 4;
desplazamiento_y = 1;
//Numero aleatorio para calcular en un lado de la paleta o en otro:
vertical_aleatorio = parseInt(Math.random() * 40);
}
else if (ultimo_ganador == "ordenador")
{
//Se define el desplazamiento (positivo):
desplazamiento_x = -4;
desplazamiento_y = -1;
}
//Se comienza a mover la pelota 2x2 pixels, cada X (velocidad_pelota) milisegundos:
pelota_movimiento = setInterval("mover_pelota();", velocidad_pelota);
}
}
//Funcion que posiciona la pelota en la paleta de quien corresponde:
function posicionar_pelota(posicion_y)
{
//Si la pelota no esta moviendose y se debe sacar:
if (!pelota_moviendose && se_ha_de_sacar)
{
//Se posiciona la pelota verticalmente, segun el parametro enviado:
document.getElementById("pelota").style.top = posicion_y + 36 + "px";
//Si el ultimo ganador es el usuario (el que saca), posicionamos la pelota en su paleta:
if (ultimo_ganador == "usuario") { document.getElementById("pelota").style.left = 30 + paletas_width + "px"; }
//...y si el ganador es el ordenador, se pone la pelota en su paleta para que saque el:
else if (ultimo_ganador == "ordenador") { document.getElementById("pelota").style.left = area_juego_x - 30 - pelota_height - paletas_width + "px"; }
}
//Se actualizan los marcadores:
actualizar_marcadores();
//Si se marcan 3 goles (o mas, por si acaso), se pasa de nivel:
if (goles_usuario >= 3) { pasar_nivel(); }
//Si se pierden todas las vidas, se alerta del GameOver y se reinicia el juego:
if (vidas < 0)
{
//Se setea conforme la pelota ya no se mueve:
pelota_moviendose = false;
//Se setea conforme ya no se ha de sacar:
se_ha_de_sacar = false;
//Se para la pelota:
clearInterval(pelota_movimiento);
//Se detiene la paleta del ordenador:
clearInterval(ordenador_movimiento);
//Se posiciona la paleta del usuario arriba del todo:
document.getElementById("paleta_usuario").style.top = "0px";
//Se anuncia que se ha acabado el juego:
document.getElementById("cartel_anuncios").innerHTML = "End<br>of<br>game";
document.getElementById("cartel_anuncios").style.visibility = "visible";
setTimeout("document.getElementById('cartel_anuncios').style.visibility = 'hidden';", 3000);
//Se alerta del fin de juego:
alert("Game Over");
impedir_movimiento = true;
//En 3 segundos (3000 milisegundos) comienza el nuevo juego:
setTimeout("iniciar_juego();", 3000);
}
}
//Funcion que captura las teclas pulsadas y realiza la accion correspondiente (llama a mover_paleta):
function tecla_pulsada(e, evento_actual)
{
//Si el primer evento esta vacio, se le introduce como valor el evento actual (el que ha llamado a esta funcion):
if (primer_evento == "") { primer_evento = evento_actual; }
//Si el primer evento no es igual al evento actual (el que ha llamado a esta funcion), se vacia el primer evento (para que a la proxima llamada entre en la funcion) y se sale de la funcion:
if (primer_evento != evento_actual) { primer_evento = ""; return; }
//Si el control seleccionado no es el teclado, sale de la funcion:
if (tipo_control != "teclado") { return; }
//Capturamos la tacla pulsada, segun navegador:
if (e.keyCode) { var unicode = e.keyCode; }
//else if (event.keyCode) { var unicode = event.keyCode; }
else if (window.Event && e.which) { var unicode = e.which; }
else { var unicode = 40; } //Si no existe, por defecto se utiliza la flecha hacia abajo.
//Si el movimiento de la paleta del usuario esta impedido, se sale de la funcion:
if (impedir_movimiento) { return false; }
//Definimos las variables de posicion (Y) del personaje:
var posicion_y = parseInt(document.getElementById("paleta_usuario").style.top);
//Si se pulsa la flecha hacia arriba, se restan 40 pixels verticales:
if (unicode == 38) { posicion_y -= 40; }
//Si se pulsa la flecha hacia abajo, se suman 40 pixels verticales:
else if (unicode == 40) { posicion_y += 40; }
//Codigos de teclas de disparo: 17 (ctrl), 16 (shift), 32 (space), 13 (return), 45 (insert), 96 (0), 190 (.).
//Si el codigo es una de las teclas de disparo:
else if (unicode == 39 || unicode == 17 || unicode == 16 || unicode == 32 || unicode == 13 || unicode == 45 || unicode == 96 || unicode == 190)
{
//Si la pelota no esta moviendose, se ha de sacar y el que ha de sacar es el usuario:
if (!pelota_moviendose && se_ha_de_sacar && ultimo_ganador == "usuario")
{
//Se saca la pelota:
sacar_pelota();
}
}
//Se mueve la paleta, a las nuevas coordenadas (si existen):
mover_paleta(posicion_y, "usuario");
//Sale de la funcion, retornando true:
return true;
}
//Funcion que mueve la paleta con el raton:
function mover_raton(e)
{
//Si el control seleccionado no es el raton, sale de la funcion:
if (tipo_control != "raton") { return; }
//Si el movimiento de la paleta del usuario esta impedido, se sale de la funcion:
if (impedir_movimiento) { return false; }
//Variable para saber si estamos en Internet Explorer o no:
var ie = document.all ? true : false;
//Si estamos en internet explorer, se recogen las coordenadas del raton de una forma:
if (ie)
{
posicion_y_raton = event.clientY + document.body.scrollTop;
}
//...pero en otro navegador, se recogen de otra forma:
else
{
document.captureEvents(Event.MOUSEMOVE);
posicion_y_raton = e.pageY;
}
//Si las coordenadas X o Y del raton son menores que cero, se ponen a cero:
if (posicion_y_raton < 0) { posicion_y_raton = 0; }
if (posicion_y_raton >= area_juego_y) { posicion_y_raton = area_juego_y - parseInt(paletas_height/2) + parseInt(pelota_height*2); }
//Definimos las variables de posicion (Y) del personaje:
var posicion_y = parseInt(document.getElementById("paleta_usuario").style.top);
//Se setea la variable de la posicion (Y) de la paleta igual que la del raton:
posicion_y = posicion_y_raton - parseInt(paletas_height/2) - (pelota_height*2);
//Se mueve la paleta, a las nuevas coordenadas (si existen):
mover_paleta(posicion_y, "usuario");
}
//Funcion que saca la pelota al hacer click con el raton:
function hacer_click()
{
//Si el control seleccionado no es el raton, sale de la funcion:
if (tipo_control != "raton") { return; }
//Si el movimiento de la paleta del usuario esta impedido, se sale de la funcion:
if (impedir_movimiento) { return false; }
//Si la pelota no esta moviendose, se ha de sacar y el que ha de sacar es el usuario:
if (!pelota_moviendose && se_ha_de_sacar && ultimo_ganador == "usuario")
{
//Se saca la pelota:
sacar_pelota();
}
}
//Funcion que mueve al enemigo:
function mover_enemigo(pelota_y)
{
//Si pelota_moviendose = false, salir de la funcion:
if (!pelota_moviendose) { return false; }
//Variable que guarda la nueva posicion vertical del enemigo:
var enemigo_y = parseInt(document.getElementById("paleta_ordenador").style.top);
//Variable aleatoria para definir si el enemigo va a moverse o no:
var moverse_enemigo = parseInt(Math.random() * 10); //Va del 0 al 9, y si es mayor que 8 entonces no se mueve.
if (moverse_enemigo > reflejos_ordenador) { return false; } //Si es mayor a 8, sale de la funcion (el enemigo no se mueve).
//Si la pelota esta mas arriba que la paleta del enemigo, el enemigo sube:
if (pelota_y < enemigo_y)
{
if (enemigo_y - 10 >= 0 && enemigo_y - 10 <= pelota_y)
{
enemigo_y -= 10;
}
else if (enemigo_y - 4 >= 0 && enemigo_y - 4 <= pelota_y)
{
enemigo_y -= 4;
}
else if (enemigo_y - 2 >= 0 && enemigo_y - 2 <= pelota_y)
{
enemigo_y -= 2;
}
else if (enemigo_y - 1 >= 0 && enemigo_y - 1 <= pelota_y)
{
enemigo_y -= 1;
}
else if (enemigo_y - 10 >= 0)
{
enemigo_y -= 10;
}
else if (enemigo_y - 4 >= 0)
{
enemigo_y -= 4;
}
else if (enemigo_y - 2 >= 0)
{
enemigo_y -= 2;
}
else if (enemigo_y - 1 >= 0)
{
enemigo_y -= 1;
}
if (enemigo_y - vertical_aleatorio >= 0 && enemigo_y - vertical_aleatorio <= pelota_y)
{
enemigo_y -= vertical_aleatorio;
}
}
//...pero si la pelota esta mas abajo que la paleta del enemigo, el enemigo baja:
else if (pelota_y > enemigo_y + paletas_height)
{
if (enemigo_y + 10 <= area_juego_y && enemigo_y + 10 <= pelota_y)
{
enemigo_y += 10;
}
if (enemigo_y + 4 <= area_juego_y && enemigo_y + 4 <= pelota_y)
{
enemigo_y += 4;
}
else if (enemigo_y + 2 <= area_juego_y && enemigo_y + 2 <= pelota_y)
{
enemigo_y += 2;
}
else if (enemigo_y + 1 <= area_juego_y && enemigo_y + 1 <= pelota_y)
{
enemigo_y += 1;
}
else if (enemigo_y + 10 <= area_juego_y)
{
enemigo_y += 10;
}
else if (enemigo_y + 4 <= area_juego_y)
{
enemigo_y += 4;
}
else if (enemigo_y + 2 <= area_juego_y)
{
enemigo_y += 2;
}
else if (enemigo_y + 1 <= area_juego_y)
{
enemigo_y += 1;
}
if (enemigo_y + vertical_aleatorio <= area_juego_y && enemigo_y + vertical_aleatorio <= pelota_y)
{
enemigo_y += vertical_aleatorio;
}
}
//Mueve al enemigo con la nueva configuracion:
mover_paleta(enemigo_y, "ordenador");
}
//Funcion que mueve la paleta segun las ordenadas (vertical) enviadas por tecla_pulsada:
function mover_paleta(posicion_y, quien_mueve)
{
//Se define la variable para saber si se ha movido la paleta o no:
var se_ha_movido_paleta = false;
//Si la posicion enviada esta fuera de la zona de juego, sale de la funcion sin mover la paleta y retornando false:
if (posicion_y < 0 || posicion_y > area_juego_y - paletas_height) { return false; }
//Si el que mueve es el usuario, mueve su paleta a la nueva posicion:
else if (quien_mueve == "usuario") { document.getElementById("paleta_usuario").style.top = posicion_y + "px"; se_ha_movido_paleta = true; }
//...y si el que mueve es el ordenador, mueve su paleta a la nueva posicion:
else if (quien_mueve == "ordenador") { document.getElementById("paleta_ordenador").style.top = posicion_y + "px"; se_ha_movido_paleta = true; }
//Si la pelota no se esta moviendo, y se ha de sacar y se ha movido la paleta, mover tambien la pelota:
if (!pelota_moviendose && se_ha_de_sacar && se_ha_movido_paleta && quien_mueve == ultimo_ganador) { posicionar_pelota(posicion_y); }
//Sale de la funcion, retornando true:
return true;
}
//Funcion que mueve la pelota:
function mover_pelota ()
{
//Si la pelota esta parada, salir de la funcion:
if (!pelota_moviendose) { return; }
//if (document.getElementById("pelota").style.top < 0 || document.getElementById("pelota").style.left > area_juego_y) { return; }
//Mueve la pelota:
document.getElementById("pelota").style.left = parseInt(document.getElementById("pelota").style.left) + desplazamiento_x + "px"; //Horizontalmente.
//Si la nueva posicion vertical va a ser menor que cero, dejarla arriba del todo (sin pasar el borde):
if (parseInt(document.getElementById("pelota").style.top) + desplazamiento_y < 0)
{
document.getElementById("pelota").style.top = "0px"; //Se pone arriba del todo, sin pasar el borde.
}
//...y si la nueva posicion vertical va a ser mayor que el alto del area de juego, dejarla abajo del todo (sin pasar el borde):
else if (parseInt(document.getElementById("pelota").style.top) + desplazamiento_y + pelota_width > area_juego_y)
{
document.getElementById("pelota").style.top = area_juego_y - pelota_width + "px"; //Se pone abajo del todo, sin pasar el borde.
}
//...y si no, la nueva posicion vertical es correcta y se aplica tal cual:
else { document.getElementById("pelota").style.top = parseInt(document.getElementById("pelota").style.top) + desplazamiento_y + "px"; } //Verticalmente.
//Calcular colision:
calcular_colision(parseInt(document.getElementById("pelota").style.left), parseInt(document.getElementById("pelota").style.top));
//Mover al enemigo:
mover_enemigo(parseInt(document.getElementById("pelota").style.top));
}
//Funcion que calcula la colision entre paleta y pelota, y entre pelota y pared:
function calcular_colision (pelota_x, pelota_y)
{
//Calcular si ha colisionado con alguna pared (de arriba o abajo):
if (pelota_y <= 0 || pelota_y >= 400 - pelota_height)
{
//Cancela el movimiento de la pelota:
clearInterval(pelota_movimiento);
//Setear los nuevos valores de desplazamiento de la pelota:
desplazamiento_y *= -1; //Se invierte el movimiento vertical.
//Mueve la pelota con los nuevos valores:
pelota_movimiento = setInterval("mover_pelota();", velocidad_pelota);
//Sale de la funcion:
return;
}
//Variables que recogen las coordenadas de las paletas:
var paleta_usuario_top = parseInt(document.getElementById("paleta_usuario").style.top);
var paleta_usuario_left = parseInt(document.getElementById("paleta_usuario").style.left);
var paleta_ordenador_top = parseInt(document.getElementById("paleta_ordenador").style.top);
var paleta_ordenador_left = parseInt(document.getElementById("paleta_ordenador").style.left);
//Variable para calcular la colision con el lateral de la paleta con la pelota:
var pelota_contra_lateral = false;
//Variable para saber si invertir o no el movimiento de y:
var invertir_y = false;
//Calcular si la pelota ha colisionado con el lateral superior de la paleta del usuario:
if (pelota_x >= paleta_usuario_left && pelota_x + pelota_width <= paleta_usuario_left + paletas_width && pelota_y + pelota_height >= paleta_usuario_top && pelota_y <= paleta_usuario_top)
{
pelota_contra_lateral = true; //Ha colisionado la pelota contra el lateral superior de la paleta del usuario.
//Si la pelota iba hacia abajo, invertir movimiento:
if (desplazamiento_y > 0) { invertir_y = true; }
}
//Calcular si la pelota ha colisionado con el lateral inferior de la paleta del usuario:
else if (pelota_x >= paleta_usuario_left && pelota_x + pelota_width <= paleta_usuario_left + paletas_width && pelota_y <= paleta_usuario_top + paletas_height && pelota_y + pelota_height >= paleta_usuario_top + paletas_height)
{
pelota_contra_lateral = true; //Ha colisionado la pelota contra el lateral inferior de la paleta del usuario.
//Si la pelota iba hacia arriba, invertir movimiento:
if (desplazamiento_y < 0) { invertir_y = true; }
}
//Calcular si la pelota ha colisionado con el lateral superior de la paleta del ordenador:
else if (pelota_x >= paleta_ordenador_left && pelota_x + pelota_width <= paleta_ordenador_left + paletas_width && pelota_y + pelota_height >= paleta_ordenador_top && pelota_y <= paleta_ordenador_top)
{
pelota_contra_lateral = true; //Ha colisionado la pelota contra el lateral superior de la paleta del ordenador.
//Si la pelota iba hacia abajo, invertir movimiento:
if (desplazamiento_y > 0) { invertir_y = true; }
}
//Calcular si la pelota ha colisionado con el lateral inferior de la paleta del ordenador:
else if (pelota_x >= paleta_ordenador_left && pelota_x + pelota_width <= paleta_ordenador_left + paletas_width && pelota_y <= paleta_ordenador_top + paletas_height && pelota_y + pelota_height >= paleta_ordenador_top + paletas_height)
{
pelota_contra_lateral = true; //Ha colisionado la pelota contra el lateral inferior de la paleta del ordenador.
//Si la pelota iba hacia arriba, invertir movimiento:
if (desplazamiento_y < 0) { invertir_y = true; }
}
//Si la pelota ha colisionado con el lateral de alguna paleta:
if (pelota_contra_lateral)
{
//Se vuelve a setear la variable como estaba, por si acaso:
pelota_contra_lateral = false;
//Cancela el movimiento de la pelota:
clearInterval(pelota_movimiento);
//Setear los nuevos valores de desplazamiento de la pelota:
if (desplazamiento_x > 0) { desplazamiento_x = 8; }
else { desplazamiento_x = -8; }
if (desplazamiento_y > 0) { desplazamiento_y = 8; }
else { desplazamiento_y = -8; }
//Si esta seteada a true la variable de invertir las y, se aplica:
if (invertir_y) { desplazamiento_y *= -1; }
//Mueve la pelota con los nuevos valores:
pelota_movimiento = setInterval("mover_pelota();", velocidad_pelota);
//Sale de la funcion:
return;
}
//Variable para calcular la colision frontal o con la esquina de alguna de las paletas con la pelota:
var pelota_contra_frontal = false;
//Variable para saber de quien es la paleta con la que la pelota ha colisionado:
var jugador_rematador = "";
//Calcular si la pelota ha colisionado con el frontal de la paleta del usuario:
if (pelota_y + pelota_height >= paleta_usuario_top && pelota_y <= paleta_usuario_top + paletas_height && pelota_x <= paleta_usuario_left + paletas_width && pelota_x + pelota_width >= paleta_usuario_left)
{
pelota_contra_frontal = true; //Ha colisionado la pelota contra el frontal de la paleta del usuario.
jugador_rematador = "usuario";
}
//Calcular si la pelota ha colisionado con el frontal de la paleta del ordenador:
else if (pelota_y + pelota_height >= paleta_ordenador_top && pelota_y <= paleta_ordenador_top + paletas_height && pelota_x + pelota_width >= paleta_ordenador_left && pelota_x <= paleta_ordenador_left)
{
pelota_contra_frontal = true; //Ha colisionado la pelota contra el frontal de la paleta del ordenador.
jugador_rematador = "ordenador";
}
//Si la pelota ha colisionado con el frontal de alguna paleta:
if (pelota_contra_frontal)
{
//Se vuelve a setear la variable como estaba, por si acaso:
pelota_contra_frontal = false;
//Cancela el movimiento de la pelota:
clearInterval(pelota_movimiento);
//Setear los nuevos valores de desplazamiento vertical de la pelota, segun en que extremo haya colisionado:
if (jugador_rematador == "usuario")
{
//Se dan 10 puntos al usuario:
puntuacion += 10;
//Se actualizan los marcadores:
actualizar_marcadores();
if (pelota_y >= paleta_usuario_top && pelota_y <= paleta_usuario_top + 20)
{
if (desplazamiento_y > 0) { desplazamiento_y = 6; }
else { desplazamiento_y = -6; }
}
else if (pelota_y > paleta_usuario_top + 20 && pelota_y <= paleta_usuario_top + 30)
{
if (desplazamiento_y > 0) { desplazamiento_y = 4; }
else { desplazamiento_y = -4; }
}
else if (pelota_y > paleta_usuario_top + 30 && pelota_y <= paleta_usuario_top + 50)
{
if (desplazamiento_y > 0) { desplazamiento_y = 2; }
else { desplazamiento_y = -2; }
}
else if (pelota_y > paleta_usuario_top + 50 && pelota_y <= paleta_usuario_top + 60)
{
if (desplazamiento_y > 0) { desplazamiento_y = 4; }
else { desplazamiento_y = -4; }
}
else if (pelota_y > paleta_usuario_top + 60 && pelota_y <= paleta_usuario_top + 80)
{
if (desplazamiento_y > 0) { desplazamiento_y = 4; }
else { desplazamiento_y = -4; }
}
else
{
if (desplazamiento_y > 0) { desplazamiento_y = 10; }
else { desplazamiento_y = -10; }
}
//Numero aleatorio para calcular en un lado de la paleta o en otro:
vertical_aleatorio = parseInt(Math.random() * 40);
}
else if (jugador_rematador == "ordenador")
{
if (pelota_y >= paleta_ordenador_top && pelota_y <= paleta_ordenador_top + 20)
{
if (desplazamiento_y > 0) { desplazamiento_y = 6; }
else { desplazamiento_y = -6; }
}
else if (pelota_y > paleta_ordenador_top + 20 && pelota_y <= paleta_ordenador_top + 30)
{
if (desplazamiento_y > 0) { desplazamiento_y = 4; }
else { desplazamiento_y = -4; }
}
else if (pelota_y > paleta_ordenador_top + 30 && pelota_y <= paleta_ordenador_top + 50)
{
if (desplazamiento_y > 0) { desplazamiento_y = 2; }
else { desplazamiento_y = -2; }
}
else if (pelota_y > paleta_ordenador_top + 50 && pelota_y <= paleta_ordenador_top + 60)
{
if (desplazamiento_y > 0) { desplazamiento_y = 4; }
else { desplazamiento_y = -4; }
}
else if (pelota_y > paleta_ordenador_top + 60 && pelota_y <= paleta_ordenador_top + 80)
{
if (desplazamiento_y > 0) { desplazamiento_y = 6; }
else { desplazamiento_y = -6; }
}
else
{
if (desplazamiento_y > 0) { desplazamiento_y = 10; }
else { desplazamiento_y = -10; }
}
}
//Se incrementan dos pixels el movimiento horizontal de la pelota:
if (desplazamiento_x > 0 && desplazamiento_x < 12) { desplazamiento_x += 2; }
else if (desplazamiento_y < 0 && desplazamiento_x > -12) { desplazamiento_x -= 2; }
//Se invierte el movimiento de la pelota:
desplazamiento_x *= -1; //Se invierte el movimiento horizontal.
//desplazamiento_y *= -1; //Se invierte el movimiento vertical.
//Mueve la pelota con los nuevos valores:
pelota_movimiento = setInterval("mover_pelota();", velocidad_pelota);
//Sale de la funcion:
return;
}
//Variable para saber si se ha marcado algun gol:
var se_ha_marcado = false;
//Si ha marcado un gol el ordenador al usuario:
if (pelota_x < 30 - pelota_width)
{
ultimo_ganador = "ordenador"; //Se setea como ultimo ganador al ordenador.
clearInterval(pelota_movimiento); //Se detiene la pelota.
goles_ordenador++; //Se incrementan los goles marcados por el ordenador.
se_ha_de_sacar = true; //Se setea la variable para saber que se ha de sacar de nuevo.
vidas--; //El usuario pierde una vida.
//Se anuncia que el ordenador ha marcado un gol:
if (vidas >= 0 && pelota_moviendose)
{
document.getElementById("cartel_anuncios").innerHTML = "Computer<br>has<br>marked";
document.getElementById("cartel_anuncios").style.visibility = "visible";
//Se setea para saber que se ha marcado un gol:
se_ha_marcado = true;
}
pelota_moviendose = false; //Se indica que la pelota ya no se esta moviendo.
posicionar_pelota(paleta_ordenador_top); //Se posiciona la pelota en la paleta del ordenador.
setTimeout("sacar_pelota();", 2000); //El ordenador saca la pelota despues de 2 segundos (2000 milisegundos).
}
//..y si ha marcado un gol el usuario al ordenador:
else if (pelota_x > area_juego_x - 30)
{
ultimo_ganador = "usuario"; //Se setea como ultimo ganador al usuario.
clearInterval(pelota_movimiento); //Se detiene la pelota.
goles_usuario++; //Se incrementan los goles marcados por el usuario.
puntuacion += 100; //Se dan 100 puntos.
se_ha_de_sacar = true; //Se setea la variable para saber que se ha de sacar de nuevo.
//Se anuncia que el usuario ha marcado un gol, siempre que no se haya de pasar nivel:
if (goles_usuario < 3 && pelota_moviendose)
{
document.getElementById("cartel_anuncios").innerHTML = "You<br>has<br>marked";
document.getElementById("cartel_anuncios").style.visibility = "visible";
//Se setea para saber que se ha marcado un gol:
se_ha_marcado = true;
}
pelota_moviendose = false; //Se indica que la pelota ya no se esta moviendo.
posicionar_pelota(paleta_usuario_top); //Se posiciona la pelota en la paleta del usuario.
}
if (se_ha_marcado && vidas >= 0)
{
//Se muestra el marcador:
if (goles_usuario > goles_ordenador) { setTimeout("document.getElementById('cartel_anuncios').innerHTML = goles_usuario + ' - ' + goles_ordenador + '<br>You<br>win';", 3000); }
else if (goles_usuario < goles_ordenador) { setTimeout("document.getElementById('cartel_anuncios').innerHTML = goles_usuario + ' - ' + goles_ordenador + '<br>Computer<br>wins';", 3000); }
else if (goles_usuario == goles_ordenador) { setTimeout("document.getElementById('cartel_anuncios').innerHTML = goles_usuario + ' - ' + goles_ordenador + '<br>There is<br>tie';", 3000); }
setTimeout("document.getElementById('cartel_anuncios').style.visibility = 'hidden';", 6000);
}
return true;
}
//Funcion que actualiza los marcadores:
function actualizar_marcadores()
{
//Actualiza la barra de estado:
if (vidas >= 0) { document.getElementById("estado").innerHTML = " Lives: "+vidas+" | Level: "+nivel+" | Score: "+puntuacion; }
else { document.getElementById("estado").innerHTML = " Game Over | Level: "+nivel+" | Score: "+puntuacion; }
//Actualizar marcadores:
document.getElementById("marcador_usuario").innerHTML = goles_usuario;
document.getElementById("marcador_ordenador").innerHTML = goles_ordenador;
}
//Funcion que pasa de nivel:
function pasar_nivel()
{
//Se setea el marcador de goles a cero en ambos equipos:
goles_usuario = 0;
goles_ordenador = 0;
//Se incrementa un nivel:
nivel++;
//Se incrementan los reflejos del ordenador, siempre que no haya llegado a su tope (9):
if (reflejos_ordenador < 9) { reflejos_ordenador++; }
//Se dan 500 puntos al usuario:
puntuacion += 500;
//Se incrementa la velocidad, siempre que esta sea mayor a 10:
if (velocidad_pelota > 1) { velocidad_pelota -= 1; } //Decrementamos para aumentar velocidad.
//Se actualizan los marcadores:
actualizar_marcadores();
//Se anuncia que se ha pasado de nivel:
document.getElementById("cartel_anuncios").innerHTML = "Welcome<br>to<br>level "+nivel;
document.getElementById("cartel_anuncios").style.visibility = "visible";
setTimeout("document.getElementById('cartel_anuncios').style.visibility = 'hidden';", 3000);
}
//-->
</script>
</head>
<body onLoad="javascript:document.getElementById('div_control').style.visibility='visible'; document.getElementById('control_teclado').checked = true; iniciar_juego();" onKeyDown="javascript:tecla_pulsada(event, 'onkeypress');" onKeyPress="javascript:tecla_pulsada(event, 'onkeydown');" onMouseMove="javascript:mover_raton(event);" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" bgcolor="#aaaadd">
<!-- Recuadro (borde blanco): -->
<div style="background:#ffffff; color:#ffffff; border:0px; padding:0px; width:708px; height:408px; left:16px; top:16px; position:absolute; font-size:1px; z-index:1;" id="recuadro_juego">
</div>
<!-- Fin de Recuadro (borde blanco). -->
<!-- Area del juego: -->
<div style="background:#000000; color:#000000; border:0px; padding:0px; width:700px; height:400px; left:20px; top:20px; position:absolute; font-size:1px; cursor:crosshair; z-index:2;" id="area_juego" onClick="javascript:hacer_click();">
<!-- Paleta del usuario: -->
<div style="background:#ff0000; color:#ff0000; border:0px; padding:0px; width:20px; height:80px; left:30px; top:0px; position:absolute; font-size:1px; z-index:7;" id="paleta_usuario">
</div>
<!-- Fin de Paleta del usuario. -->
<!-- Porteria del usuario: -->
<div style="background:#ffffff; color:#ffffff; border:0px; padding:0px; width:2px; height:400px; left:25px; top:0px; position:absolute; font-size:1px; z-index:5;" id="porteria_usuario">
</div>
<!-- Fin de Porteria del usuario. -->
<!-- Medio campo: -->
<div style="background:#ffffff; color:#ffffff; border:0px; padding:0px; width:2px; height:390px; left:349px; top:5px; position:absolute; font-size:1px; z-index:3;" id="medio_campo_linea">
</div>
<div style="background:#ffffff; color:#ffffff; border:0px; padding:0px; width:4px; height:4px; left:348px; top:198px; position:absolute; font-size:1px; z-index:4;" id="medio_campo_centro">
</div>
<!-- Fin de Medio campo. -->
<!-- Cartel de anuncio: -->
<div style="visibility:hidden; background:#aabb00; color:#111111; border:0px; padding:0px; width:100px; height:60px; left:300px; top:170px; position:absolute; font-size:14px; font-family:verdana; font-weight:bold; text-align:center; line-height:19px; filter:alpha(opacity=80); opacity:0.8; -moz-opacity:0.8; z-index:15;" id="cartel_anuncios">
</div>
<!-- Fin de Cartel de anuncio. -->
<!-- Pelota: -->
<div style="background:#ffff00; color:#ff0000; border:0px; padding:0px; width:10px; height:10px; left:50px; top:36px; position:absolute; font-size:1px; z-index:9;" id="pelota">
</div>
<!-- Fin de Pelota. -->
<!-- Paleta del ordenador: -->
<div style="background:#ff0000; color:#ff0000; border:0px; padding:0px; width:20px; height:80px; left:650px; top:0px; position:absolute; font-size:1px; z-index:8;" id="paleta_ordenador">
</div>
<!-- Fin de Paleta del ordenador. -->
<!-- Porteria del ordenador: -->
<div style="background:#ffffff; color:#ff0000; border:0px; padding:0px; width:2px; height:400px; left:673px; top:0px; position:absolute; font-size:1px; z-index:6;" id="porteria_ordenador">
</div>
<!-- Fin de Porteria del ordenador. -->
<!-- Marcadores: -->
<div style="background:transparent; color:#00ff00; border:0px; padding:0px; width:24px; height:20px; left:0px; top:2px; position:absolute; font-size:11px; font-family:verdana; font-weight:bold; text-align:center; z-index:10;" id="marcador_usuario">
0
</div>
<div style="background:transparent; color:#00ff00; border:0px; padding:0px; width:24px; height:20px; left:676px; top:2px; position:absolute; font-size:11px; font-family:verdana; font-weight:bold; text-align:center; z-index:11;" id="marcador_ordenador">
0
</div>
<!-- Fin de Marcadores. -->
</div>
<!-- Fin de Area del juego. -->
<!-- Barra de estado: -->
<div style="background:#000033; color:#ffff00; border:0px; padding:0px; width:708px; height:20px; left:16px; top:426px; position:absolute; font-size:14px; font-family:verdana; font-weight:bold; line-height:19px; z-index:12;" id="estado">
Loading...
</div>
<!-- Fin de Barra de estado. -->
<!-- Informacion del autor: -->
<div style="visibility:visible; left:300px; top:428px; width:400px; height:15px; position:absolute; border:0px; padding:0px; background:transparent; color:#ffffff; text-align:right; line-height:15px; text-decoration:none; font-weight:bold; font-family:verdana; font-size:9px; z-index:13;" id="autor">
PunkPong© by Joan Alba Maldonado
</div>
<!-- Fin de Informacion del autor. -->
<div id="div_control" style="left:20px; top:450px; height:0px; position:absolute; visibility:hidden; border:0px; padding:0px; background:transparent; color:#222222; text-align:left; line-height:20px; text-decoration:none; font-family:verdana; font-size:14px; z-index:14;">
Control:
<form style="display:inline;" name="formulario_control">
<label for="control_teclado" onClick="javascript:tipo_control='teclado'; document.getElementById('div_desenfocar').style.visibility='visible'; formulario_control.desenfocar.focus(); document.getElementById('div_desenfocar').style.visibility='hidden';"><input type="radio" id="control_teclado" name="control" value="teclado" onClick="javascript:t?_control='teclado'; document.getElementById('div_desenfocar').style.visibility='visible'; formulario_control.desenfocar.focus(); document.getElementById('div_desenfocar').style.visibility='hidden';" checked>Keyboard</label> <label for="control_raton" onClick="javascript:tipo_control='raton'; document.getElementById('div_desenfocar').style.visibility='visible'; formulario_control.desenfocar.focus(); document.getElementById('div_desenfocar').style.visibility='hidden';"><input type="radio" id="control_raton" name="control" value="raton" onClick="javascript:tipo_control='raton'; document.getElementById('div_desenfocar').style.visibility='visible'; formulario_control.desenfocar.focus(); document.getElementById('div_desenfocar').style.visibility='hidden';">Mouse</label>
<div style="visibility:hidden; position:absolute;" id="div_desenfocar"><input type="text" name="desenfocar"></div>
</form>
</div>
<!-- Informacion: -->
<div style="left:20px; top:480px; height:0px; position:absolute; border:0px; padding:0px; background:transparent; color:#222222; text-align:left; line-height:20px; text-decoration:none; font-family:verdana; font-size:14px; z-index:14;">
© <b>PunkPong</b> 0.26a
<br>
by <i>Joan Alba Maldonado</i> (<a href="mailto:granvino@granvino.com;">granvino@granvino.com</a>) <sup>(DHTML 100%)</sup>
<br> - Prohibited to publish, reproduce or modify without maintain author's name.
<br>
<tt>* Use the keyboard arrows to move, and right arrow (also spacebar, control, shift or return)
<br>
to fire (when is your turn).
<br>
Under Opera, leave the mouse cursor over game zone.
<br>
<b>Each 3 goals you up a level and enemy are hardest.</b></tt>
<br>
<i>Dedicated to Yasmina Llaveria del Castillo</i>
<!-- Fin de Informacion. -->
</body>
</html>
Related examples in the same category