Ranisima english : Game « Page Components « JavaScript DHTML

JavaScript DHTML
1. Ajax Layer
2. Data Type
3. Date Time
4. Development
5. Document
6. Event
7. Event onMethod
8. Form Control
9. GUI Components
10. HTML
11. Javascript Collections
12. Javascript Objects
13. Language Basics
14. Node Operation
15. Object Oriented
16. Page Components
17. Security
18. Style Layout
19. Table
20. Utilities
21. Window Browser
Microsoft Office Word 2007 Tutorial
Java
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
JavaScript DHTML » Page Components » Game 
Ranisima english


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>La Ran&iacute;sima &copy; (by Joan Alba Maldonado)</title>
        <!-- (cLa Ranisima - 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) La Ranisima - Programa realizado por Joan Alba Maldonado (granvino@granvino.com). Prohibido publicar, reproducir o modificar sin citar expresamente al autor original.

            //Se crean las imagenes de la animacion del personaje y de los enemigos, de forma global:
            if (document.images)
             {
                //Se crean los objetos:
                var personaje_imagen1 = new Image(4040);
                var personaje_imagen2 = new Image(4040);
                var enemigo1_imagen1 = new Image(4040);
                var enemigo1_imagen2 = new Image(4040);
                var enemigo2_imagen1 = new Image(4040);
                var enemigo2_imagen2 = new Image(4040);
                var enemigo3_imagen1 = new Image(4040);
                var enemigo3_imagen2 = new Image(4040);
                var enemigo4_imagen1 = new Image(4040);
                var enemigo4_imagen2 = new Image(4040);
                var enemigo5_imagen1 = new Image(4040);
                var enemigo5_imagen2 = new Image(4040);
                var enemigo6_imagen1 = new Image(4040);
                var enemigo6_imagen2 = new Image(4040);
                var explosion_imagen = new Image(4040);
                
                //Se les asigna una imagen:
                personaje_imagen1.src = "imagenes/rana1.gif";
                personaje_imagen2.src = "imagenes/rana2.gif";
                enemigo1_imagen1.src = "imagenes/mosca1.gif";
                enemigo1_imagen2.src = "imagenes/mosca2.gif";
                enemigo2_imagen1.src = "imagenes/mosca1.gif";
                enemigo2_imagen2.src = "imagenes/mosca2.gif";
                enemigo3_imagen1.src = "imagenes/mosca1.gif";
                enemigo3_imagen2.src = "imagenes/mosca2.gif";
                enemigo4_imagen1.src = "imagenes/mosca1.gif";
                enemigo4_imagen2.src = "imagenes/mosca2.gif";
                enemigo5_imagen1.src = "imagenes/mosca1.gif";
                enemigo5_imagen2.src = "imagenes/mosca2.gif";
                enemigo6_imagen1.src = "imagenes/mosca1.gif";
                enemigo6_imagen2.src = "imagenes/mosca2.gif";
                explosion_imagen.src = "imagenes/boom.gif";
             }

            //Se define la variable para que no se cambie la imagen del personaje, a no ser que se ejecute movimiento:
            var cambiar_imagen = false;
            
            //Se define la variable que guardara el primer evento que se ejecute (para que no se ejecute onKeyDown y onKeyPress a la vez en Firefox, ya que causaria demasiada velocidad de movimiento):
            var primer_evento = "";

            //Variable que setea el modo Dios (invencible), para el periodo que transcurre desde una colision hasta el reposicionamiento (para que solo reste una vida):
            var modo_dios = false;

            //Variable que setea el numero de disparos que se han ejecutado y siguen en pantalla:
            var numero_disparos = 0;
            
            //Variable que setea el numero maximo de disparos permitido mientras esten en pantalla:
            var numero_disparos_tope = 5;
            
            //El numero de milisegundos que deben pasar entre disparo y disparo:
            var milisegundos_repeticion_disparo = 200;

            //La velocidad de los disparos:
            var velocidad_disparos = 30;

            //Variable que setea el bloqueo del disparo (para que no se dispare mas de lo debido, cuando el numero de disparos llega al tope o para que no se dispare muy deprisa):
            var bloquear_disparo = false;
            
            //Se define la direccion de inicio de los enemigos (tanto horizontal como vertical):
            var direccion_enemigos_x = "derecha"//Direccion horizontal de inicio.
            var direccion_enemigos_y = "abajo"//Direccion vertical de inicio.
            
            //Se define la velocidad inicial de los enemigos:
            var velocidad_enemigos_inicial = 1050//Esta es constante
            var velocidad_enemigos = velocidad_enemigos_inicial; //Esta se ira decrementando cada vez que se pase de nivel (entre mas baja mas rapido).
            
            //Se define el desplazamiento inicial de los enemigos (cuantos pixels se desplazan por cada movimiento):
            var desplazamiento_enemigos_inicial = 25//Esta es una constante.
            var desplazamiento_enemigos = desplazamiento_enemigos_inicial; //Esta se ira incrementando cada vez que se pase de nivel.

            //Define la variable de enemigos existentes, para los distintos niveles (cuantos tipos distintos hay):
            var enemigos_existentes = 7;
            
            //Define la variable para saber que enemigos utilizar al principio (al cambiar de nivel se va incrementando, hasta alcanzar el numero de enemigos existentes y se pone otra vez a 1):
            var enemigos_nivel = 1;
            
            //Se define el numero de vidas inicial, para el personaje:
            var vidas_iniciales = 3//Esta es constante
            var vidas = vidas_iniciales; //Esta ira restando cada vez que se pierda una vida.

            //Se define el numero de nivel inicial (numero de pantalla):
            var nivel = 1;

            //Se define la variable que contendra la puntuacion:
            var puntuacion = 0;
            
            //Se define el contador de enemigos matados (en cada nivel se pondra a cero):
            var enemigos_matados = 0;

            //Se definen las variables para hacer los setInterval y setTimeout, para que no den error al ejecutar clearInterval y clearTimeout la primera vez:
            var animacion_enemigo1 = "";
            var animacion_enemigo2 = "";
            var animacion_enemigo3 = "";
            var animacion_enemigo4 = "";
            var animacion_enemigo5 = "";
            var animacion_enemigo6 = "";
            var movimiento_enemigo1 = "";
            var movimiento_enemigo2 = "";
            var movimiento_enemigo3 = "";
            var movimiento_enemigo4 = "";
            var movimiento_enemigo5 = "";
            var movimiento_enemigo6 = "";                                    
            var movimiento_alas1 = "";
            var movimiento_alas2 = "";
            var balanceo_horizontal1 = "";
            var balanceo_horizontal2 = "";
            var balanceo_vertical1 = "";
            var balanceo_vertical2 = "";


            //Funcion que inicia el juego:
            function iniciar_juego()
             {
                //Se setea el numero de vidas a vidas_iniciales:
                vidas = vidas_iniciales;
                
                //Se setea el numero de nivel otra vez a cero:
                nivel = 1;
                
                //Se setea la puntuacion a cero:
                puntuacion = 0;
                
                //Se setean los enemigos matados a cero:
                enemigos_matados = 0;

                //Se setea la velocidad de los enemigos a la inicial:
                velocidad_enemigos = velocidad_enemigos_inicial; 
                
                //Se setea los pixels de desplazamiento del enemigo a su estado inicial:
                desplazamiento_enemigos = desplazamiento_enemigos_inicial;
              
                //Se indica el numero de vidas en el panel de estado:
                actualizar_barra_estado();

                //Se setea la variable que indica que enemigos mostrar, para que se muestre el primer enemigo:
                enemigos_nivel = 1;
                
                //Se setean las imagenes de los enemigos a los primeros:
                enemigo1_imagen1.src = "imagenes/mosca1.gif";
                enemigo1_imagen2.src = "imagenes/mosca2.gif";
                enemigo2_imagen1.src = "imagenes/mosca1.gif";
                enemigo2_imagen2.src = "imagenes/mosca2.gif";
                enemigo3_imagen1.src = "imagenes/mosca1.gif";
                enemigo3_imagen2.src = "imagenes/mosca2.gif";
                enemigo4_imagen1.src = "imagenes/mosca1.gif";
                enemigo4_imagen2.src = "imagenes/mosca2.gif";
                enemigo5_imagen1.src = "imagenes/mosca1.gif";
                enemigo5_imagen2.src = "imagenes/mosca2.gif";
                enemigo6_imagen1.src = "imagenes/mosca1.gif";
                enemigo6_imagen2.src = "imagenes/mosca2.gif";

                //Hacer visibles a todos los enemigos (por si acaso estuviera alguno invisible de una partida anterior):
                for (x=1; x<=6; x++)
                 {
                    //Hace visible al enemigo X:
                    document.getElementById("enemigo"+x).style.visibility = "visible";
                 }

                //Se oculta el texto de "tu estas aqui", si aun esta visible, en 3000 milisegundos (3 segundos) :
                if (document.getElementById('tu_estas_aqui').style.visibility == "visible") { setTimeout("document.getElementById('tu_estas_aqui').style.visibility = 'hidden';"3000)}
                
                //Posiciona los personajes:
                posicionar_personajes();
             }

            //Funcion que posiciona los personajes (al inicio del juego y despues de una vida):
            function posicionar_personajes()
             {
                //Inicia los enemigos:
                iniciar_enemigos();

                //Inicia el personaje:
                iniciar_personaje();
             }

            //Funcion que inicia al personaje:
            function iniciar_personaje()
             {
                document.getElementById("personaje").style.left = "250px";
                document.getElementById("personaje").style.top = "250px";
             }

            //Funcion que inicia a los enemigos:
            function iniciar_enemigos()
             {
                 //Posicionar enemigos en sus posiciones iniciales:
                 document.getElementById("enemigo1").style.left = "120px";
                 document.getElementById("enemigo1").style.top = "120px";
                 document.getElementById("enemigo2").style.left = "450px";
                 document.getElementById("enemigo2").style.top = "120px";
                 document.getElementById("enemigo3").style.left = "350px";
                 document.getElementById("enemigo3").style.top = "120px";
                 document.getElementById("enemigo4").style.left = "450px";
                 document.getElementById("enemigo4").style.top = "20px";
                 document.getElementById("enemigo5").style.left = "150px";
                 document.getElementById("enemigo5").style.top = "50px";
                 document.getElementById("enemigo6").style.left = "250px";
                 document.getElementById("enemigo6").style.top = "90px";
                 
                 //Matar los intervalos de animacion y de posicionamiento anteriores, si existen (con clearInterval):
                 clearInterval(animacion_enemigo1, 30);
                 clearInterval(animacion_enemigo2, 30);
                 clearInterval(animacion_enemigo3, 30);
                 clearInterval(animacion_enemigo4, 30);
                 clearInterval(animacion_enemigo5, 30);
                 clearInterval(animacion_enemigo6, 30);
                 clearInterval(movimiento_enemigo1, 30);
                 clearInterval(movimiento_enemigo2, 30);
                 clearInterval(movimiento_enemigo3, 30);
                 clearInterval(movimiento_enemigo4, 30);
                 clearInterval(movimiento_enemigo5, 30);
                 clearInterval(movimiento_enemigo6, 30);

                 //Animar enemigos:
                 setTimeout("var animacion_enemigo1 = setInterval('animar_enemigo(1);', 1000)"100);
                 setTimeout("var animacion_enemigo2 = setInterval('animar_enemigo(2);', 1000)"100);
                 setTimeout("var animacion_enemigo3 = setInterval('animar_enemigo(3);', 1000)"100);
                 setTimeout("var animacion_enemigo4 = setInterval('animar_enemigo(4);', 1000)"100);
                 setTimeout("var animacion_enemigo5 = setInterval('animar_enemigo(5);', 1000)"100);
                 setTimeout("var animacion_enemigo6 = setInterval('animar_enemigo(6);', 1000)"100);
                                                   
                 //Mover enemigos:
                 setTimeout("movimiento_enemigo1 = setInterval('mover_enemigo(1);', velocidad_enemigos);"100);
                 setTimeout("movimiento_enemigo2 = setInterval('mover_enemigo(2);', velocidad_enemigos);"100);
                 setTimeout("movimiento_enemigo3 = setInterval('mover_enemigo(3);', velocidad_enemigos);"100);
                 setTimeout("movimiento_enemigo4 = setInterval('mover_enemigo(4);', velocidad_enemigos);"100);
                 setTimeout("movimiento_enemigo5 = setInterval('mover_enemigo(5);', velocidad_enemigos);"100);
                 setTimeout("movimiento_enemigo6 = setInterval('mover_enemigo(6);', velocidad_enemigos);"100);

                //Detectar colision:
                setInterval("detectar_colision(1);"1);
                setInterval("detectar_colision(2);"1);
                setInterval("detectar_colision(3);"1);
                setInterval("detectar_colision(4);"1);
                setInterval("detectar_colision(5);"1);
                setInterval("detectar_colision(6);"1);
             }

            //Funcion para animar un enemigo:
            function animar_enemigo(numero_enemigo)
             {
                 //Se matan todos los setTimeout anteriores, con la ayuda de clearTimeout:
                 clearTimeout(movimiento_alas1, 30);
                 clearTimeout(movimiento_alas2, 30);
                 clearTimeout(balanceo_horizontal1, 30);
                 clearTimeout(balanceo_horizontal2, 30);
                 clearTimeout(balanceo_vertical1, 30);
                 clearTimeout(balanceo_vertical2, 30);

                
                //Se llama a la funcion que anima al enemigo en si (despues de 20 milisegundos para que no interfiera con los clearTimeout de arriba):
                setTimeout("animacion_enemigo("+numero_enemigo+");"100);
             }

            //Funcion que contiene la animacion del enemigo:
            function animacion_enemigo(numero_enemigo)
             {
                 //Se mueven sus alas (se alternan las imagenes):
                 var movimiento_alas1 = setTimeout("document.images['enemigo"+numero_enemigo+"_imagen'].src = enemigo"+numero_enemigo+"_imagen1.src;"20);
                 var movimiento_alas2 = setTimeout("document.images['enemigo"+numero_enemigo+"_imagen'].src = enemigo"+numero_enemigo+"_imagen2.src;"400);

                 //Se anima (mueve) horizontalmente:
                 var balanceo_horizontal1 = setTimeout("document.getElementById('enemigo"+numero_enemigo+"').style.left = parseInt(document.getElementById('enemigo"+numero_enemigo+"').style.left) + 5 + 'px';"20);
                 var balanceo_horizontal2 = setTimeout("document.getElementById('enemigo"+numero_enemigo+"').style.left = parseInt(document.getElementById('enemigo"+numero_enemigo+"').style.left) - 5 + 'px';"400);
                
                 //Se anima (mueve) verticalmente:
                 var balanceo_vertical1 = setTimeout("document.getElementById('enemigo"+numero_enemigo+"').style.top = parseInt(document.getElementById('enemigo"+numero_enemigo+"').style.top) + 5 + 'px';"20);
                 var balanceo_vertical2 = setTimeout("document.getElementById('enemigo"+numero_enemigo+"').style.top = parseInt(document.getElementById('enemigo"+numero_enemigo+"').style.top) - 5 + 'px';"400);
             }
            

            //Funcion que mueve al enemigo:
            function mover_enemigo(numero_enemigo)
             {
                //Define la variable que calcula si se ha tocado el bode lateral (de momento, no):
                var tocado_borde_lateral = false;
                
                //Se calculan los topes (bordes) para saber si se alcanzan:
                var borde_horizontal_derecho = 500 40 - desplazamiento_enemigos; //borde = 500 - 40 - desplazamiento_enemigos
                var borde_horizontal_izquierdo = + desplazamiento_enemigos; //borde = 0 + desplazamiento_enemigos
                var borde_vertical_inferior = 500 40 - desplazamiento_enemigos; //borde = 500 - 40 - desplazamiento_enemigos
                var borde_vertical_superior = + desplazamiento_enemigos; //borde = 0 + desplazamiento_enemigos
                
                //Si se ha alcanzado el borde derecho, el enemigo ira hacia la izquierda:
                if (parseInt(document.getElementById("enemigo"+numero_enemigo).style.left>= borde_horizontal_derecho)
                 {
                    //La direccion horizontal sera hacia la izquierda:
                    direccion_enemigos_x = "izquierda";
                    //Se setea la variable como que se ha tocado borde:
                    tocado_borde_lateral = true;
                 }
                //...y si no, si se ha alcanzado el borde izquierdo, el enemigo ira hacia la derecha:
                else if (parseInt(document.getElementById("enemigo"+numero_enemigo).style.left<= borde_horizontal_izquierdo)
                 {
                    //La direccion horizontal sera hacia la derecha:
                    direccion_enemigos_x = "derecha";
                    //Se setea la variable como que se ha tocado borde:
                    tocado_borde_lateral = true;
                 }

                //Si se ha alcanzado el borde inferior, el enemigo ira hacia arriba:
                if (parseInt(document.getElementById("enemigo"+numero_enemigo).style.top>= borde_vertical_inferior)
                 {
                    //La direccion vertical sera hacia arriba:
                    direccion_enemigos_y = "arriba";
                 }
                //...y si no, si se ha alcanzado el borde izquierdo, el enemigo ira hacia la derecha:
                else if (parseInt(document.getElementById("enemigo"+numero_enemigo).style.top<= borde_vertical_superior)
                 {
                    //La direccion vertical sera hacia abajo:
                    direccion_enemigos_y = "abajo";
                 }

                //Si la direccion horizontal es "izquierda":
                if (direccion_enemigos_x == "izquierda")
                 {
                    //Mueve el enemigo hacia la izquierda:
                    document.getElementById("enemigo"+numero_enemigo).style.left = parseInt(document.getElementById("enemigo"+numero_enemigo).style.left- desplazamiento_enemigos + "px";
                 }
                //...y si la direccion horizontal es "derecha":
                else if (direccion_enemigos_x == "derecha")
                 {
                    //Mueve el enemigo hacia la derecha:
                    document.getElementById("enemigo"+numero_enemigo).style.left = parseInt(document.getElementById("enemigo"+numero_enemigo).style.left+ desplazamiento_enemigos + "px";
                 }

                //Si la direccion vertical es "arriba" y ha tocado el borde lateral:
                if (direccion_enemigos_y == "arriba" && tocado_borde_lateral)
                 {
                    //Mueve el enemigo hacia arriba:
                    document.getElementById("enemigo"+numero_enemigo).style.top = parseInt(document.getElementById("enemigo"+numero_enemigo).style.top- desplazamiento_enemigos + "px";
                 }
                //...y si la direccion vertical es "abajo" y ha tocado el borde lateral:
                else if (direccion_enemigos_y == "abajo" && tocado_borde_lateral)
                 {
                    //Mueve el enemigo hacia abajo:
                    document.getElementById("enemigo"+numero_enemigo).style.top = parseInt(document.getElementById("enemigo"+numero_enemigo).style.top+ desplazamiento_enemigos + "px";
                 }
                
             }

            //Funcion que detecta una colision del personaje contra un enemigo:
            function detectar_colision (numero_enemigo)
             {
                //Si el enemigo no esta visible quiere decir que esta muerto y por lo tanto no puede matarnos, asi que salimos de la funcion:
                if (document.getElementById("enemigo"+numero_enemigo).style.visibility != "visible") { return}
                
                //Detectar posicion del personaje:
                personaje_pos_x = parseInt(document.getElementById("personaje").style.left);
                personaje_pos_y = parseInt(document.getElementById("personaje").style.top);

                //Detectar posicion del enemigo:
                enemigo_pos_x = parseInt(document.getElementById("enemigo"+numero_enemigo).style.left);
                enemigo_pos_y = parseInt(document.getElementById("enemigo"+numero_enemigo).style.top);
                
                //Calcular si coinciden horizontalmente:
                if (personaje_pos_x + 40 > enemigo_pos_x && personaje_pos_x < enemigo_pos_x || personaje_pos_x < enemigo_pos_x + 40 && personaje_pos_x > enemigo_pos_x)
                 {
                    //Calcular si tambien coinciden verticalmente: 
                    if (personaje_pos_y < enemigo_pos_y + 40 && personaje_pos_y > enemigo_pos_y || personaje_pos_y + 40 > enemigo_pos_y && personaje_pos_y < enemigo_pos_y)
                     {
                        //Si esta el modo Dios activado, sale de la funcion (para no restar vidas):
                        if (modo_dios) { return}
                        
                        //Como han chocado, se quita una vida:
                        vidas -= 1;
                        
                        //Se setea el modo Dios, para que no puedan matar al personaje durante este periodo (hasta que se posicione otra vez):
                        modo_dios = true;

                        //Se muestra en el ID del personaje una explosion a los 300 milisegundos (con z-index a 40), y a los 3000 milisegundos (2700 despues) se vuelve al personaje normal (con z-index original):
                        setTimeout("document.images['personaje_imagen'].src = explosion_imagen.src; document.getElementById('personaje').style.zIndex = 40;"210);
                        setTimeout("document.images['personaje_imagen'].src = personaje_imagen1.src; document.getElementById('personaje').style.zIndex = 5;"3000);
                        
                        //Si las vidas es menor a 0, se presenta "Game Over" y se sale de la funcion:
                        if (vidas < 0)
                         {
                            //Presenta "Game Over" en el panel de estado:
                            actualizar_barra_estado();
                            
                            //Cancelar todos los disparos:
                            for (x=1; x<=numero_disparos_tope; x++)
                             {
                                //Elimina de la pantalla el disparo X:
                                eliminar_disparo(x);
                             }
                            
                            //Alerta de "Game Over" (despues de un tiempo, ya que si no no daria tiempo a la rana a cambiar a "explosion"):
                            setTimeout("alert('Game Over. Click on button to play again.');"300);
                            
                            //Se inicia el juego otra vez y se quita el modo Dios, al esperar 3000 milisegundos (3 segundos):
                            setTimeout("iniciar_juego(); modo_dios = false;"3000);
                            
                            //Sale de la funcion:
                            return;
                         }
                        
                        //Se indican las vidas en el panel de estado:
                        actualizar_barra_estado();
                       &n