|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Yasminuroban © (by Joan Alba Maldonado)</title>
<!-- (c) Yasminuroban - 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 <= 1 && !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[1] = new Array();
niveles[1]["forma"] = " ##### " +
" # # " +
" #$ # " +
" ### $## " +
" # $ $ # " +
"### # ## # ######" +
"# # ## ##### ··#" +
"# $ $ ··#" +
"##### ### #@## ··#" +
" # #########" +
" ####### "; //Mapa del nivel 1.
niveles[1]["width"] = 19; //Columnas.
niveles[1]["height"] = 11; //Filas.
//Nivel 2:
niveles[2] = new Array();
niveles[2]["forma"] = "##########" +
"#### # #" +
"#· $ $·# #" +
"#· +$ ## #" +
"#$ $ $··#" +
"# #######"; //Mapa del nivel 2.
niveles[2]["width"] = 10; //Columnas.
niveles[2]["height"] = 6; //Filas.
//Nivel 3:
niveles[3] = new Array();
niveles[3]["forma"] = "############ " +
"#·· # ###" +
"#·· # $ $ #" +
"#·· #$#### #" +
"#·· @ ## #" +
"#·· # # $ ##" +
"###### ##$ $ #" +
" # $ $ $ $ #" +
" # # #" +
" ############"; //Mapa del nivel 3.
niveles[3]["width"] = 14; //Columnas.
niveles[3]["height"] = 10; //Filas.
//Nivel 4:
niveles[4] = new Array();
niveles[4]["forma"] = "## # # ##" +
"# #" +
"##### $@$ ####" +
"· ##$$$## ·" +
"# # #" +
"·· # ··" +
"·· ##$$$ # ··" +
"##### $ $ ####" +
"## " +
"### # # ##"; //Mapa del nivel 4.
niveles[4]["width"] = 14; //Columnas.
niveles[4]["height"] = 10; //Filas.
//Nivel 5:
niveles[5] = new Array();
niveles[5]["forma"] = " ######## " +
" # @# " +
" # $#$ ## " +
" # $ $# " +
" ##$ $ # " +
"######### $ # ###" +
"#···· ## $ $ #" +
"##··· $ $ #" +
"#···· ##########" +
"######## "; //Mapa del nivel 5.
niveles[5]["width"] = 17; //Columnas.
niveles[5]["height"] = 10; //Filas.
//Nivel 6:
niveles[6] = new Array();
niveles[6]["forma"] = "# # # # # # #" +
" $ # " +
"# $ · #" +
" $ $ $ $ #$ # $ " +
" # # # # #· " +
" · · $# #·#·" +
"# $ $ #$#· $ $ $" +
" · · · · " +
" #$#$# $ " +
"#· · · #·#·#·#+#"; //Mapa del nivel 6.
niveles[6]["width"] = 17; //Columnas.
niveles[6]["height"] = 10; //Filas.
//Nivel 7:
niveles[7] = new Array();
niveles[7]["forma"] = " ########" +
" # ····#" +
"############ ····#" +
"# # $ $ ····#" +
"# $$$#$ $ # ····#" +
"# $ $ # ····#" +
"# $$ #$ $ $########" +
"# $ # # " +
"## ######### " +
"# # ## " +
"# $ ## " +
"# $$#$$ @# " +
"# # ## " +
"########### "; //Mapa del nivel 7.
niveles[7]["width"] = 19; //Columnas.
niveles[7]["height"] = 14; //Filas.
niveles[8] = new Array();
niveles[8]["forma"] = "# #### #### #### " +
"####··####··###··##" +
"+ " +
"# # # # # # ##" +
"# # # # # # #" +
"# # ##" +
"# # # # #$$$ #" +
"# $ # # #" +
"##### $ ### # #" +
"# $$$ $ # $$$#" +
"## # # # # # #" +
" # # # " +
" ####·####··####··#" +
"## ### #### ####"; //Mapa del nivel 8.
niveles[8]["width"] = 19; //Columnas.
niveles[8]["height"] = 14; //Filas.
niveles[9] = new Array();
niveles[9]["forma"] = " ##### " +
" # #####" +
" # #$## #" +
" # $ #" +
"######### ### #" +
"#···· ## $ $###" +
"#···· $ $$ ## " +
"#···· ##$ $ @# " +
"######### $ ## " +
" # $ $ # " +
" ### ## # " +
" # # " +
" ###### "; //Mapa del nivel 9.
niveles[9]["width"] = 17; //Columnas.
niveles[9]["height"] = 13; //Filas.
niveles[10] = new Array();
niveles[10]["forma"] = "################ " +
" + #· " +
" ##$######### " +
"# # #" +
"# # ####### # #" +
"# $ · $ #$#" +
"# # ###### # # #" +
"# # # $ · # #" +
"### # ####$ # #" +
"# # # #" +
"# ##########·# " +
"#·· $·$ " +
" ############### "; //Mapa del nivel 10.
niveles[10]["width"] = 17; //Columnas.
niveles[10]["height"] = 13; //Filas.
niveles[11] = new Array();
niveles[11]["forma"] = "###### ### " +
"#·· # ##@##" +
"#·· ### #" +
"#·· $$ #" +
"#·· # # $ #" +
"#··### # $ #" +
"#### $ #$ #" +
|