Capitulo 1: Primeros pasos: creando el motor

  • Autor
    Publicaciones
  • #4429
    Avatar
    Club AUA
    Espectador

    Bienvenidos a la primera entrega del curso para aprender a crear aventuras conversacionales. El curso pretende ser muy didáctico, pretende crear paso a paso una aventura, desde el motor, hasta los escenarios, interfaz, la portada, etc, paso por paso.

    Este documento va acompañado por un fichero aventura.dsk, con el programa.

    Esta programa no pretende sustituir a los parsers ya existentes, ni mucho menos ,se trata de un programa para aprender y mejorar nuestro BASIC, y ya de paso hacer una aventura conversacional con gráficos, objetos a recoger y usar, etc… Quien sabe , si luego compartir con los amigos y proponerles un reto…

    1.- LA HISTORIA.

    Lo primero que debemos tener claro, es la historia de nuestra aventura, desarrollarla en papel , definiendo las situaciones a las que el jugador se va a enfrentar, con esto ya tenemos la mitad del trabajo hecho, solo nos queda pasarlo al ordenador.

    2.-EL MAPA.

    Para el mapa usaremos una matriz con el número total de habitaciones , en este caso vamos a usar 100, por tanto definiremos la matriz así:

    DIM MAPA(9,9) 

    Con esto 10×10=100 , ya tenemos una zona de memoria reservada para indicar al programa , donde debe cargar los datos de cada habitación, es decir, el programa principal será uno donde podamos realizar todas las acciones, y sin movernos de ahí (en el programa),  iremos cargando los datos de cada habitación según nos vayamos moviendo durante el juego, con esto ahorramos memoria, ya que sería una locura poner en cada habitación todo el sistema de reconocimiento de órdenes.

    Dentro de éste habrá otras subrutinas que harán el trabajo de movimiento, para cuando escribamos Norte, Sur, etc.

    Tenemos que ver el mapa así dentro de la matriz, y dándole a cada habitación un número:

    0 0 1 0 0
    0 0 2 0 0
    0 5 3 4 0
    0 0 6 0 0
    0 0 7 8 0

    Las habitaciones con un 0, son habitaciones que tenemos sin definir, las podemos añadir cuando queramos…

    Más adelante cuando queramos movernos, solamente habrá que consultar esta tabla para ver si hay salida, si es un 0, entonces no hay salida hacia allí.

    Introducimos los datos en la tabla:

    Mapa(1,1)=1 : mapa(1,2)=2 : mapa(1,3)=3 : mapa(2,3)=4 : mapa(2,4)=6

    Mapa(2,5)=7 : mapa(1,5)=5:mapa(3,5)=8

     

    Ya tenemos el mapa con cada número de habitación, luego en el haremos una pequeña subrutina que indicará al programa donde están los datos de cada habitación, le pasaremos ese parámetro a un comando RESTORE.

    Otra opción sería al principio cargar todo de una vez, pero indicando en qué línea del programa está cada habitación, esta opción me gusta menos ya que el actualizar algo lo hace más complicado, además en un programa con muchas habitaciones ocuparía todavía más memoria, para empezar usaremos la  primera opción.

    Posición=mapa(posicionx,posiciony)

    If posición=1 then restore 10100

    He dejado un borde de habitaciones a 0, alrededor de la zona de juego para evitar fallos de lectura en la subrutina  “Salidas”.

    3.- LOS DATOS DE CADA HABITACIÓN.

    Usaremos líneas DATA, la primera serán datos de dibujado para los gráficos, serán las coordenadas de inicio, y luego movimientos del cursor gráfico que usaremos con la orden DRAWR, en este juego vamos a usar gráficos vectoriales.  Incluso a esta orden le podemos ir cambiando la tinta a cada línea en sus parámetros…Vamos a darles a cada habitación 16 datos de dibujo, (por ahora) , cuantos más pongas mejor detalle de dibujo tendrás….

    Sería algo así:

    DATA 0,200,50,-10,2,2,3……

    Los siguientes datos será la descripción de texto de la habitación, en este caso podemos poner 255 letras,  una línea de texto en una variable. Pero podemos poner las que queramos.

    DATA “te encuentras en una estancia fría y oscura….”

     

    4.- LOS OBJETOS.

    Aquí debemos distinguir entre dos tipos de objetos, los que podemos usar o llevar como una llave por ejemplo, y los que están de decorados pero que además los podemos usar o examinar, como por ejemplo un interruptor.

    Los que podemos llevar:

    Al principio creamos una matriz con los objetos ..

    DIM objeto1$(10)

    Objeto1$(0)=”llave”

    Objeto1$(1)=”barra”

    Objeto1$(2)=”manzana”

    Y ahora otra matriz con la posición donde se encuentra cada objeto..

    DIM objetos2(10)

    Objetos2(0)=3

    Objetos2(1)=2

    Cada posición en la matriz debe coincidir con la posición en la matriz objeto1$, quiere decir que si la llave en la matriz objeto1$ está en la posición 0 , en la matriz objetos2 nos referiremos a ella en la posición 0 también.

    En objetos2 cada dato representa en qué habitación está actualmente cada objeto, así cuando el programa cargue la habitación actual, mirará si hay algún objeto en ese número de habitación, y entonces los mostrará al final de la descripción:

    ……. Las paredes son de piedra.

    Puedes ver la llave.

     

    Con esto podemos coger objetos en una habitación y soltarlos en otra, cuando los llevemos encima  , le daremos al objeto en la tabla objetos2, el valor 99, así cuando hagamos inventario, el programa mirará que objetos valen 99, y entonces nos dirá que los llevamos en la mochila.

     

     

    Los objetos que no podemos llevar pero, si podemos usar:

    Supongamos que ponemos un cofre o un interruptor, cómo sabemos si está abierto , o si el interruptor está pulsado, pues lo mismo que antes, primero creamos una tabla con este tipo de objetos, otra  en qué habitación están ,y  luego otra con su estado.

     

    DIM UTILES$(10)

    Utiles$(0)=”cofre”

    Utiles$(1)=”interruptor”

    Ahora otra con la posición

    DIM UTIL1(10)

    Util1(0)=3     ‘ponemos el cofre en la habitación 3

    Otra con el estado  A :

    DIM util2A(10)

    Util2a(0)=0           ’se encuentra cerrado

     

    Si queremos esconder algo dentro del cofre ,como una joya,por ejemplo, en la lista de objetos que se pueden llevar le damos un valor de -1,por ejemplo, para que el programa no los muestre, cuando abramos el cofre, metemos una línea de código que le cambie el estado a la joya :

    IF UTIL2A(0)=1 THEN OBJETOS2(4)=3

    Al comprobar que el estado del cofre es 1, es abierto, entonces cambiamos el estado de la joya que se encuentra en la lista de objetos, a 3, este 3 es el supuesto número de habitación donde estamos, ponemos el que corresponda, entonces en la descripción de la habitación al final saldrá:

    Puedes ver la joya.

     

    4.- EL PROGRAMA PRINCIPAL.

    Llegamos a la parte que hará que todas las anteriores se conecten, desde aquí iremos cargando cada habitación y recibiendo órdenes del jugador.

    El programa irá analizando cada palabra y según si coinciden con las que tenga en distintas tablas hará una cosa u otra.

    Primero crearemos SUBRUTINA con las direcciones, cuando el jugador teclee algo , lo primero será mirar si es una dirección , para luego comprobar si hay salida por ese lado.

    Una comprobada la salida , si la hay, entonces borraremos la pantalla, y cargaremos los datos de la siguiente habitación, y vuelta a empezar.

     

    Si no hay salida entonces comprobamos la primera palabra de la frase en nuestra lista que vamos a crear de acciones, la llamaremos verbos.

    Comprobamos que ese verbo esté en nuestra lista y si lo está  buscamos en el resto de la frase alguna palabra que coincida con nuestras listas de objetos, para actuar según se el verbo.

    Para cada verbo escribimos en el programa las acciones a realizar, por ejemplo si es el verbo COGER, pues cambiamos el estado del objeto a 99, para que ya no aparezca en la habitación y salga en el listado de nuestro inventario y así con todos, cuanto más verbos y más los especifiquemos mejor será el programa, para empezar haremos solo las acciones básicas.

    Veamos un ejemplo, el jugador recoge una llave:

    >COGE LA LLAVE DEL SUELO

    .

    Como verás en el programa cada acción tiene su subrutina, donde se va analizando todo lo que

    Se ha escrito en la frase, de los verbos se usa el truco de reconocer las primeras letras de la palabra , por ejemplo del verbo “coger” se reconoce hasta “coge”, así sirve tanto como “coger” o “coge”, con los demás igual, podemos enredar la frase como queramos que el programa funcionará igual:

    “coge la dichosa llave que hay en al suelo”

    El programa una ve reconocido el verbo “coger” buscará en el resto de la frase los objetos, útiles o personajes del juego, y si se encuentra en esa habitación, pues hará la acción correspondiente.

    En este programa de ejemplo tenemos acciones como dar,coger,abrir,dejar,examinar,inventario ,salidas..

     

    Podemos definir una ventana con WINDOW, para  que al escribir muchas líneas no se suban los gráficos hacia arriba.

    En este ejemplo no lo usaremos,  pues se trata de hacer una base lo más fácil posible para los que acaban de llegar al Basic de Amstrad.

     

     

    5.-PERSONAJES

    Los personajes los trataremos como objetos, pero cada uno tendrá su subrutina ,donde estará su repertorio de frases.

    Así podemos definir su situación, como que en qué habitación está ,si se mueve de un sitio a otro ,etc..

    Ahora toca repasar el programa que acompaña este texto, AVENTURA.DSK , una vez comprendido ya solo queda hacer nuestro propio juego y mejorarlo todo lo que queramos.

    Cuando termines el programa se pueden juntar varias líneas en una, quitar espacios, incluso compilar el código con un compilador de Basic, hasta se puede cambiar algún método de proceso de palabras, pero el objetivo de este programa ya se ha cumplido, que es servir de base para empezar.

    Espero que lo disfrutes.

    El programa para su descarga lo puedes encontrar aquí: aventura.dsk

    Archivos adjuntos:
    You must be logged in to view attached files.

Debes estar registrado para responder a este debate.

Botón volver arriba
Cerrar
Cerrar