¿Te acuerdas de la primera vez que jugaste Doki Doki Literature Club y Monika te llamó por tu nombre real? Ese escalofrío es el resultado de un truco de ingeniería genial. En esta primera entrega de nuestro Desafío de Construcción Extrema: Edición Ren'Py, vamos a crear una carpa mística donde nuestra adivina, Madame Zora, usará Python para calcular días de la semana y "hackear" el nombre del sistema operativo del jugador.
El Poder Matemático: Adivinar el Día de la Semana 🔮
Detrás de la magia del calendario hay un algoritmo clásico de la matemática (como el de Doomsday). En lugar de calcularlo a mano, usaremos la librería nativa datetime de Python dentro de Ren'Py para procesar cualquier fecha que el usuario ingrese por teclado.
El Truco de Monika: Leyendo el Sistema 🖥️
Los videojuegos corren sobre un sistema operativo que sabe exactamente quién inició sesión. Con las librerías os y getpass, podemos preguntarle a la computadora el nombre del usuario y guardarlo en una variable secreta.
El Código Base (Script.rpy) 📜
Copia y pega este código en tu proyecto de Ren'Py para ver la magia en acción:
init python:
import datetime
import getpass
import os
# Función para descifrar el día de la semana
def calcular_dia(fecha_texto):
try:
fecha_objeto = datetime.datetime.strptime(fecha_texto, "%d/%m/%Y")
numero_dia = fecha_objeto.weekday()
dias_semana = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
return dias_semana[numero_dia]
except:
return None # Si el usuario escribe texto inválido, no se rompe el juego
# Función para obtener el usuario real de la PC
def obtener_nombre_sistema():
try:
return getpass.getuser()
except:
return os.environ.get("USERNAME", "Viajero")
define adivina = Character("Madame Zora", color="#993399")
label start:
scene bg_tienda_mistica
$ nombre_real = obtener_nombre_sistema()
adivina "Dime, alma viajera... ¿cómo te llamas en este plano?"
$ nombre_juego = renpy.input("Introduce tu nombre:").strip()
if not nombre_juego:
$ nombre_juego = "Forastero"
adivina "Bien, [nombre_juego]. Ahora dime una fecha importante en formato DD/MM/AAAA."
label pedir_fecha:
$ fecha_ingresada = renpy.input("Fecha (ejemplo: 20/05/1995):").strip()
$ resultado_dia = calcular_dia(fecha_ingresada)
if resultado_dia is None:
adivina "Las brumas están densas... Esa fecha no es válida. Inténtalo de nuevo."
jump pedir_fecha
adivina "¡La esfera brilla! El día [fecha_ingresada] fue un majestuoso **[resultado_dia]**."
adivina "Pero mi esfera ve mucho más allá..."
# Confrontando al jugador con el truco de Monika
if nombre_juego.lower() == nombre_real.lower():
adivina "Veo que eres honesto. Tu espíritu coincide con el nombre de tu máquina: **[nombre_real]**."
else:
adivina "Has intentado ocultarte bajo el nombre de '[nombre_juego]'..."
adivina "¡Pero a la esfera no se le miente! Tu verdadero nombre en el mundo de metal es... **[nombre_real]**."
return
Visita mi canal de Youtube para más explicación:
Top comments (0)