Q'AECHO ESTO

Por... Melitón Rodríguez, el de la 117

Otro fancine más y unas cuántas cosillas más sobre el farragoso CAECHO?. Esta vez vamos a metenernos con la comunicación del programa con el exterior, porque si el CAECHO? es un parser el jugador debe poder teclear cosas, ¿no?. Vamos a mi me parece que era así, ¿no?... A ver tu mueves el ratón y pinchas sobre USAR y luego pinchas en el obj... Un momento, me parece que eso no es una conversacional, ¿o sí? Me temo que estoy un poco confuso, ¿una conversacional es ese tipo de juegos que ya no se venden y apenas se hacen para Spectrum? Claro, claro que era eso. Si el otro día estuve jugando a una en el PC, de un tal FJAP, muy interesante; lástima que no haya más de esas. En fin, esperemos que la situación cambie y pueda jugar verdaderas conversacionales con mi flamante 386.

Pero vayamos con la comunicación con el jugador en el CAECHO?. En CAECHO? hay un nuevo concepto que no aparece en los otros parsers: el concepto de buffer. Básicamente un buffer es un lugar donde se ponen letras, estas letras pueden venir del exterior (tecleadas por el jugador) o pueden provenir de la tabla de mensajes. ¿Y qué se pueden hacer con esas letras? Pues básicamente dos cosas: ver lo que significan y sacarlas a la pantalla. En esta ocasión veremos como meter letras a un buffer desde el exterior y como sacarlas a pantalla.

La acción que permite al jugador meter algo en un buffer es

PREG n

donde 'n' es el número de buffer que se va a usar. Hay 25 bufferes disponibles, numerados del 0 al 24. PREG hace lo siguiente:

  1. Pone en pantalla el mensaje que diga la bandera cardinal 48 de la tabla que diga la bandera cardinal 47 a modo de 'Prompt'.
  2. Comprueba si en el buffer hay algo ya tecleado, si es así termina, si el buffer está vacío, entonces:
  3. Deja que el jugador teclee lo que quiera (hasta un máximo de 1K) hasta que pulse un ENTER. En ese momento todo lo que haya tecleado el jugador estará en el buffer 'n'.

(A parte de estas acciones el CAECHO? permite fijar un límite al tiempo que el jugador tiene para teclear, además el límite puede fijarse de formas diferentes con lo que PREG además hace otras cosas, pero las ignoraremos de momento)

Nosotros usaremos el buffer 0, con lo que en nuestro programa aparecerá un PREG 0.

El primer programa que haremos será un repetidor de cosas, cinco veces seguidas pedirá la entrada al usuario y la pondrá en pantalla.

    #define veces 5;

\MEN 1
    \0 ""TECLEA ALGO TIO:""
    \1 "" >>""
    \2 ""HAS PUESTO: ""

\BLO
    BLOQUE [0] Pesado()
    {
    COPI 1 47;      /: Tabla donde está el Prompt :/
    COPI 1 48;      /: Mensaje del Prompt :/
    COPI 0 1;       /: Contador de veces la bandera 1 :/
    HASTA (IGQ 1 veces)
        {
        MENSAJE 1 0;
        PREG 0;
        MENSAJE 1 2;
        ESCBUF 0;
        NL;
        BORRABUF 0;
        INC 1 1;
        }
    }

Veamos que significan las nuevas acciones usadas.

ESCBUF n: pone en pantalla el contenido del buffer 'n'. (Pero no lo deja vacio, sino con el contenido que tenía)

BORRABUF n: vacía el contenido del buffer 'n'. En nuestro caso es necesario ponerlo para que PREG pregunte una nueva cosa cada vez que se le llama porque entre una llamada de PREG y otra no hay nada que 'consuma' lo que se tecleo.

¿Por qué PREG mira primero si hay algo ya en el buffer antes de dejar que el jugador teclee algo? Porque PREG está diseñado para conversacionales, en las conversacionales lo normal es que el jugador teclee cosas como:

Corre al sur y golpea con la espada al troll.

Son dos frases. Cuando se llama al analizador del CAECHO? retirará una frase completa, pero dejará la otra. PREG viene a significar: 'consigue una frase para analizar'. Si ya hay algo en el buffer no hay que hacer nada, pero si está vacio habrá que pedirle más frases al jugador.

Ahora pruebe a correr el anterior programa y a teclear:

    \n\n\zbvVERDE\zbrROJO\zbzAZUL\n\zlBLANCO\zn\zflNEGRO\zbg\zfn\n
    

¿Qué ha ocurrido? Bonito, ¿verdad?. Más adelante se explica un poco, puedes mirar el manual e intentar por tí mismo entender que ocurrió.

Para acabar, vamos a hacer un pequeño programa 'verde'.

\MEN 1
    \0 ""Hace mucho, mucho tiempo ""
    \1 "" y ""
    \2 "" no se conocían. Pero un día, cuando el sol estaba oculto tras el
horizonte, ""
    \3 "" se vieron, y sin perder tiempo se quitaron las \zbrCENSORED\zl e
hicieron el \zbrCENSORED\zl más de 5 veces.\n""
    \4 ""Tu nombre: ""
    \5 ""Otro nombre: ""

\BLO
    BLOQUE [0] Caliente()
    {
    COPI 1 47;
    COPI 4 48;
    PREG 0;
    COPI 5 48;
    PREG 1;
    MEN 1 0;
    ESCBUF 0;
    MEN 1 1;
    ESCBUF 1;
    MEN 1 2;
    ESCBUF 0;
    MEN 1 1;
    ESCBUF 1;
    MEN 1 3;
    }
    

Lo único 'extraño' del ejemplo anterior es el mensaje 3 de la tabla; tiene unas extrañas cosas: \zbr,\n,...

Se trata de 'secuencias de escape' de los mensajes. Con las secuencias de escape se pueden hacer muchas cosas: poner colores, poner el contenido de una bandera en pantalla, poner el nombre de una localidad o un objeto, poner un mensaje dentro de otro...

Veamos las secuencias de escape que se usan en este ejemplo:

· Las secuencias de escape empiezan todas con el caracter '\'. (El que se usa en los PATH)

· Una secuencia de escape que comienze con '\z' significa: lo que va detrás debe imprimirse en otro color.

· La 'r' significa rojo, la 'b' brillante y la 'l' blanco.

De esta forma '\zbr' significa 'lo que viene tras esto debe escribirse en color rojo brillante' y '\zl' significa 'lo que viene después debe ponerse en color blanco'.

· La secuencia de escape '\n' significa 'ir a la siguiente línea', o sea, equivale a usar un NL.

En el manual que debe venir con todas las copias del CAECHO? (en cualquier versión) tenéis una lista de las posibles secuencias de escape y algunos ejemplos. Podéis mirar en él, para una información más detallada. Yo no voy a trabajar tanto sin que me paguen más que la miseria que me paga ahora el cabrito de JAPS... ¡Vamos! Pues que se habrá creído que por haber ganado un concursillo de mierda, le voy a traba... ¡Vamos hombre!

Pues lo dicho, las secuencias de escape las iré explicando a medida que las vayamos usando, así nos vamos enterando todos mejor; vamos por lo menos yo me entero mejor, que bastante trabajo me cuesta entender el manual de... Vale, vale, JAPS, ya termino, ya termino.

Pues creo que por este mes ya hemos tenido bastante, que luego no cabe bien en el fancine. Repasemos los condactos que hemos visto hoy:

PREG n: intenta 'buscar una frase que analizar' en el buffer 'n'. Si en el buffer ya hay algo, no hace nada; pero si no, permite que el usuario teclee una nueva orden.

BORRABUF n: vacía el contenido del buffer 'n'.

ESCBUF n: saca el contenido del buffer 'n' a la pantalla.

En el próximo fancine, aprenderemos como analizar las cosas que hay en un buffer, como usar HAZ, y algunas cosillas más de buffers.