lunes, 13 de mayo de 2019

Elige tu propio hola mundo (i): formato

Aunque he terminado varios cursos y he escrito algún programa corto en Python, nunca he terminado de sentirme cómodo con este lenguaje, probablemente porque nunca antes había emprendido un proyecto con la suficiente envergadura para afianzar mis conocimientos.

Por tanto, ahora que acabo de terminar un curso a fin de repasar lo que ya sé y ver este lenguaje desde otro punto de vista, he decidido iniciar un proyecto donde pueda aplicar lo que aprendo. En principio, había pensado hacer algo de generación automática de textos, a ser posible relatos o novelas, pero he preferidopor algo más concreto: crear una aplicación que trabaje con libros del estilo de la famosa saga de los ochenta «Elige tu propia aventura».



La originalidad de esta saga, una de las más vendidas de literatura juvenil, radicaba en que en lugar de leerse linealmente, cada pocas páginas plantea al lector varias opciones entre las que debe elegir una, por ejemplo:

Te sujetas mientras el helicóptero choca contra el hielo y se desliza al tuntún. Se parte un lado del fuselaje y arde, con grandes llamas.
Te quedan unos pocos segundos para salir con vida... ¡sólo tienes tiempo de coger una cosa!
Si coges las bengalas, pasa a la página 72.
Si coges las cerillas y la linterna, pasa a la página 80.
Si coges un saco de dormir, pasa a la página 95.

Estos libros tan populares también han ejercido una gran influencia en una generación que marcó una tendencia definitiva hacia un entretenimiento que mezclaba ficción con capacidad de decisión.

Antes de escribir ni una sola línea, necesitaba convertir algún libro a este formato. Ya había trabajado en un proyecto similar, pero en Java, en el que a partir de una hoja de cálculo, se generaba una página web, compatible con Kindle, con la historia en cuestión. En aquella ocasión, el formato era bastante estricto y utilizaba la columna en la que se colocaba cada texto en la columna para diferenciar entre descripciones y opciones.

Para este proyecto, quería que el programa aceptara el texto en el formato más próximo al original posible, para reducir al mínimo el tiempo que se tardaba en convertir un libro a este formato o redactarlo desde cero. Por tanto, decidí que el programa detectara automáticamente las opciones donde encontrara el texto «pasa a la página». El único elemento nuevo que había que introducir sería indicar al principio de cada página su número. Por tanto, una página tendría la siguiente forma:

[...]
*página 19
A esa altura estas bastante seguro de que has recorrido la mayor parte de la distancia que te separa de la última cabaña. No puede faltarte más de un kilómetro y medio para llegar al refugio... y a la radio. A través de la nieve, que cae torrencialmente, divisas un arqueado saliente rocoso que forma algo parecido a una diminuta cueva. ¿Te refugiarás allí y esperarás a que amaine la tormenta o seguirás adelante?
Si te pones a cubierto, pasa a la página 37.
Si continúas la marcha, pasa a la página 27.
*página 21
[...]

El archivo de entrada es un formato de texto plano pero, para que sea posible añadir ilustraciones y estilos de letra, admite etiquetas html. De esta manera, con un poco de práctica es posible convertir un libro de este tipo directamente extraído mediante OCR en una media hora. Para ver un ejemplo de este libro interactivo redactado con este formato, basta con visitar este siguiente repositorio en GitHub, pero si quieres recordar de inmediato la lectura de este libro, puedes leer nuestra miniaventura interactiva, aunque en este caso, no se trata de uno de los libros de aquella colección mítica, sino una aventura nueva redactada expresamente para servir de ejemplo. Notarás que es muy corta, ¿te atreves a continuarla?

Ahora solo queda escribir un programa que sea capaz de trabajar con este texto, pero eso lo veremos en la siguiente entrega.

No hay comentarios:

Publicar un comentario

Assassin's Creed Valhalla (aprende a jugar en 5 minutos)

  Pad derecho: ↑: llamar a cuervo (localizar recursos/objetivos) ←: silbar/llamar montura →: consumir ración ↓: acciones rápidas (llamar dra...