Archivo de la etiqueta: aventura

FIC.tion por fin disponible

FIC.tion

Ha pasado casi un año desde que hablé aquí en Nand de FIC.tion, el pequeño y sencillo creador de aventuras conversacionales que había hecho como práctica de una asignatura. Ahora, y después de mucho tiempo en el olvido, le he hecho los retoques necesarios para ponerlo a disposición de todo el mundo. Como decía en su momento, no liberaré su código fuente (al menos por ahora) porque sigue en desarrollo, no es una proeza informática y (unido al primer motivo) es posible que lo use como base para mi Proyecto de Fin de Carrera. A pesar de ello, no tendré ningún problema en responder preguntas técnicas, aunque de algunos detalles de implementación ya ni me acuerdo xD

Los requisitos para hacerlo funcionar son:

  • Un PC con Linux. Sí, sigue sin haber versión Windows, lo siento 🙁
  • Un compilador y máquina virtual de Java, con la 1.6.0 de Sun sé que funciona.
  • Este paquete.

Una vez bajado el paquete no hay más que descomprimirlo en alguna parte haciendo algo del estilo tar -xvf Fiction_distributable.tar.gz. El fichero README incluído creo que esta bastante auto-explicativo, por si por si acaso…

* ./compile.sh tarde.sfl compila el juego de ejemplo incluído. El .java que genera va a parar al directorio java/
y es un fichero de código fuente normal y corriente que puede ser modificado y leído por un
humano.

* ./run.sh Tarde ejecuta el juego anteriormente compilado.

En otra entrada explicaré un poco cómo funciona el lenguaje que creé, De esta forma, alguien con curiosidad y algo de tiempo libre podrá disfrutar jugando a su propia aventura :]

FIC.tion : Creador de Aventuras conversacionales

¿Qué es FIC.tion?

FIC.tion es un proyecto orientado a crear aventuras conversacionales de forma relativamente sencilla. Su núcleo es el lenguaje SFL.

¿Por qué motivo surge este proyecto?

Necesitaba un tema para la realización de la práctica especial de la asignatura de Compiladores, que requiere el uso de uno o más elementos de un compilador (scanner, parser, generador de código, etc.). Era deseable que la idea fuese original y amena de llevar a cabo, características que reúne ésta.

¿Cuánto has tardado en acabarlo?

Primero aclarar que no está acabado, sino en un estado lo suficientemente avanzado como para que la gente no se ría (mucho) de mí.
La idea inicial surge alrededor de Febrero de 2007, pero no es hasta Marzo que me pongo manos a la obra, dedicándole un par de horas a la semana más a pensar que a implementar. FIC.tion alcanza un estado aceptable a mediados de Mayo tras dedicarle un par de semanas de manera más intensiva.
Así que la respuesta corta a la pregunta es: poco.

¿De dónde viene el nombre de FIC.tion?

Es un juego de palabras entre dos conceptos: el primero, el lugar donde estudio (Facultad de Informática de La Coruña, o FIC); el segundo es que a las aventuras conversacionales también se les conoce como ‘ficción interactiva’.

Entiendo, pero… ¿qué es una aventura conversacional?

Es quizá el primer género del mundo de los videojuegos. Su nacimiento se remonta a la década de los 70, cuando Will Crowther escribe en 1975 Adventure (después llamado Colossal Cave) en Fortran para el PDP-10. Más tarde en 1979, miembros del MIT Laboratory for Computer Science finalizan Zork, que sería uno de los muchos juegos de la compañía por excelencia del género, Infocom.
Una aventura conversacional es básicamente una historia contada en primera persona, en su estado más puro sin gráficos ni sonido, en el que la interacción entre el hombre y la máquina se basa en la escritura de comandos en lenguaje casi natural. En base a estas frases, el avatar investiga su entorno, se desplaza o usa objetos.

Antes hablabas del lenguaje SFL, ¿puedes hablar algo más de él?

Claro, SFL es el acrónimo de Structured Fiction Language. Es un lenguaje declarativo al estilo SQL, del cual coge parcialmente su nombre (Structured Query Language). Se basa en la definicion de salas, objetos y personajes con sus características.

SQL, SFL… desde luego no te has mucho estrujado las meninges…

Podría haberle llamado SIFILIS (SImple FIction Language for Interactive Software), pero quizá era algo controvertido.

¿Qué herramientas has usado para este proyecto?

– Flex, el generador de analizadores léxicos de GNU, en su versión para Linux que genera código C.
– Bison, el generador de parsers de GNU, en su versión para Linux que genera código C.
– GCC, el compilador de C de GNU en su version Linux, para generar el ejecutable en C que lee un archivo SFL.
– Javac, el compilador de Java de Sun para Linux, para generar el bytecode de la traducción desde SFL y de las clases auxiliares.

Conozco GCC y Javac, pero… ¿para qué sirven Flex y Bison?

Flex se encarga de comprobar que una cadena de entrada es léxicamente correcta, por ejemplo en C:

for(i=0;i<10;i++), es una cadena correcta desde el punto de vista léxico.
for i++ ; ( i<10 ; i=0), también lo es, ya que sus elementos pertenecen al lenguaje (for, i=0…).
fir(i=0;i<10;i++), no lo es.

Bison comprueba que una cadena es sintácticamente correcta; la primera de las anteriores lo es pero la segunda no. Además, una vez que reconoce una tira (o parte de ella) como válida, puede realizar acciones (asignar un valor a una variable, imprimir algo por pantalla, etc.)

Muy educativo, sí… ¿qué características soporta FIC.tion?

Actualmente:

* Hasta 64 habitaciones distintas por juego, con hasta 4 vecinos cada una.
* Hasta 8 items y personajes por sala.
* Conversaciones con 32 preguntas y respuestas diferentes.
* Hasta 16 interacciones diferentes por objeto, cada una de las cuales puede desencadenar 4 eventos.
* Inventario de hasta 8 objetos.
* Items con estado, que puede ser cambiado debido a eventos.
* Interacciones con objetos dependientes de interacciones previas o de estado de objetos.
* Eventos dependientes de acciones previas.
* Objetos ocultos desocultables.
* Contabilización de puntuación y número de movimientos.
* Finalización por alcance de sala u obtención de objeto.

No parece muy potente, ¿no? ¿Piensas mejorarlo?

No es muy potente teniendo en cuenta que Zork tiene casi 30 años y le da mil vueltas a éste… De todas formas, sí, tengo previsto añadirle más funcionalidades como:

* Aumentar los límites en el número de salas, objetos, etc. quizá hasta un límite infinito (o el que permita la memoria).
* Añadir nuevos tipos de eventos, incluso algunos de tipo condicional.
* Implementar condiciones de terminación compuestas más complejas.
* Hacer más flexible la interpretación de los comandos desde teclado.
* Añadir nuevas características a los objetos como peso, género, número, sinónimos…
* Implementar una sencilla interfaz para mostrar imágenes estáticas y tocar música.

¿Vas a poner FIC.tion a disposición del público?

Sí.

¿Cuándo?

Pronto.

¿Incluído el código fuente?

No.

¿Por qué no?

Odio que la gente critique mi código :] Además, tampoco es una obra magna de la ingeniería que merezca ser admirada. Así que solo distribuiré los binarios con un sencillo juego de ejemplo.

¡Pero eso va a contra del software libre!

Cierto. ¿Alguna pregunta más?

Eres un borde. ¿Al menos responderás a preguntas sobre su implementación, etc.?

Por supuesto, sin problema.

Algo es algo… ¿qué se necesita para poder crear y/o ejecutar juegos hechos con FIC.tion?

Necesitas un ordenador con Linux, un compilador de Java y mis binarios. Para crear un juego antes tendrás que haber escrito un archivo SFL correcto y para jugar a uno ya creado necesitarás su SFL o su traducción o compilación Java (.java/.class).

¿Linux? ¿Y qué pasa con Windows?

Quizá algún día portee FIC.tion a Windows, si hay gente que me lo pide y me veo con ganas :]

Una última pregunta: ¿cómo funciona SFL?

En unos días incluiré un breve tutorial del lenguaje basado en el juego que incluiré en el paquete.

Perfecto.

Pues sí, ¿puedo irme ya?

Claro, ya hemos terminado. Pero una última curiosidad, ¿ha visto el profesor de la asignatura el proyecto?

Todavía no.

¿Y si no le gusta la idea?

Buena pregunta…