Desarrollo de Videojuegos
|
|
Juegos de Aventuras
Diseñando una aventura conversacional
|
|
Artículo realizado por
Spellcaster.
Traducción y adaptación de
Daniel Cárdenas.
Capítulo 2.
Manos a la obra.
Una vez asimilado más o menos lo que os comentábamos
en el número anterior, ya podemos empezar a codificar algo
Primero deberíamos ocuparnos de las habitaciones. Cada
localización será una tupla (record) que contendrá
la información de las salidas, y la propia descripción
de la habitación:
Type TipoLocalizacion=Record
Desc: Array[1..10] of String[79];
Norte, Sur, Este, Oeste: Byte;
End;
La descripción es un array de strings, con
sólo 79 carácteres por string ya que en la pantalla
sólo nos cabrán 80 líneas, y además
deberás tener en cuenta el retorno de carro. De hecho,
es posible que no necesites las 79 columnas, ni tampoco las 10
líneas de texto. Si es así, deja una línea
como '*' a continuación de la última línea
de texto. Y si usas las 10 líneas, no hace falta que pongas
'*'.
Como tendrás varias localizaciones, deberás
tener un array con todas ellas:
Const NumeroLocalizaciones=22;
Var Localizaciones:Array[1..NumeroLocalizaciones] of TipoLocalizacion;
El contenido de los campos Norte, Sur, Este y Oeste
nos indicarán a que localización se va siguiendo
esa dirección. Un cero indicará que no habrá
salida en esa dirección. Por ejemplo, si Localizaciones[1].Norte=2
querrá decir que si desde la habitación 1 se va
al norte, se irá a la habitación 2.
Fanglore usará un fichero, que llamaremos
Room.Dat, y que contendrá todos los datos de las habitaciones.
La rutina que usaremos para leer ese fichero será la siguiente:
Procedure LeerDatosLocalizaciones;
Var F:Text;
A,B:Byte;
Flag:Boolean;
Begin
{ Preparamos el fichero de texto }
Assign(F,'Room.Dat');
Reset(F);
{ Para todas y cada una de las localizaciones del juego }
For A:=1 To NumeroLocalizaciones Do
Begin
{ Limpiamos la descripción de la localización }
For B:=1 To 10 Do Localizaciones[A].Desc[B]:='';
{ Leemos la descripción de la habitación }
Flag:=True;
B:=1;
While Flag Do
Begin
Readln(F,Localizaciones[A].Desc[B]);
If (B=10) Or (Localizaciones[A].Desc[B]='*') Then Flag:=False;
Inc(B);
End;
{ Leemos las salidas }
Readln(F,Localizaciones[A].Norte);
Readln(F, Localizaciones[A].Sur);
Readln(F, Localizaciones[A].Este);
Readln(F, Localizaciones[A].Oeste);
End;
Close(F);
End;
La rutina es bastante clara, aún así
hay algun que otro punto que es mejor que repasemos. Quizá
te estés preguntando porqué limpiamos la descripción
de las habitaciones antes de que las carguemos, si cuando lo hacemos
no hay nada. La razón es que al crear una variable, Pascal
la coloca en cualquier lugar de la memoria donde pueda caber y
el caso es que allí puede haber cualquier cosa, y Pascal
no hace limpieza
En programación, resulta una práctica
muy aconsejable el limpiar el contenido de una variable antes
de usarla (jeje, me parezco a uno de mis profesores). Segundo,
no sé si ya os he comentado lo que hace la instrucción
Inc. Lo que hace es incrementar el valor de una variable
en una unidad (si no se especifica ningún parametro. Así
que Inc(B) equivale a B:=B+1, y Inc(B,2) es igual a B:=B+2
Bien, la llamada a esta rutina debería producirse
desde otra rutina (Init, o algo así), la cual se encargará
de inicializar todas las variables y de preparar el juego. En
esta rutina habrán más cosas, pero de momento lo
que tenemos es: Bien, la llamada a esta rutina debería producirse desde otra rutina (Init, o algo así), la cual se encargará de inicializar todas las variables y de preparar el juego. En esta rutina habrán más cosas, pero de momento lo que tenemos es:
Procedure Init;
Begin
LeerDatosLocalizaciones;
End;
Y la rutina Init debería ser llamada, a su vez, por el programa principal. Lo que tendremos aquí (de
momento) será:
Begin
Init;
End.
Todo esto lo encontrarás ya tecleado en el
fichero FangLore.Pas
NOTA: Cualquier fichero generado con el programa
RoomGen puede se alterado a mano, es decir via editor ASCII. Podrás
arreglar los errores que vayan saliendo y editar tanto como quieras
el fichero aunque, ¡no te olvides de guardarlo como un fichero
ASCII!
En el próximo número, te mostraré
como el analizador de entradas, con alguno que otro de los verbos
más básicos
Hasta entonces, trátalo
de hacer tú mismo
:)
Nota del traductor: En los primeros números
de 'The Mag' se realizó un cursillo de Pascal la mar de
majo. Como comprenderéis no es cuestión de que lo
reproduzcamos aquí, después de todo esto es una
revista sobre aventuras, y no de programación. A los que
no conozcáis Pascal y sepáis inglés os remito
directamente a 'The Mag'.
A los demás buscaos un buen tutorial en castellano, que
seguro que los habrá perdidos en algún rincón
de la red o miraros alguno de esos CD-ROMS que regalan las revistas,
que puede que venga algun tutorial o cursillo interactivo de Pascal.
Si el Pascal no os va, o simplemente conocéis algún
otro lenguaje (BASIC, no gracias) no os será nada complicado
el pasarlo.
Ficheros (cortesía de Spellcaster):
ÚLTIMA REVISIÓN EN FEBRERO DE 1999
DESARROLLO DE VIDEOJUEGOS
|
|