Cómo programar un juego por texto en Python
Aprende a programar un juego por texto en Python paso a paso: estructura, decisiones, escenas con funciones, inventario y guardado de partida.
En esta guía
Para programar un juego por texto en Python necesitas tres cosas: mostrar texto con print(), leer la decisión del jugador con input() y bifurcar la historia con if. Con eso ya tienes un juego jugable. A partir de ahí organizas cada escena en una función y añades inventario y guardado. No hace falta experiencia previa.
Lo esencial: instala Python, usa print() para describir la escena, input() para leer la elección y if/elif para decidir qué pasa según la respuesta. Repite ese patrón en cada escena y tendrás tu aventura conversacional funcionando.
Prepara el entorno en 2 pasos
Antes de escribir una línea de código necesitas Python y un editor.
- Instala Python. Descárgalo desde python.org y, en Windows, marca la casilla Add Python to PATH durante la instalación. En Mac y Linux suele venir preinstalado.
- Comprueba que funciona. Abre la terminal o el símbolo del sistema y escribe
python --version. Si te devuelve un número de versión, ya está listo. Para escribir el código te basta cualquier editor: Visual Studio Code, Sublime Text o incluso el Bloc de notas.
Guarda tu archivo con extensión .py (por ejemplo aventura.py) y lo ejecutas desde la terminal con python aventura.py.
Escribe tu primer juego jugable
La base de cualquier aventura conversacional es siempre el mismo ciclo: describir la situación, pedir una decisión y responder según la elección. Este ejemplo ya es un juego completo que puedes ejecutar:
print("Estás en una habitación oscura. ¿Qué quieres hacer?")
print("1. Encender la luz")
print("2. Salir de la habitación")
opcion = input("Elige una opción: ")
if opcion == "1":
print("La luz revela una llave sobre la mesa. La coges.")
elif opcion == "2":
print("Tanteas la puerta, pero está cerrada con llave.")
else:
print("No entiendo esa opción.")
Tres detalles importantes desde el principio:
input()siempre devuelve texto, por eso comparas con"1"(entre comillas) y no con1.- Cubre todas las opciones, incluida la incorrecta con el
else. Un juego que se rompe ante una respuesta inesperada frustra al jugador. - Cada bloque de código va indentado con cuatro espacios. En Python la sangría no es estética: define qué instrucciones pertenecen a cada
if.
Organiza la historia en escenas con funciones
Un solo bloque de if se vuelve inmanejable en cuanto la historia crece. La solución es convertir cada escena en una función que llama a la siguiente según la decisión del jugador. Así puedes ramificar la trama sin perderte.
def inicio():
print("Despiertas en un bosque. Hay dos caminos.")
print("1. Tomar el camino de la izquierda")
print("2. Tomar el camino de la derecha")
opcion = input("¿Qué haces? ")
if opcion == "1":
lago()
elif opcion == "2":
cueva()
else:
print("No entiendo esa opción.")
inicio() # repite la escena hasta que elija bien
def lago():
print("Llegas a un lago brillante. El reflejo te ciega un instante.")
# aquí continúa la historia
def cueva():
print("Entras a una cueva oscura y oyes goteo de agua.")
# aquí continúa la historia
inicio()
Con este esquema añadir una ruta nueva es tan fácil como crear otra función y enlazarla desde la escena anterior. Para que las decisiones tengan peso de verdad, conviene cuidar el guion antes de programar: las mismas técnicas de cómo crear diálogos interactivos para un videojuego funcionan igual de bien en texto plano.
Decisiones que cambian la historia
Un buen juego por texto recompensa la atención del jugador. Tres reglas prácticas:
- Ofrece opciones claras y distintas entre sí. Evita elecciones que lleven al mismo sitio.
- Recuerda lo que el jugador hizo con variables. Por ejemplo, una variable
tiene_llave = Truepuede desbloquear una puerta varias escenas después. - Diseña finales alternativos. Si todas las rutas terminan igual, las decisiones dejan de importar.
Si te cuesta construir la trama, te ayudará repasar cómo escribir una novela y adaptar su estructura de capítulos a tus escenas.
Añade inventario y memoria al juego
El salto de “demo” a juego de verdad llega cuando el personaje recuerda objetos y estados. En Python lo resuelves con una lista para el inventario y variables para los hitos de la historia.
inventario = []
def recoger(objeto):
inventario.append(objeto)
print(f"Has recogido: {objeto}.")
def tiene(objeto):
return objeto in inventario
# uso:
recoger("llave")
if tiene("llave"):
print("Abres la puerta con la llave que llevas.")
La función tiene() te permite condicionar escenas según lo que el jugador haya recogido antes. Es la base de los puzles: una puerta que solo se abre si llevas la llave, un cofre que necesita una palanca, etc.
Guarda y carga la partida
Para que el jugador no empiece de cero cada vez, guarda el progreso en un archivo de texto. Python lo hace con la función open():
# guardar
def guardar(escena):
with open("partida.txt", "w") as f:
f.write(escena)
print("Partida guardada.")
# cargar
def cargar():
with open("partida.txt", "r") as f:
return f.read()
El bloque with open(...) cierra el archivo solo, así que no tienes que preocuparte por dejarlo abierto. Si quieres guardar el inventario entero y varias variables a la vez, lo más práctico es usar el módulo json, que convierte diccionarios de Python en texto y los recupera intactos.
| Mejora | Herramienta | Para qué sirve |
|---|---|---|
| Guardar progreso | open() + json | Que el jugador retome la partida |
| Inventario | Listas y diccionarios | Recoger y usar objetos |
| Pausas y suspenso | Módulo time | Espaciar el texto y crear tensión |
| Limpiar pantalla | os.system | Una escena por pantalla, más inmersión |
| Gráficos y sonido | Librería pygame | Dar el salto a un juego visual |
Cuando domines el texto y quieras dar el paso a algo visual, el camino natural es un motor gráfico: en esta guía verás cómo crear un videojuego en Godot, un entorno gratuito y muy amable para empezar.
Errores habituales y cómo evitarlos
- Olvidar las comillas al comparar.
if opcion == 1no funciona porqueinput()da texto; usa"1". - Mezclar mayúsculas. Si esperas
"si"y el jugador escribe"Si", falla. Normaliza conopcion.lower(). - No prever la opción inválida. Siempre cierra con un
elseque vuelva a preguntar o avise. - Indentación inconsistente. Mezclar espacios y tabuladores provoca el clásico
IndentationError. Elige cuatro espacios y respétalos.
Preguntas frecuentes
¿Necesito experiencia previa en programación para crear un juego por texto en Python?
No. Un juego por texto solo usa tres conceptos básicos (print, input e if), por lo que es uno de los mejores proyectos para empezar a programar. Aprenderás lógica de decisiones y organización del código sin enfrentarte a gráficos ni motores complejos.
¿Puedo añadir imágenes o sonidos a mi juego por texto?
Sí, con la librería pygame puedes incorporar imágenes, música y efectos. Eso sí, aumenta bastante la complejidad del proyecto, así que conviene tener sólido primero el juego solo con texto antes de dar el salto a lo audiovisual.
¿Cómo hago que la historia recuerde lo que hizo el jugador?
Con variables y listas. Por ejemplo, una variable tiene_llave = True o una lista de inventario te permiten comprobar más adelante qué objetos lleva el jugador y desbloquear escenas en consecuencia. Esa “memoria” es lo que convierte una serie de menús en una aventura real.
¿Cómo comparto mi juego para que otros lo jueguen?
Al ser Python multiplataforma, puedes enviar tu archivo .py y se ejecutará en cualquier ordenador con Python instalado. Si quieres que funcione sin instalar nada, herramientas como PyInstaller convierten tu código en un ejecutable independiente para Windows, Mac o Linux.
¿Qué proyecto me conviene hacer después?
Una vez controles las ramificaciones y el inventario, el siguiente nivel suele ser un motor gráfico o un juego con más interacción. Puedes mirar cómo desarrollar un juego multijugador online si te interesa la conexión entre jugadores, o pasar a un entorno visual con Godot o Unity.