1

Cómo crear una novela interactiva de forma sencilla y sin complicarse

Usando lo aprendido en el curso de fundamentos de Python voy a explicar como hacer una especie de “historia interactiva”, no tiene muchas complicaciones y según queramos podemos usar más o menos condicionales. Una de esas cosas que a mi me interesaban cuando empecé el curso era saber como funcionaban este tipo de historias y en general he podido replicar una mía propia, claro que vosotros podéis hacer la historia que queráis.

Lo primordial al empezar a escribir tu propia historia es básicamente pensar en que vas a escribir, no tienes porque saber todo sobre tu historia al comenzar, ni siquiera el final, puedes ir pensándolo confirme la escribes. Pero una vez tengas una base sobre la que escribir, toda tu historia se va a basar sobre el comando print, y por lo general , solo vas a usar strings, que es lo normal a escribir una historia, pero en fin, al caso.

En mi caso yo decidí hacer una historia relacionada con la guerra o el combate en general, pero podéis hacerla de lo que queráis y darle la duración que queráis , es libre , incluso podéis simplemente hacer una historia que te explique con prints algo, pero es más entretenido poder controlar el curso de lo escrito.

print('Bienvenido a las "Crónicas de Middenheim". ')print("En esta historia interactiva exploraremos la breve historia de la Gran Batalla de Middenheim, que enfrento al Ejército Imperial Salvatoriano y al Nucleo Primana en la batalla por el control del planeta de Middenheim en el sistema Tsahir.")print("En tu caso, verás el destino de un soldado Salvatoriano en esta mítica batalla, en concreto en las líneas del Frente como Infantería.")
nombre = input("Introduce el nombre de tu personaje ")
apellido = input("Introduce el apellido de tu personaje ")

Aquí simplemente una breve introducción y dos inputs para que se elija el personaje, no he puesto nada como .upper, ni siquiera .capitalize porque considero que es mejor que cada cual llame a su personaje como quiera, claro que cuando hagáis la vuestra podéis cambiar eso y usar el .capitalize o incluso el .lower . Vamos, que eso es al gusto de cada uno.

print(f"Buenas {nombre} - dice Elson - al fin vamos a llegar al campo de batalla de una vez, eh?")
respuesta = input("¿Qué opinas, realmente crees que el campo de batalla es tan atractivo? (Si/No) ")
respuesta.capitalize()
if(respuesta == "No"):
  print("No, no crees que lo sea, a fin de cuentas no es bonito estar siempre al borde de la muerte, no sabes si la guerra es buena o mala, quizá no debería haberla o sí, pero deberías estar en la retaguardia más tranquilo.")
elif(respuesta == "Si"):
  print("Luchar por tu nación es algo digno de devoción, el Imperio Salvatoriano y su causa son justas, el Nucleo Primana ha de caer y su tierra ser conquistada.")

Este otro es mi primer uso de condicionales para tomar decisiones, según lo que se escriba en el input se dará una respuesta u otra, aquí si he colocado un .capitalize para que si por ejemplo, se escribe “no”, que se convierta en “No” y si sea aceptado. También se puede colocar un else después del if , para que cualquier cosa que no sea la del if te dé el otro resultado, pero yo personalmente he preferido el elif. Aunque, eso sí, he hecho que esta decisión no tenga relevancia final en la historia.

print("En todo caso, no importa, en unas horas te vas a enfrentar a la realidad. Tu regimiento ha sido enviado a Lugdunum, la segunda ciudad más grande del planeta donde se dice que el tiempo medio de supervivencia de los reclutas es de 12 horas y por lo que sabes, los combates son más que encarnizados, es imposible avanzar un solo metro sin que caigan cientos de hombres.")input("¿Continuar? ")print("------------------------------------------------------------------------------------")print(" Dejas pasar el tiempo y finalmente tu convoy llega de madrugada a las afueras de Lugdunum, y por lo que escuchas, parece ser que ni de noche cesan los combates, las piezas de artillería siguen tronando y se escuchan disparos en la lejanía.")print("Tu unidad es descargada y de inmediato os mandan a la línea del frente en el norte de la ciudad. Allí se disfruta una relativa 'paz' y parece que reina la calma. Pero conforme sale el Sol, comienzan los combates y pronto ves caer la furia de tus enemigos en forma de proyectiles de artillería que destrozan todo a su paso. O al menos lo que quedaba. Una trinchera Salvatoriana recibe un impacto directo, convirtiendo en meros trozos de carne a sus ocupantes, los hombres del Núcleo Primana aprovechan la ocasión para tomarla sin resistencia.")print("Poco después, cesa el bombardeo y son tus aliados los que comienzan su turno, el bombardeo ahora golpea las posiciones enemigas desde todas partes, sin embargo no es apuntada hacia la trinchera que lograron capturar, por lo que los proyectiles caen fútilmente sobre unas posiciones abandonadas.")input("¿Continuar? ")

Aquí, aunque todo sean comandos normales me gustaría mencionar que dado que Python printea todo lo que se le diga que se printee inmediatamente, se generan bolas gigantescas de texto de repente. Por ello, para que no se note tanto el tocho, puse un par de inputs entre el texto para evitar algo así. A esos inputs eso sí, no les debe importar lo que se les conteste, solo están ahí para espaciar, no para almacenar variables.

Otra cosa es que he escrito bastante en los prints, pero vosotros podéis escribir menos , o incluso más si os ha venido la inspiración. Las historias siguen el curso que su creador quiera siempre, no tienen límites y podéis ser tan creativos como queráis.

print("------------------------------------------------------------------------------------")print(" Entonces, los oficiales de tu unidad y de otras muchas posicionadas en aquella zona deciden acordar realizar un asalto masivo contra la trinchera perdida aprovechando que aun no han fortificado la zona por completo, con suerte podrían avanzar algo más y cambiar el estado del frente a uno mucho más favorable.")print("Siguiendo las órdenes del Alto Mando, miles de hombres se disponen junto a las escaleras de salida de sus trincheras, lo único que los separa de una pequeña tierra de nadie y el objetivo. ALgunos afortunados son enviados por los túneles que antes habían conectado las trincheras actualmente aliadas y la que se perdio, ellos quizá vivan para ver otro día. Sin embargo tu unidad apenas tiene esperanzas, y posiblemente sea hecha trizas en cuanto salte a la Tierra de Nadie.")input("¿Continuar? ")print("------------------------------------------------------------------------------------")print("Poco antes de empezar el mediodía, todos estáis listos, los comisarios se colocan en sus puestos, silbatos en mano y se disponen a dar la orden de carga. Unos segundos después suena el primer silbato y todos lo siguen. Los primeros valientes saltan al campo de batalla, Elson, que se ha ofrecido para ir el primero, salta la escalera y cuando parecía que todo iba como la seda, inmediatamente varias balas perforan su cuerpo y lo dejan tendido en el suelo embarrado. A pesar de esto , todos los demás le siguen, algunos caen , otros viven y tú te encuentras entre los que viven.")print(f"AVISO: Tus decisiones a partir de ahora decidirán el destino de {nombre}.")

Esto sigue siendo más prints, además de alguna barra espaciadora. También está bien poner un aviso antes de comenzar a tomar decisiones serias, en mi caso use esto para que el mensaje sea diferente según el nombre de tu personaje. Ahora vamos a llegar a las decisiones y la parte más “complicada” de esto , pero tranquilidad que es muy simple.

FinalMalo1 = f"Al poco de cubrirte ,un obús impacta en el murete, convirtiéndote en papilla a tí y al murete, y así {nombre} {apellido}, murió poco antes de alcanzar el tiempo medio de vida de los reclutas. Nunca se encontraron sus restos y murió, sin honores, en el frente norte de Lugdunum. "Continuacion1 = "Tuviste suerte y el cráter te protege tanto de los enemigos en la trinchera como de la artillería, avanzando a través de los cráteres te acercas cada vez más al enemigo, observas a tus aliados y ves como la mayoría ha comenzado a avanzar, tras dejar tras de sí un reguero de cadáveres de compañeros. Te das cuenta de que sin quererlo eres el que más ha avanzado de toda la unidad, y pronto alcanzarás las alambradas de la tierra de nadie. Aunque te extraña que haya algunos explosivos intactos por colocados por la zona , sigues adelante."

Aquí lo que hago es registrar las primeras variables que usaré para hacer avanzar la historia , o para que se acabe si se comete una mala decisión. Las voy a usar en un momento.

respuesta1 = input("¿Te lanzas a un cráter, o te resguardas tras un murete? (Elegir C/M) ")
respuesta1.upper()
if(respuesta1 == "M"):
  print(FinalMalo1)
  print(f"Por desgracia, has fallado, {nombre} ha muerto.")
  import  sys
  sys.exit(0)
elif(respuesta1 == "C"):
  print(Continuacion1)
print("Por suerte, al alcanzar las alambradas, descubres un hueco gracias al bombardeo tanto enemigo como aliado, sin embargo te ves forzado a atravesar un tramo abierto mientras las balas silbean a tu alrededor.Al poco escuchas una fuerte explosión proveniente de las profundidades, lo que debe significar que los hombres de aquel túnel han sido sepultados y jamás volverían. Llegas a otro cráter y te pones a cubierto solo para descubrir que hay varios Primanios apostados en un cráter cercano con una ametralladora abatiendo a tus camaradas.")

Aquí lo que he hecho ha sido darle una decisión al jugador, en este caso he usado .upper porque las opciones están en mayúscula. Recomiendo poner primero la opción que acabe con el jugador muerto o perdiendo. Aquí he usado el módulo “sys” para parar el código y que no siga si se falla. Si se acierta, el juego continua.

FinalMalo2 = f"Decides continuar avanzando, no te ven y logras avanzar sin problemas hasta apenas unos metros de la trinchera, que está relativamente vacía, al darte la vuelta ves que la carga de tus aliados ha perdido casi todo su empuje y apenas quedan hombres avanzando a duras penas. Sin embargo, pronto escuchas el segundo silbato y una nueva ola de orgullosos Salvatorianos avanzan a toda velocidad hasta la alambrada tras tu estela. Ves que los soldados que viste antes ya no están disparando sino que en su lugar te están apuntando a ti, apenas si puedes pensar 'maldición' cuando aprietan el gatillo. Y así {nombre} {apellido}, murió por ser piadoso. Sus restos no fueron encontrados pero recibió una mención honorífica por ser el hombre que más lejos llegó aquel día en el frente norte de Lugdunum."Continuacion2 = "Acabas con ellos en el acto, nadie se da cuenta de que cayeron y logras alcanzar la trinchera enemiga sin problema.Al darte la vuelta ves que la carga de tus aliados ha perdido casi todo su empuje y apenas quedan hombres avanzando a duras penas. Sin embargo, pronto escuchas una segunda andanada de silbatos y una nueva ola de orgullosos Salvatorianos avanzan a toda velocidad hasta la alambrada tras tu estela. "
respuesta2 = input("¿Acabas con ellos, o intentas avanzar sin que te vean? (Acabar/Avanzar) ")

Aquí registro otras dos variables y coloco otro input inmediatamente después. Por mi parte en cada input he especificado que respuestas se deben introducir para que el jugador lo sepa, no es un adivino.

if(respuesta3 == "Rendirse"):
  print(FinalMalo3)
  print(f"Por desgracia, has fallado, {nombre} ha muerto.")
  import  sys
  sys.exit(0)
elif(respuesta3 == "Cortar"):
  print(FinalBueno)
  print(f"¡Felicidades,{nombre} ha sobrevivido! ")

No he especificado que variables he registrado aquí pero es básicamente igual, el jugador ha acabado la historia interactiva para bien ,o para mal.


  • Cómo Ejecutarla:

Esta historia y cualquiera que creéis se puede ejecutar en una consola de comandos, en algún programa que sirva para crear y editar código …etc. Para poder ver la mía al completo, aquí abajo he dejado un enlace de descarga del archivo Python en Mega.


Enlace :
https://mega.nz/file/bx9gSRgC#uPMzjxXIRoIz3ZquyDWdUnjuQi-ad5yp0eAttMgcMbU


  • Instrucciones:
    Al iniciar el juego tendrás que introducir el nombre y apellido de tu personaje, a partir de ahí tendréis que escribir las decisiones exactamente como os pida cada pregunta. El juego puede acabar alcanzando el final Bueno y canónico. O tomando otras decisiones que acabarán con tu personaje muerto y recibiendo un trato diferente según el punto hasta el que llegaste. Si tomas una decisión incorrecta, tu personaje morirá y el código se parará, si tomas una correcta, continuará. Si alcanzas el final bueno, serás felicitado y habrás ganado.

¡Diviértete inventando o jugando historias!

Y por último, espero que os guste+

Escribe tu comentario
+ 2
1
72275Puntos

Un curioso tutorial, ideal para practicar las bases y manejos de strings