Game PunkPong : Game « Page Components « JavaScript DHTML






Game PunkPong

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>PunkPong &copy; (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 = "&nbsp; Lives: "+vidas+" | Level: "+nivel+" | Score: "+puntuacion; }
                else { document.getElementById("estado").innerHTML = "&nbsp; 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">
            &nbsp; 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">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PunkPong&copy; 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;">
            &copy; <b>PunkPong</b> 0.26a
            <br>
            &nbsp;&nbsp;by <i>Joan Alba Maldonado</i> (<a href="mailto:granvino@granvino.com;">granvino@granvino.com</a>) &nbsp;<sup>(DHTML 100%)</sup>
            <br>&nbsp;&nbsp;- Prohibited to publish, reproduce or modify without maintain author's name.
            <br>
            &nbsp;&nbsp;<tt>* Use the keyboard arrows to move, and right arrow (also spacebar, control, shift or return)
            <br>
            &nbsp;&nbsp;  to fire (when is your turn).
            <br>
            &nbsp;&nbsp; Under Opera, leave the mouse cursor over game zone.
            <br>
            &nbsp;&nbsp; <b>Each 3 goals you up a level and enemy are hardest.</b></tt>
            <br>
            &nbsp;&nbsp;<i>Dedicated to Yasmina Llaveria del Castillo</i>
        <!-- Fin de Informacion. -->
    </body>
</html>


           
       








Related examples in the same category

1.Chess: Draughts
2.Mine game
3.Word search game
4.Ranisima english
5.Yasminuroban (by Joan Alba Maldonado)
6.Level editor for Yasminuroban by Joan Alba Maldonado
7.js mine sweeper
8.Another tictactoe
9.Marbles
10.Jigsaw
11.Game sudoku
12.Tetris in Javascript
13.Arrange Game
14.Guess Number
15.Tic tac toe
16.Count Game
17. A JavaScript Hangman Game
18.Game library
19.Type Tutor
20.Game: Place It (IE only)
21.HylZee