Yasminuroban (by Joan Alba Maldonado) : 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 
Yasminuroban (by Joan Alba Maldonado)


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


                //Variable que guarda el primer evento del teclado (razones de compatibilidad):
                var primer_evento = "";
                
                //Matriz que contendra los niveles:
                var niveles = new Array();
                
                //El ancho de las celdas:
                var celda_width = 40;
                
                //El alto de las celdas:
                var celda_height = 40;
    
                //El numero de piezas que deben ser colocadas:
                var numero_piezas_totales = 0;
                //El contador de piezas ya colocadas:
                var numero_piezas_colocadas = 0;

                //El numero de nivel:
                var nivel = 1;
                
                //El numero de niveles que hay en total (se calcula en generar_niveles):
                var numero_niveles = 0;
                
                //Matriz que guarda los movimientos efectuados:
                var movimientos_anteriores = new Array();
                //Variable que define que numero de movimientos se han realizado:
                var numero_movimientos = 0;
                //Variable que muestra el numero de movimientos realizados:
                var numero_movimientos_mostrar = numero_movimientos;
                
                //Variable que contendra el Timeout del movimiento del personaje:
                var movimiento_personaje = setTimeout(""1)//Se setea para que no de error el primer clearTimeout.
                
                //Variable que indica si ya se ha comprobado el envio de un mapa por url (GET), para usar niveles del editor:
                var mapa_url_recogido = false;

                //Variable que guarda la url que enlaza con el editor (para editar el nivel actual):
                var url_editor = "editor.htm";
                
                //Funcion para saber si ya se ha saludado (dando instrucciones de poner todas las botellas en sus copas):
                var se_ha_saludado = false;
                
                //Variable que define si el juego ya se ha iniciado o no (para no dar error al pulsar una tecla mientras carga el juego):
                var juego_iniciado = false;
                
                //Imagenes del juego:
                if (document.images)
                 {
                    //Se crean los objetos:
                    var img_pared1 = new Image(celda_width, celda_height);
                    var img_pared2 = new Image(celda_width, celda_height);
                    var img_pared3 = new Image(celda_width, celda_height);
                    var img_pieza = new Image(celda_width, celda_height);
                    var img_agujero_vacio = new Image(celda_width, celda_height);
                    var img_agujero_lleno = new Image(celda_width, celda_height);
                    var img_personaje_derecha1 = new Image(celda_width, celda_height);
                    var img_personaje_derecha2 = new Image(celda_width, celda_height);
                    var img_personaje_izquierda1 = new Image(celda_width, celda_height);
                    var img_personaje_izquierda2 = new Image(celda_width, celda_height);
                    var img_personaje_arriba1 = new Image(celda_width, celda_height);
                    var img_personaje_arriba2 = new Image(celda_width, celda_height);
                    var img_personaje_abajo1 = new Image(celda_width, celda_height);
                    var img_personaje_abajo2 = new Image(celda_width, celda_height);
                    //Se define el numero total de imagenes de paredes (para poder alternarlas):
                    var numero_img_paredes = 3;
                    //Se crean las imagenes en los objetos:
                    img_pared1.src = "img/piedra1.gif"//Imagen de la pared #1.
                    img_pared2.src = "img/piedra2.gif"//Imagen de la pared #2.
                    img_pared3.src = "img/piedra3.gif"//Imagen de la pared #3.
                    img_pieza.src = "img/botella.gif"//Imagen de la pieza.
                    img_agujero_vacio.src = "img/copa1.gif"//Imagen del agujero vacio.
                    img_agujero_lleno.src = "img/copa2.gif"//Imagen del agujero lleno.
                    img_personaje_derecha1.src = "img/yas_right1.gif"//Imagen del personaje hacia la derecha #1.
                    img_personaje_derecha2.src = "img/yas_right2.gif"//Imagen del personaje hacia la derecha #2.
                    img_personaje_izquierda1.src = "img/yas_left1.gif"//Imagen del personaje hacia la izquierda #1.
                    img_personaje_izquierda2.src = "img/yas_left2.gif"//Imagen del personaje hacia la izquierda #2.
                    img_personaje_arriba1.src = "img/yas_up1.gif"//Imagen del personaje hacia arriba #1.
                    img_personaje_arriba2.src = "img/yas_up2.gif"//Imagen del personaje hacia arriba #2.
                    img_personaje_abajo1.src = "img/yas_down1.gif"//Imagen del personaje hacia abajo #1.
                    img_personaje_abajo2.src = "img/yas_down2.gif"//Imagen del personaje hacia abajo #2.
                    //Se crea la imagen que usara el personaje en cada momento:
                    var imagen_personaje = new Image(celda_width, celda_height);
                    imagen_personaje.src = img_personaje_abajo1.src;
                 }
    
                
                //Funcion que inicia el juego:
                function iniciar_juego(numero_nivel)
                 {
                    //Genera los niveles:
                    generar_niveles();
                    
                    //Crea la url para ir al editor y poder editar el nivel actual:
                    generar_url_editor(numero_nivel);
                    
                    //Se pone como imagen inicial del personaje la que mira hacia abajo:
                    document.getElementById("personaje").innerHTML = '<img src="img/yas_down1.gif" id="personaje_imagen" title="You are here" alt="@" width="'+celda_width+'" height="'+celda_height+'" border="0" hspace="0" vspace="0">';
                   
                    //Se borran los movimientos anteriores y se setea el contador de movimientos a cero:
                    movimientos_anteriores = new Array();
                    numero_movimientos = 0;
                    numero_movimientos_mostrar = numero_movimientos;

                    //Se setea el nivel a 1 o al que corresponda:
                    nivel = numero_nivel;

                    //Se adecua el tama??las celdas al tama?? mapa:
                    if (niveles[nivel]["width"48 || niveles[nivel]["height"30) { celda_width = 10; celda_height = 10}
                    else if (niveles[nivel]["width"32 || niveles[nivel]["height"24) { celda_width = 15; celda_height = 15}
                    else if (niveles[nivel]["width"26 || niveles[nivel]["height"18) { celda_width = 20; celda_height = 20}
                    else if (niveles[nivel]["width"20 || niveles[nivel]["height"12) { celda_width = 30; celda_height = 30}
                    else celda_width = 40; celda_height = 40}
                    //Se aplican los cambios de tama??                   document.getElementById("personaje").style.width = celda_width + "px";
                    document.getElementById("personaje").style.height = celda_height + "px";
                    document.getElementById("personaje").innerHTML = '<img src="img/yas_down1.gif" id="personaje_imagen" title="You are here" alt="@" width="'+celda_width+'" height="'+celda_height+'" border="0" hspace="0" vspace="0">';

                    //Se setea el numero de piezas colocadas a cero:
                    numero_piezas_colocadas = 0;

                    //Muestra el mapa en pantalla:
                    pintar_mapa(true);

                    //Guarda el mapa anterior, para poder realizar deshacer:
                    guardar_mapa();

                    //Actualiza la barra de estado:
                    actualizar_barra();

                    //Se informa del nivel en el mensaje:
                    document.getElementById("mensaje").innerHTML = "Welcome to Level: "+nivel;
                    //Se hace visible el mensaje:
                    document.getElementById("mensaje").style.visibility = "visible";
                    //Se oculta el mensaje despues de 3 segundos:
                    setTimeout("document.getElementById('mensaje').style.visibility='hidden'"3000)

                    //Si el nivel es el primero y aun no se ha saludado, dando instrucciones, se hace:
                    if (nivel <= && !se_ha_saludado) { alert("Welcome to the first level. Place all the bottles in the glasses."); se_ha_saludado = true}
                 }
                

                //Funcion que genera los niveles:
                function generar_niveles()
                 {
                    //Leyenda:
                    //   => Vacio.
                    // # => Pared (piedra).
                    // @ => Posicion inicial del personaje (yasmina).
                    // $ => Pieza (botella).
                    // · => Agujero para la pieza (copa vacia).
                    // * => Agujero con una pieza (copa llena).
                    // + => Personaje encima de un agujero para la pieza (mezcla de @ con ·).

                    //Nivel 1:
                    niveles[1new Array();
                    niveles[1]["forma""    #####          " +
                                          "    #   #          " +
                                          "    #$  #          " +
                                          "  ###  $##         " +
                                          "  #  $ $ #         " +
                                          "### # ## #   ######" +
                                          "#   # ## #####  ··#" +
                                          "# $  $          ··#" +
                                          "##### ### #@##  ··#" +
                                          "    #     #########" +
                                          "    #######        "//Mapa del nivel 1.
                    niveles[1]["width"19//Columnas.
                    niveles[1]["height"11//Filas.

                    //Nivel 2:
                    niveles[2new Array();
                    niveles[2]["forma""##########" +
                                          "####   # #" +
                                          "#· $ $·# #" +
                                          "#· +$ ## #" +
                                          "#$ $  $··#" +
                                          "#  #######"//Mapa del nivel 2.
                    niveles[2]["width"10//Columnas.
                    niveles[2]["height"6//Filas.

                    //Nivel 3:
                    niveles[3new Array();
                    niveles[3]["forma""############  " +
                                          "#··  #     ###" +
                                          "#··  # $  $  #" +
                                          "#··  #$####  #" +
                                          "#··    @ ##  #" +
                                          "#··  # #  $ ##" +
                                          "###### ##$ $ #" +
                                          "  # $  $ $ $ #" +
                                          "  #    #     #" +
                                          "  ############"//Mapa del nivel 3.
                    niveles[3]["width"14//Columnas.
                    niveles[3]["height"10//Filas.

                    //Nivel 4:
                    niveles[4new Array();
                    niveles[4]["forma""##   #   #  ##" +
                                          "#            #" +
                                          "##### $@$ ####" +
                                          "·   ##$$$##  ·" +
                                          "#        #   #" +
                                          "··   #      ··" +
                                          "··  ##$$$ # ··" +
                                          "##### $ $ ####" +
                                          "##            " +
                                          "###   #  #  ##"//Mapa del nivel 4.
                    niveles[4]["width"14//Columnas.
                    niveles[4]["height"10//Filas.

                    //Nivel 5:
                    niveles[5new Array();
                    niveles[5]["forma""        ######## " +
                                          "        #     @# " +
                                          "        # $#$ ## " +
                                          "        # $  $#  " +
                                          "        ##$ $ #  " +
                                          "######### $ # ###" +
                                          "#····  ## $  $  #" +
                                          "##···    $  $   #" +
                                          "#····  ##########" +
                                          "########         "//Mapa del nivel 5.
                    niveles[5]["width"17//Columnas.
                    niveles[5]["height"10//Filas.

                    //Nivel 6:
                    niveles[6new Array();
                    niveles[6]["forma""# # # #     # # #" +
                                          "   $      #      " +
                                          "#        $  ·   #" +
                                          " $ $ $ $  #$ # $ " +
                                          " # # # # #·      " +
                                          "  ·   ·   $# #·#·" +
                                          "# $ $  #$#· $ $ $" +
                                          " · ·  ·       ·  " +
                                          "   #$#$#  $      " +
                                          "#· · ·  #·#·#·#+#"//Mapa del nivel 6.
                    niveles[6]["width"17//Columnas.
                    niveles[6]["height"10//Filas.

                    //Nivel 7:
                    niveles[7new Array();
                    niveles[7]["forma""           ########" +
                                          "           #  ····#" +
                                          "############  ····#" +
                                          "#    #  $ $   ····#" +
                                          "# $$$#$  $ #  ····#" +
                                          "#  $     $ #  ····#" +
                                          "# $$ #$ $ $########" +
                                          "#  $ #     #       " +
                                          "## #########       " +
                                          "#    #    ##       " +
                                          "#     $   ##       " +
                                          "#  $$#$$  @#       " +
                                          "#    #    ##       " +
                                          "###########        "//Mapa del nivel 7.
                    niveles[7]["width"19//Columnas.
                    niveles[7]["height"14//Filas.

                    niveles[8new Array();
                    niveles[8]["forma""#  ####  #### #### " +
                                          "####··####··###··##" +
                                          "+                  " +
                                          "#  #  #  #  # #  ##" +
                                          "#  #  #  #  # #   #" +
                                          "#     #          ##" +
                                          "#  #   #  #  #$$$ #" +
                                          "#     $     #  #  #" +
                                          "##### $   ###  #  #" +
                                          "#    $$$ $  #  $$$#" +
                                          "##  # #  #  #  #  #" +
                                          "      #  #     #   " +
                                          " ####·####··####··#" +
                                          "##  ###  ####  ####"//Mapa del nivel 8.
                    niveles[8]["width"19//Columnas.
                    niveles[8]["height"14//Filas.

                    niveles[9new Array();
                    niveles[9]["forma""        #####    " +
                                          "        #   #####" +
                                          "        # #$##  #" +
                                          "        #     $ #" +
                                          "######### ###   #" +
                                          "#····  ## $  $###" +
                                          "#····    $ $$ ## " +
                                          "#····  ##$  $ @# " +
                                          "#########  $  ## " +
                                          "        # $ $  # " +
                                          "        ### ## # " +
                                          "          #    # " +
                                          "          ###### "//Mapa del nivel 9.
                    niveles[9]["width"17//Columnas.
                    niveles[9]["height"13//Filas.

                    niveles[10new Array();
                    niveles[10]["forma""################ " +
                                           " + #·            " +
                                           "  ##$#########   " +
                                           "#             # #" +
                                           "#  # #######  # #" +
                                           "# $       · $ #$#" +
                                           "# #  ###### # # #" +
                                           "# # #  $ ·  #   #" +
                                           "###  # ####$  # #" +
                                           "# #           # #" +
                                           "#  ##########·#  " +
                                           "#··         $·$  " +
                                           " ############### "//Mapa del nivel 10.
                    niveles[10]["width"17//Columnas.
                    niveles[10]["height"13//Filas.

                    niveles[11new Array();
                    niveles[11]["forma""######  ### " +
                                           "#··  # ##@##" +
                                           "#··  ###   #" +
                                           "#··     $$ #" +
                                           "#··  # # $ #" +
                                           "#··### # $ #" +
                                           "#### $ #$  #" +