Zum Hauptinhalt springen

Text Adventure v2

Jetzt wo Sie eine erste Version Ihres Text Adventures fertig umgesetzt haben, ist es an der Zeit, das Abenteuer etwas interessanter zu gestalten. Eine hervorragende Möglichkeit dazu ist die Verwendung von Zufallszahlen.

Zur Erinnerung: Zufallszahlen generieren wir mit der Funktion randint() aus dem Modul random. In folgendem Beispiel wird eine Zufallszahl zwischen 11 und 1010 generiert und ausgegeben:

from random import *

zufallszahl = randint(1, 10)

print(zufallszahl)

Wie könnte man Zufallszahlen im Spiel nutzen?

In einem Text Adventure gibt es viele Einsatzmöglichkeiten für Zufallszahlen. Klassischerweise verwenden wir sie, um statische (also, vorher festgelegte) Entscheidungen dynamischer zu machen.

Als Beispiel: Sagen wir, Ihr Held trifft bei seinem Abenteuer auf einen Wolf und muss sich entscheiden: Will ich kämpfen, oder will ich fliehen? Bisher sah Ihr Code für eine solche Situation vielleicht so aus:

entscheidung = input("Möchtest den Wolf bekämpfen oder um dein Leben rennen? (kämpfen/rennen): ")

if entscheidung == "kämpfen":
print("Du bist zu schwach. Der Wolf schlägt dich im Kampf. Spiel vorbei!")
elif entscheidung == "rennen":
print("Glück gehabt; du bist dem Wolf entflohen! Nach kurzer Verschnaufpause setzt du dein Abenteuer fort.")

Sie legen in Ihrem Code als von vornherein fest, was die Konsequenz des Kämpfens oder der Flucht sein wird. Der Spieler muss also lediglich hoffen, dass er auch die richtige Option tippt.

Mithilfe einer Zufallszahl könnten wir die Logik aber so umstellen, dass beispielsweise der Kampf nicht in jedem Fall gleich verläuft:

from random import *

entscheidung = input("Möchtest den Wolf bekämpfen oder um dein Leben rennen? (kämpfen/rennen): ")

if entscheidung == "kämpfen":
staerke_wolf = randint(1, 6)
if staerke_wolf < 3:
print("Triumph! Du hast den Wolf im Kampf besiegt und dein Ansehen um 10 Punkte gesteigert.")
else:
print("Du bist zu schwach. Der Wolf schlägt dich im Kampf. Spiel vorbei!")
elif entscheidung == "rennen":
print("Glück gehabt; du bist dem Wolf entflohen! Nach kurzer Verschnaufpause setzt du dein Abenteuer fort.")

Und schon verläuft das Spiel bei jedem Durchlauf etwas anders: Auf Zeile 6 entscheiden wir nach dem Zufallsprinzip, wie stark der Wolf sein soll. Handelt es sich um einen schwachen Wolf (also, mit einer Stärke von 11 oder 22), so gewinnt der Held den Kampf und erntet Ansehen. Trifft er jedoch auf einen stärkeren Wolf (Stärke 33 oder mehr), so verliert er.

Strategie durch Zufall

Solche Zufallsentscheide können Ihr Spiel unter Umständen sogar vorhersehbarer machen. In der ursprünglichen Version wusste der Spieler nicht, wie er sich entscheiden muss. Er musste also einfach raten und hoffen.

Wie wäre es aber, wenn der Spieler so etwas wie eine Kampfstärke hätte? Anfangs startet er vielleicht mit einer Kampfstärke von 22. Einen Kampf mit einem solchen Wolf würde er demnach nur in 22 von 66 Fällen gewinnen. Im Verlauf des Spiels kann er sich aber beispielsweise durch das Meistern von Herausforderungen mehr Kampfstärke erarbeiten. So würde er später vielleicht mit einer Kampfstärke von 55 einen solchen Kampf in 55 von 66 Fällen gewinnen.

Nun können Sie den Spieler vor eine Entscheidung treffen, die nicht mehr zufällig, sondern strategisch getroffen werden kann:

Vor dir steht ein Wolf. Deine Kampfkraft beträgt momentan 4/6. Wenn du den Kampf gewinnst, dann steigt dein Ansehen um 10 Punkte. Verlierst du, so ist dein Abenteuer vorbei. Wenn du wegrennst, bist du auf der sicheren Seite - dafür sinkt dein Ansehen um 5 Punkte. Was möchtest du tun? (kämpfen/rennen)

Ein Beispiel

Etwa so könnte das aussehen, wenn wir eine Zufallszahl als Entscheidungsgrundlage verwenden:

from random import randint

staerke = 2

print("Willkommen beim Schatzsuche-Spiel!")
print("Du befindest dich in einem Wald. Du musst den versteckten Schatz finden.")
print("Du stehst an einer Wegkreuzung. Du kannst nach links, rechts oder geradeaus gehen.")

auswahl = input("In welche Richtung möchtest du gehen? (links/rechts/geradeaus): ")
if auswahl == "links":
print("Du stösst auf einen Fluss. Du kannst schwimmen oder eine Brücke finden.")
auswahl = input("Was möchtest du tun? (schwimmen/brücke): ")
if auswahl == "schwimmen":
print("Du wurdest von einem Krokodil angegriffen! Spiel vorbei!")
elif auswahl == "brücke":
print("Du hast eine versteckte Brücke gefunden und den Fluss sicher überquert.")
print("Du siehst eine Höhle vor dir.")
auswahl = input("Möchtest du die Höhle betreten? (ja/nein): ")
if auswahl == "ja":
print("Du hast den Schatz gefunden! Herzlichen Glückwunsch, du gewinnst!")
else:
print("Du hast beschlossen, die Höhle nicht zu betreten und den Schatz verpasst. Spiel vorbei!")
else:
print("Ungültige Wahl! Spiel vorbei!")

elif auswahl == "rechts":
print("Du begegnest einem Rudel Wölfe. Du kannst entweder rennen oder versuchen, sie zu zähmen.")
auswahl = input("Was möchtest du tun? (rennen/zähmen): ")
if auswahl == "rennen":
print("Du bist erfolgreich vor den Wölfen geflohen.")
print("Du siehst ein Schloss in der Ferne.")
auswahl = input("Möchtest du dich dem Schloss nähern? (ja/nein): ")
if auswahl == "ja":
print("Du bist ins Schloss eingetreten und hast den Schatz gefunden! Herzlichen Glückwunsch, du gewinnst!")
else:
print("Du hast beschlossen, dich dem Schloss nicht zu nähern und den Schatz verpasst. Spiel vorbei!")
elif auswahl == "zähmen":
print("Du versuchst, die Wölfe zu zähmen. Deine Stärke beträgt " + str(staerke) + "/6.")
staerke_wolf = randint(1, 6)
print("Der Wolf hat eine Stärke von " + str(staerke_wolf) + ".")
if staerke >= staerke_wolf:
print("Du hast den Wolf besiegt! Deine Stärke steigt um 1 an.")
staerke = staerke + 1
else:
print("Die Wölfe greifen dich an! Spiel vorbei!")
else:
print("Ungültige Wahl! Spiel vorbei!")

elif auswahl == "geradeaus":
print("Du gehst geradeaus und triffst auf eine Riesenspinne.")
auswahl = input("Was möchtest du tun? (kämpfen/fliehen): ")
if auswahl == "kämpfen":
print("Du hast die Spinne besiegt!")
print("Du siehst eine Höhle in der Nähe.")
auswahl = input("Möchtest du die Höhle erkunden? (ja/nein): ")
if auswahl == "ja":
print("Du hast den Schatz gefunden! Herzlichen Glückwunsch, du gewinnst!")
else:
print("Du hast beschlossen, die Höhle nicht zu erkunden und den Schatz verpasst. Spiel vorbei!")
elif auswahl == "fliehen":
print("Du konntest der Spinne entkommen.")
print("Du siehst einen Tempel in der Ferne.")
auswahl = input("Möchtest du den Tempel betreten? (ja/nein): ")
if auswahl == "ja":
print("Du bist in den Tempel eingetreten und hast den Schatz gefunden! Herzlichen Glückwunsch, du gewinnst!")
else:
print("Du hast beschlossen, den Tempel nicht zu betreten und den Schatz verpasst. Spiel vorbei!")
else:
print("Ungültige Wahl! Spiel vorbei!")

else:
print("Ungültige Wahl! Spiel vorbei!")