Hora del código #13
Estoy con la curiosidad de crear un librojuego para Android usando Godot. Entonces decidí comenzar con el backend para guardar los datos de la historia, se me ocurrió usar Sqlite3 porque investigué y Godot tiene un librería que lee esa base de datos. Este es el esquema inicial que se me ocurrió:
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS `requisito_tipo` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`nombre` TEXT
);
CREATE TABLE IF NOT EXISTS `requisito` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`tipo` INTEGER,
`nombre` TEXT,
`valor` TEXT,
FOREIGN KEY(`tipo`) REFERENCES `requisito_tipo`(`id`)
);
CREATE TABLE IF NOT EXISTS `pasaje` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`contenido` TEXT
);
CREATE TABLE IF NOT EXISTS `conexion` (
`origen` INTEGER,
`destino` INTEGER,
`requisito` INTEGER,
FOREIGN KEY(`origen`) REFERENCES `pasaje`(`id`),
FOREIGN KEY(`destino`) REFERENCES `pasaje`(`id`),
FOREIGN KEY(`requisito`) REFERENCES `requisito`(`id`)
);
CREATE VIEW conexiones as
select
c.origen, c.destino, rt.nombre as tipo_requisito, r.nombre nombre_requisito, r.valor
from conexion as c
join requisito as r on c.requisito = r.id join requisito_tipo as rt on r.tipo = rt.id;
COMMIT;
Los pasajes son los textos de una ubicación o una conversación o simplemente un nodo. Las conexiones son las vías que hay de un pasaje a otro. Los requisitos son las cosas como variables (posee un objeto, ha visitado un lugar, etc.) o tiradas de dados que debe cumplir el lector-jugador para poder acceder al destino de una conexión.
Ya que me funcionó tan bien el Tkinter en mi último proyecto decidí volver a emplearlo, pensé en una interfaz con un menú que permitiera cambiar entre los mantenimientos, en un principio son:
- De pasajes y conexiones.
- De requisitos.
- De tipos de requisitos.
Así es como luce ahora:
En la columna donde dice requisitos irían los mantenimientos del menú actual. En la columna derecha que es una imagen, pues instalé [Graphviz] y una librería para usar Graphviz en Python y con eso puedo generar un grafo dirigido que me permite ver las conexiones entre pasajes y sus requisitos, por ejemplo; para ir de 2 a 5 el lector-jugador necesita que su estadística de encanto sea como mínimo cinco. O para ir de 4 a 5 necesita haber conocido al personaje no jugador conocido como el borracho. Lo de dado vendría a significar; el lector-jugador necesita lanzar 2 dados de 6 caras y obtener un mínimo de 8 ó se puede usar un rango de 4 a 6, por ejemplo.
Había olvidado que tkinter proveía ttk para darle más estilo (jajaja) a ciertos controles, será de meterle mano. Este es el código que escribí hoy:
|
|