Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
cursos:z88dk:avent1 [09-08-2007 13:35]
sromero creado
cursos:z88dk:avent1 [24-02-2020 20:23] (actual)
falvarez
Línea 1: Línea 1:
 +Publicado originalmente en [[https://magazinezx.speccy.org/07/z88dk.html|MagazineZX número 7]] (mayo 2004)
  
 ====== Creando una aventura conversacional (I) ====== ====== Creando una aventura conversacional (I) ======
Línea 54: Línea 55:
  
 Para tener claro como va a ser el entorno de juego, es necesario dibujar un mapa. En dicho mapa deben estar claras cúales van a ser las localizaciones o habitaciones por las que va a poder desplazarse el jugador, y cómo van a estar conectadas entre sí. En el caso de nuestro ejemplo concreto, vamos a crear un mapa de la taberna de la isla de Melêe, en donde Guybrush, nuestro personaje, buscará a un maestro de piratería. Un mapa perfectamente válido podría ser el siguiente: Para tener claro como va a ser el entorno de juego, es necesario dibujar un mapa. En dicho mapa deben estar claras cúales van a ser las localizaciones o habitaciones por las que va a poder desplazarse el jugador, y cómo van a estar conectadas entre sí. En el caso de nuestro ejemplo concreto, vamos a crear un mapa de la taberna de la isla de Melêe, en donde Guybrush, nuestro personaje, buscará a un maestro de piratería. Un mapa perfectamente válido podría ser el siguiente:
 +
 +{{ cursos:z88dk:z88dk_1.jpg |Nuestro mapa}}
  
 Como vemos, cada habitación está numerada. Esto es muy importante, luego veremos por qué. Las líneas que unen dos habitaciones adyacentes indican que dichas habitaciones están comunicadas; esto quiere decir que desde una habitación podremos acceder a la otra y viceversa. Además de dibujar el mapa, debemos escribir una descripción para cada habitación. Para nuestra aventura concreta, podríamos usar las siguientes descripciones: Como vemos, cada habitación está numerada. Esto es muy importante, luego veremos por qué. Las líneas que unen dos habitaciones adyacentes indican que dichas habitaciones están comunicadas; esto quiere decir que desde una habitación podremos acceder a la otra y viceversa. Además de dibujar el mapa, debemos escribir una descripción para cada habitación. Para nuestra aventura concreta, podríamos usar las siguientes descripciones:
Línea 84: Línea 87:
     * **descripcion**: una cadena de texto que contendrá la descripción de la habitación que será mostrada al jugador durante la aventura. Podemos usar los textos anteriormente indicados, teniendo en cuenta que no podremos utilizar tildes ni eñes (ni tampoco el acento circunflejo en el nombre de la isla de Melêe).     * **descripcion**: una cadena de texto que contendrá la descripción de la habitación que será mostrada al jugador durante la aventura. Podemos usar los textos anteriormente indicados, teniendo en cuenta que no podremos utilizar tildes ni eñes (ni tampoco el acento circunflejo en el nombre de la isla de Melêe).
     * **direcciones**: un array de cuatro elementos, representando cada uno de esos elementos una dirección concreta. En la posición 0 almacenaremos el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el norte, en la posición 1 el identificador de la habitación hacia la que avanzaremos si nos desplanzamos hacia el este, en la posición 2 el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el sur, y en la posición 3 el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el oeste. Si no es posible desde la habitación desplazarse en algnuna de las direcciones especificadas, deberíamos almacenar el valor 0, indicando que no es posible que el jugador se mueva en esa dirección. Por supuesto, si quisieramos hacer una aventura más compleja con más direcciones de movimiento posibles, podríamos aumentar el tamaño de este array.     * **direcciones**: un array de cuatro elementos, representando cada uno de esos elementos una dirección concreta. En la posición 0 almacenaremos el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el norte, en la posición 1 el identificador de la habitación hacia la que avanzaremos si nos desplanzamos hacia el este, en la posición 2 el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el sur, y en la posición 3 el identificador de la habitación hacia la que avanzaremos si nos desplazamos hacia el oeste. Si no es posible desde la habitación desplazarse en algnuna de las direcciones especificadas, deberíamos almacenar el valor 0, indicando que no es posible que el jugador se mueva en esa dirección. Por supuesto, si quisieramos hacer una aventura más compleja con más direcciones de movimiento posibles, podríamos aumentar el tamaño de este array.
 +
  
 ===== Introduciendo las habitaciones en nuestro juego ===== ===== Introduciendo las habitaciones en nuestro juego =====
Línea 123: Línea 127:
 { {
     habitaciones[0].id = 1;     habitaciones[0].id = 1;
-    strcpy(habitaciones[0].descripcion,"Te encuentras en la entrada +    strcpy(habitaciones[0].descripcion,"Te encuentras en la entrada\ 
-    de la taberna de Melee Island. Desde aqui puedes oler los vomitos+    de la taberna de Melee Island. Desde aqui puedes oler los vomitos\
     de los borrachos que vas a encontrar en su interior.");     de los borrachos que vas a encontrar en su interior.");
     habitaciones[0].direcciones[0] = 4;     habitaciones[0].direcciones[0] = 4;
Línea 132: Línea 136:
  
     habitaciones[1].id = 2;     habitaciones[1].id = 2;
-    strcpy(habitaciones[1].descripcion,"Las sombras del callejon en el +    strcpy(habitaciones[1].descripcion,"Las sombras del callejon en el\ 
-    que te encuentras te sobrecogen. Estas rodeado de montones de+    que te encuentras te sobrecogen. Estas rodeado de montones de\
     basura.");     basura.");
     habitaciones[1].direcciones[0] = 0;     habitaciones[1].direcciones[0] = 0;
Línea 141: Línea 145:
  
     habitaciones[2].id = 3;     habitaciones[2].id = 3;
-    strcpy(habitaciones[2].descripcion,"Estas en uno de los dormitorios +    strcpy(habitaciones[2].descripcion,"Estas en uno de los dormitorios\ 
-    de la taberna. Varias literas estan alineadas, permitiendo a muchos+    de la taberna. Varias literas estan alineadas, permitiendo a muchos\
     piratas dormir juntos en una misma habitacion.");     piratas dormir juntos en una misma habitacion.");
     habitaciones[2].direcciones[0] = 0;     habitaciones[2].direcciones[0] = 0;
Línea 150: Línea 154:
  
     habitaciones[3].id = 4;     habitaciones[3].id = 4;
-    strcpy(habitaciones[3].descripcion,"El salon principal de la taberna. +    strcpy(habitaciones[3].descripcion,"El salon principal de la taberna.\ 
-    Decenas de piratas se encuentran aquí bebiendo, cantando, peleandose, +    Decenas de piratas se encuentran aquí bebiendo, cantando, peleandose,\ 
-    vomitando, y metiendo mano a las doncellas del lugar. Si te diriges +    vomitando, y metiendo mano a las doncellas del lugar. Si te diriges\ 
-    al norte, este u oeste podras visitar varias de las habitaciones+    al norte, este u oeste podras visitar varias de las habitaciones\
     del local.");     del local.");
     habitaciones[3].direcciones[0] = 6;     habitaciones[3].direcciones[0] = 6;
Línea 161: Línea 165:
  
     habitaciones[4].id = 5;     habitaciones[4].id = 5;
-    strcpy(habitaciones[4].descripcion,"Una gran cantidad de pucheros +    strcpy(habitaciones[4].descripcion,"Una gran cantidad de pucheros\ 
-    sucios estan amontonados en la cocina. Platos a medio comer, jarras+    sucios estan amontonados en la cocina. Platos a medio comer, jarras\
     medio llenas, y cubiertos sucios les hacen compañia.");     medio llenas, y cubiertos sucios les hacen compañia.");
     habitaciones[4].direcciones[0] = 0;     habitaciones[4].direcciones[0] = 0;
Línea 170: Línea 174:
  
     habitaciones[5].id = 6;     habitaciones[5].id = 6;
-    strcpy(habitaciones[5].descripcion,"Tras apartar una cortina accedes +    strcpy(habitaciones[5].descripcion,"Tras apartar una cortina accedes\ 
-    a un reservado. Es una zona exclusiva de la taberna a donde muy+    a un reservado. Es una zona exclusiva de la taberna a donde muy\
     pocos piratas pueden acceder.");     pocos piratas pueden acceder.");
     habitaciones[5].direcciones[0] = 0;     habitaciones[5].direcciones[0] = 0;
Línea 178: Línea 182:
     habitaciones[5].direcciones[3] = 0;     habitaciones[5].direcciones[3] = 0;
 } }
 +
 + (Nota: las cadenas que acaban con \ se deben introducir en una sóla línea, sin partir)
 </code> </code>
  
Línea 218: Línea 224:
 Si compilamos y ejecutamos, veremos nuestro primer resultado: se mostrará la descripción de la habitación inicial, y se nos mostrarán las direcciones de salida... y ahí acabará el programa, pues no hemos dicho que haga nada más. Si compilamos y ejecutamos, veremos nuestro primer resultado: se mostrará la descripción de la habitación inicial, y se nos mostrarán las direcciones de salida... y ahí acabará el programa, pues no hemos dicho que haga nada más.
  
-Comienza la aventura +{{ cursos:z88dk:z88dk_2.png |Comienza la aventura}} 
-Comienza la aventura+
  
 ===== El intérprete de comandos ===== ===== El intérprete de comandos =====
Línea 350: Línea 356:
  
 Y ya está... si compilamos y ejecutamos el .tap en el emulador, veremos como ya podemos movernos por nuestro mundo conversacional. Y ya está... si compilamos y ejecutamos el .tap en el emulador, veremos como ya podemos movernos por nuestro mundo conversacional.
-Moviéndonos por el mundo que hemos creado + 
-Moviéndonos por el mundo que hemos creado+{{ cursos:z88dk:z88dk_3.png |Moviéndonos por el mundo que hemos creado}} 
  
 ===== ¿Y ahora qué? ===== ===== ¿Y ahora qué? =====
Línea 359: Línea 366:
  
 A partir de ahora, crear la aventura conversacional será tan fácil como añadir nuevos comandos inteligibles por nuestro intérprete de comandos, mediante más sentencias if, y creando las estructuras de datos adecuadas para que eso sea posible. En próximas entregas crearemos objetos y haremos que el jugador pueda interactuar con ellos, al mismo tiempo que veremos algunas opciones más de formateo de texto. A partir de ahora, crear la aventura conversacional será tan fácil como añadir nuevos comandos inteligibles por nuestro intérprete de comandos, mediante más sentencias if, y creando las estructuras de datos adecuadas para que eso sea posible. En próximas entregas crearemos objetos y haremos que el jugador pueda interactuar con ellos, al mismo tiempo que veremos algunas opciones más de formateo de texto.
 +
  
  
 ===== Enlaces ===== ===== Enlaces =====
  
-    * Archivos fuente del ejemplo propuesto (fuentes.tar.gz)+    * [[https://magazinezx.speccy.org/07/src/fuentes.tar.gz|Archivos fuente del ejemplo propuesto]]