PROGRAMACION ASPECTOS DE AVENTURA ¿Quieres escribir tus propios programas de aventura? Las aventuras por ordenador, nos ofrecen un escape, vivir temporalmente en un mundo imaginario donde podam,os hacer lo que queramos, y destruir lo que se nos ponga en el camino. Sexo y violencia vienen en modo ilimitado (y sin sufrir nada) para los que se atreven. Pero, como todo en la vida real, las emociones prefabricadas pronto se tornan aburridas - así que aquí les ofrecemos algunas técnicas sobre como crear tus propias aventuras personalizadas. Todos los juegos de aventura son programas construidosen base a unos pocos bloques esenciales; una vez han sido estos establecidos, la avnetura ya puede tomar cualquier estilo individual. Lo más importante en el juego son los lugares: cuantos hay, en qué consisten y están interconectados. Una vez que la estrucutra fundamental de tu universo ha sido decidida, los personajes, objetos, y eventos pueden entocnes ser añadidos. Las aventuras en cuevas han sido muy exitosas, debido en parte, a que la estructura de las cuevas subterraneas encaja muy bien en la noción de un 'univero' como una serie de lugares interconectados. Así que para nuestro simple ejemplo crearemos una base de datos para un pequeño sistema de cuevas. La primera etapa consiste en dibujar el mapa de las cuevas y darle a cada lugar un número. El mapa simplificado a continuación: bunker de ______ N concreto | | | | 1 | W-------E |____| | | S 2 / \ / \ 9 3 bats / | / | escalera 10 /---4 arroyo y cascada de cuerda | / | \ / | 5 | / | / | ventila de aire | 6------------8 llave | hoyo |--7 lampara El sigte. paso es diseñar la estructura de datos para nuestra cueva imaginaria. Cada lugar tiene las sigtes. propiedades: un número, una descripción y varias salidas. Esto es basicamente todo lo que nuestra estructura principal de datos necesita contener. Ya que las salidas se encuentran moviendose segun las direcciones del compás, necesitamos saber cuántas direcciones son posibles. Deben ser cuatro (N, S, E y O) ó incluir otras cuatro (arriba, abajo, derecha e izquierda) o lo que sea, y así sucesivamente. La estructura de datos central se vuelve algo más complicada cunatas más direcciones y movimientos son permitidos. En nuestro ejemplo, el movimiento a los cuatro básicos. Pero los principios siguen siendo los mismos incluso si 8 o más son requeridos. A partir del mapa veremos cual direccion corresponde a cada salida de cada lugar. Para un sistema de cuevas, los movimientos de arriba, abajo, izquierda y derecha, tengan quizas más sentido.Pero, la forma en que eso cambie, depende del modo en que tu personaje imaginario ve su entorno. Nos quedaremos con las direcciones del compás. Ahora, el area 1 tiene dos salidas (al N y al S hacia 2); el area 2 tiene tres salidas (N a 1, S a 3 y O a 9); y así sucesivamente.Toda esta información puede ser incluida en nuestra base de datos en muchas formas. Por ejemplo, nuestra base puede consistir de diez registros, cada uno con una cadena de longitud variable para la descripcion de las cuevas y cuatro variables enteras que representan los movimientos en una de las cuatro direcciones y el número del área a la que uno se mueve de ser posible ir en dicha direccion, o un cero si la respuesta es no. La tabla sigte. muestra los datos usados para nuestro ejemplo: DESCRIPCIONES: 1-Estas dentro de un bunker de concreto. Dentro y al sur de ti hay una abertura. La puerta al norte esta cerrada. 2-Estas en una angosta caverna. Hay oscuridad y las salidas son: norte, oeste y sur. 3-Estas en una gran boveda y hay murcielagos sobrevolando, hay una estrecha salida al norte, y otra más ancha al sur. 4-Estas en una pequeña area, hay un arroyo y una cascada al sur. 5-Estas en un pasadizo muy estrecho en el que solo puedes arrastrarte. 6-Estas en un anogosto pasadizo y hueles el aire fresco. 7-Estas en un area muy apretujada 8-Estas en una gran area. La cascada está al norte. Un riachuelo fluye de él, y desaparece en una hondanada al sur. 9-Estas en un pasaje por el que puedes moverte. 10- Estás en un lugar con eco. Cada movimiento que haces resuena en tus oidos. SALIDAS: lugar N S O E 1 11 2 0 0 2 1 3 9 0 3 2 4 0 0 4 3 8 5 0 5 10 6 0 4 6 5 0 7 8 7 0 0 0 6 8 4 0 6 0 9 0 10 0 2 10 9 5 0 0 11 *fin de la aventura* En vez de tener un solo registro conteniendo dos tipos de información, la tabla muestra las descripciones y movimientos posibles por separado. Los dos juegos de datos pueden facilmente ser relacionados mediante el número de área (o sea del registro). La información dada en las descripciones puede ofrecer tanta o poca ayuda como uno quiera. En las descripciones listadas en la tabla, las primeras dan algo de ayuda, el resto no. En este punto ya tenemos una idea de la principal motivación en nuestra aventura; por ejemplo, la llave para salir del bunker puede estar oculta en el area 8 (solo visible con la lampara que está en el area 7); una escalera de cuerda (oculta en el area 10) es necesaria para escalar la cascada que hay entre las áreas 4 y 8; un área 11 puede ser añadida (el paraiso fuera del bunker). ¡Nuestro intrepido aventurero debe encontrar la lampara, luego la llave y volver al área 1 para escapar! Alfgunas cosas extra como ventilas de aire en el area 6 pueden ser añadidas para confundir al explorador haciéndole pensar que está más cerca de la salida... y cosas así - las posibilidades son ilimitadas. Además de la base de datos central, una variable principal es ahora necesaria, 'tu paradero' (cualquier numero de area). Este es inicializado a 1. Una vez hecho esto, ya es posible ver cuántos datos por ebjeto pueden ser incluidos. Para eso se requiere una tabla que contenga la lista de objetos, su descripcion y ubicación. El area 0 puede ser usada para el inventario de los objetos que cargue el aventurero. La FIG.1 muestra la tabla con los objetos del juego - ¡realmente simple! FIG.1 OBJETO NOMBRE LUGAR 1 llave 8 2 lampara 7 3 escal.d.cuerda 10 Los persoanjes estan relacionados a los lugares de modo similar, pero dejamos eso de lado en esta introducción a la programación de aventuras, ya que hay un problema más importante aquí: como mover al aventurero. Para hacerlo, simples sentencias necesitan ser ingresadas y analizadas (extraer su significado). Ya que es nuestra primer aventura, no vamos a intentar analizar más que sentencias de una o dos palabras. Una orden debe ser solicitada y la respuesta debe ser cadena corta. La cadena debe ser dividida como sigue: -remueve espacios iniciales (para encontrar la primera letra) -extrae la primera palabra -elimina los espacios tras la primera palabra -extrae la segunda palabra -ignora el resto La FIG.2 nos muestra la rutina BASIC para para cortar las cadenas: FIG.2 LISTADO (original en Basic Applesoft) 5 REM COMPUTER ANSWER 10 REM ENTRADA DE COMANDOS 100 INPUT "COMANDO:";C$ 110 IF LEN C$=0 THEN GOTO 100 115 LET P=1 120 GOSUB 200: REM SALTA ESPACIOS 130 GOSUB 300: REM LEE PALABRA1 140 LET W$=D$ 150 GOSUB 200: REM SALTA ESPACIOS 160 GOSUB 300: REM LEE PALABRA2 165 LET v$=D$ 170 REM PRUEBA 180 IF V$="" THEN PRINT "PALABRA SOLA: ";W$ 185 IF V$<>"" THEN PRINT "VERBO:";W$:" SUSTANTIVO:";V$ 190 STOP 200 REM SALTA ESPACIOS 210 IF C$(P)<>" " THEN RETURN 220 LET P=P+1: GOTO 210 300 REM LEE PALABRA 310 LET D$="" 320 IF P>LEN C$ OR C$(P)=" " THEN RETURN 330 LET D$=D$+C$(P) 340 LET P=P+1: GOTO 320 350 REM FIN ENTRADA DE COMANDOS Una rápida prueba nos demuestra que los espacios son ignorados y las palabras son correctamente ubicadas. Si una palabra simple es ingresada, esta será comparada con las de una lista de ordenes permitidas como: IF W$="INVENTARIO" THEN GOSUB imprimeinventario IF W$="SALIR" THEN GOTO salir IF W$="DESCANSAR" THEN GOSUB descansar Si una orden de dos palabras es ingresada, entonces vamos al proceso en dos etapas: IF W$="IR"THEN GOSUB movimiento REM subrutina movimiento LET M=0 IF V$="NORTE" THEN LET M=1 IF V$="SUR" THEN LET M=2 IF V$="OESTE" THEN LET M=3 IF V$="ESTE" THEN LET M=4 IF M=0 THEN PRINT "MOVIMIENTO INVALIDO": RETURN REM prueba posibles movimientos IF E(TUPARADERO,M)=0 THEN PRINT "NO PUEDE IR ";V$: RETURN REM las pruebas deben ser puestas aqui si REM una pieza especial de equipo es necesaria REM asumiendo que todo este bien LET TUPARADERO=S(TUPARADERO,M) RETURN Claro está, el código puede ser modificado para reconocer sólo una letra (N por norte) para ahorrar tipeo. Hay muchas formas de verificar los movimientos especiales (o sea, los que requieren del objeto justo)podemos hacer una simple tabla para verificar movimientos simples: FIG.3 ESPECIAL DESDE DIR REQUIERE 1 4 sur escal.d.cuerda 2 8 norte escal.d.cuerda 3 1 nort llave y añadimos el sigte. código a la subrutina anterior: LET EXITO=TRUE LET N=0 bucle: LET N=N+1 IF TUPARADERO=E(N,DESDE) AND V2=E(N,DIR) AND NOT I(E(N,REQUIERE)) THEN LET EXITO=FALSE IF EXITO=TRUE AND N<3 THEN GOTO bucle IF EXITO=FALSE THE PRINT "NECESITAS UN ":E(N,REQUIERE);"!!": RETURN Palabras alternativas que signifiquen lo mismo pueden ser añadidas, como por ejemplo: IF V$=("MOVERSE" OR "IR" OR "GATEAR" OR "ARRASTRARSE") THEN GOSUB movimiento Para interpretar órdenes como TOMAR o DEJAR, la rutina verifica que el jugador está en el sitio correcto y puede ver o sentir el objeto (en caso de tomar o coger), o sostenerlo (en el caso de dejar). Una vez interpretada una sentencia, el sistema ejecuta la acción (si la hay), y vuelve a solicitar otra orden en un bucle continuo: REM comienza aventura LET tuparadero=1 bucle: PRINT D(tuparadero) IF O(LAMP)=L(tuparedero) THEN PRINT "VES UNA LAMPARA EN EL SUELO" IF I(LAMP) THEN PRINT objetovisible REM interpreta y ejecuta la orden IF tuparadero<>11 THE GOTO bucle PRINT mensaje gratificante REM fin aventura REM o(x)=objetos, i(x)=inventario, e(x,y)=especial, s(x,y)=salida La programación de aventuras es esencialmene un proceso de estructuración de datos. Desarrollar la estructura de las listas o matrices para los lugares, objetos, personajes y demás, es lo que da más pelea. El código fuente del programa no hace nada más que probar la entrada de los datos, y coger las respuestas del registro apropiado. Lo que realmente provee de variedad a un juego de aventuras son las ordenes y movimientos impredecibles del aventurero, así que en programas razonablemente más complicados, no habrán dos aventuras iguales. Nota: Esta es mi traducción y adaptación del artículo publicado originalmente en ingles por la revista britanica COMPUTER ANSWER de junio 1984. Escrito por el Dr. Peter Turcan, editor técnico de dicha revista. (c)2018 zx_if1@hotmail.com