Los juegos didácticos del Proyecto AJDA permiten guardar las partidas y continuarlas en otro momento. Comentamos los principales aspectos de la implementación de este característica en los juegos.
Los juegos están preparados para poder ser guardados en determinados momentos, esto se refleja en que el control "Guardar partida", situado en la parte superior centro, esté o no activado:
Cuando se acciona este control los datos significativos del juego se almacenan en un vector denominado GP1 (a cada linea del vector se la da un valor de un dato del juego que debe ser guardado, GP1[0]=var0; GP1[1]=var1; GP1[2]=var2;...), después se aplican las instrucciones: guardarpartida() y _Save_('NOMBRE-FICHERO.txt',partida).
El algorítmo guardarpartida(), pasa todos los valores del vector GP1 a la variable partida de la siguiente forma:
inicio='partida=''; conter=0; maximopar=nº lineas necesarias'
hacer='partida=(conter<maximopar-1)?(partida+GP1[conter]+'\n'):partida+GP1[conter]; conter=conter+1'
mientras='conter<maximopar'
La instrucción _Save_('NOMBRE-FICHERO.txt',partida), guarda los datos de la variable partida en un fichero de texto, cuyo nombre por defecto es NOMBRE-FICHERO.txt.
Por tanto, tenemos guardados en un fichero de texto los datos que permiten continuar una partida y podemos guadar tantos ficheros como momentos de la partida queramos poder continuar.
Para continuar una partidas guardada, al comienzo del juego se presenta el botón "Continuar partida".
cadenapar1='<w1>\n '+DJS.fileContent+'</w1>';
_StrToVector_(cadenapar1,'w1';)
jug1=(PCAR=1)?w1[2]:jug1 ; jug2=(PCAR=1)?w1[3]:jug2 ; TIME=(PCAR=1)?w1[4]:TIME...
El juego continuará ahora con los datos de la partida que se guardó.
La mayoría de los juegos didácticos del Proyecto AJDA permiten generar y almacenar las preguntas que se utilizarán en los juegos en ficheros de texto, los cuales se cargan en los juegos cuando se desean utilizar. En este artículo vamos a analizar como se ha realizado ésto desde el punto de vista de la programación de DescartesJS.
Antes de empezar el juego (o durante el transcurso del mismo, si es necesario) se carga un fichero de texto con las preguntas y sus datos son introducidos en una variable llamada TOTALENVI. La pantalla de carga del fichero se muestra a continuación. Se trata de un iframe, programado en lenguaje javascript, e insertado en la escena de Descartes del juego. Esta parte la trataremos de forma específica en otro artículo.
Al iniciarse el juego se ejecuta automáticamente el algoritmo: FICHERO-PREGUNTAS, que en su campo hacer ejecuta las siguientes instrucciones:
cadena1b=TOTALENVI
cadena1='<VEC>\n '+cadena1b+'</VEC>'
SUBIRFICH=(CFI=0)?_StrToVector_(cadena1,'VEC'):' '
Una de las características de los juegos didácticos es que se puede seleccionar el idioma de la interfaz, en cualquier momento, a través del menú desplegable situado en la esquina superior derecha de todos los juegos.
A continuación se comentan los principales aspectos de su implementación, teniendo en cuenta que las palabras o frases de cada idioma se introducen en un fichero de texto, manteniendo el mismo orden en todos ellos.
El citado menú de control , identificado como FICHIDM, contiene una opción para cada idioma. Al seleccionarse un determinado idioma a través del mismo se realizan las siguientes acciones:
FICHID=(FICHIDM=0)?'esp':((FICHIDM=1)?'alb':((FICHIDM=2)?'ale':((FICHIDM=3)?'ara':((FICHIDM=4)?'ben':((FICHIDM=5)?'bul':.....:'esp')))))...
cargaridm=((FICHIDM=43)?_Open_('abriridioma'):0)
TOTALID=RUTAID+FICHID+EXT
En los juegos del Proyecto AJDA se utilizan muy frecuentemente los números aleatorios. Ya sea al tirar un dado, una moneda, sacar cartas, colocar casillas en un panel, etc. Vamos a analizar como se ha realizado desde el punto de vista del código de DescartesJS.
Cuando simplemente se quiere obtener un número entero aleatorio entre uno y una cifra máxima, se puede invocar la siguiente función:
Número aleatorio = ent(rnd*cifra máxima)+1
Un ejemplo concreto, la función a invocar para obtener una tirada de un dado de seis caras sería la siguiente:
DADO = ent(rnd*6)+1
Otro ejemplo, la función a llamar para sacar una carta de la baraja española podría ser:
CARTA = ent(rnd*40)+1
La cifra máxima puede dejarse como parámetro o variable, de forma que pueda ser introducida a través de controles o determinada a través de un cálculo concreto. Un caso concreto podría ser determinar aleatoriamente el jugador que empieza una partida. Teniendo en cuenta que el número de jugadores es una variable que se introduce mediante un control (por ejemplo, NJ), la función quedaría de la siguiente forma:
EMPIEZA = ent(rnd*NJ)+1
En el caso de que se quieran obtener varios números aleatorios de forma independiente, es suficiente con invocar tantas funciones de este tipo como necesitemos. Por ejemplo, si lanzamos tres dados simultáneamente, las funciones podrían ser:
DADO1 = ent(rnd*6)+1
DADO2 = ent(rnd*6)+1
DADO3 = ent(rnd*6)+1
Otra cuestión sería obtener varios números aleatorios diferentes entre si, la cual la dejaremos para otro artículo.