💾 Archived View for yretek.com › noficcion › gopherjuego.gmi captured on 2023-06-16 at 16:43:31. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-04-19)

-=-=-=-=-=-=-

Gopherjuego

Versión en español de «My first gopher cgi»

Sí, como casi nadie ni tampoco su primo tengo un agujero en gopher. Sí, gopher, el abuelo raro de Gemini. Y ahora mismo casi no hay nada en mi gopher, pero sí lo suficiente para poder hablar de él. En concreto un librojuego que funciona bajo python.

Gopher no permite cookies, ni tampoco quiero yo crearme una base de datos, ni un archivo de datos para almacenar el estado del juego, que la gente tenga que darse de alta en parte alguna ni historias que no merecen la pena para un divertimento.

En vez de eso la información va a ir en la Query String. Sí, eso que se pone en una url tras un '?'. O sea gemini://ejemplo.org?estaEsLaQueryString

Vale pues la idea es usar la Query String con un formato tal que así, más o menos:

accionJugador-89AC67-12 

Donde accionJugador es la acción que ha emprendido el jugador y lo otro el estado.

Para el estado me he fijado en el viejo juego de rol de mesa Traveller, cuyos PJ's (Personaje Jugador) se definían con un perfil que se conforma con los valores ordenados de las difererentes características del personaje, pero cada una en hexadecimal.

Me explico 89AC67 puede signficar Fuerza 8 Destreza 9 Agilidad 10... si eres jugador de rol ya sabes a lo que me refiero, y si no pues son las puntuaciones que describen un personaje. La última parte, el '12' bien podrían ser los puntos de vida perdida o la puntuación.

Obviamente no se puede pasar muchísima información, por codificada que esté, pero para un sencillo librojuego debería bastar, y entre nosotros, los librojuegos sencillos no son peores que los complejos. Más bien al contrario.

¿Qué como funcionaría todo esto?

Er... estamos en ello, de momento lo que tengo del script va de la siguiente forma y manera:

#!/usr/bin/env python3
import os
print("1bala\t/cgi-bin/?bala\tyretek.com\t70")
print("1rala\t/cgi-bin/?rla\tyretek.com\t70")
if(os.environ['QUERY_STRING']=="bala"):
    print(f"Thats a bala")
else:
    print("nada")
print(os.environ['QUERY_STRING'])

Que solo es el resultado de mis cabezazos tratando de ver cómo, con el mínimo de computación,:

a) Generar un "enlace de gopher"

b) Pillar la Query String

En cuanto al enlace de gopher, es un poco más complicado que en Gemini. La cosa es que sigue un formato muy estricto separado por tabulador. Para visualizarlos bien en el programa, he optado por usar el código de escape \t.

En cuanto al b es bien sencillo. Importado el módulo os, es tan chorra como os.enivorn['QUERY_STRING'] y ya teniendo una string, solo es cuestión de manipularla a gusto.

La idea general, cuando esté el juego terminado, es que el jugador vaya a gopher://yretek.com/1/cgi-bin/ (habitualmente siguiendo un enlace). El script se llamará precisamente gophermap (el equivalente a index.html en html) y analiza si tien una QUERY_STRING. Si está vacía da inicio al juego, --es una nueva partida--, de lo contrario, una vez validada la Query String, continuará la partida por donde toque. Como es un libro juego eso significará generar el texto correspondientes y los enlaces de la nueva elección, actualizará los vales del PJ, etc, etc.

Y eso sería todo, por ahora.