-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a2be2fa
commit aeb0c37
Showing
2 changed files
with
114 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
113 changes: 113 additions & 0 deletions
113
content/material/Programmieren/Text-Adventure/03-Text-Adventure-v3.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
# Text Adventure v3 | ||
Mit zunehmender Länge und Komplexität unseres Spiels ist unser Code leider etwas unübersichtlich geworden. Um ihn aufzuräumen, können wir Funktionen verwenden. | ||
|
||
Am besten eignet sich dazu das Muster "Eine Szene = eine Funktion". Beispielsweise können wir die Begegnung mit der Riesenspinne als eine Szene betrachten. Wir definieren dazu eine Funktion `riesenspinne()` (Zeilen `72`-`82`). Dort, wo vorher die gesamte "Riesenspinnen-Logik" stand, rufen wir dann nur noch die Funktion auf (Zeile `90`). | ||
|
||
Dieser Ansatz hat einige Vorteile: | ||
- Wir haben nicht mehr `if`-Verzweigungen innerhalb anderer `if`-Verzweigungen. Wenn das Spiel nach einer Verzweigung noch weitergeht, dann rufen wir einfach die nächste Funktion auf, welche dann wieder ihre eigene Verzweigung hat. | ||
- Wir können die gleiche Szene über mehrere Pfade erreichen. Das sehen Sie beispielsweise mit der Funktion `schloss()` (Zeilen `28`-`34`), welche wir erreichen, indem wir vor den Wölfen fliehen (Zeile `42`) oder den Wolf besiegen (Zeile `50`). | ||
|
||
:::warning[global] | ||
In diesem Code-Beispiel hat sich noch eine kleine Besonderheit eingeschlichen: das Wort `global` auf Zeile `37`. | ||
|
||
Die Variable `staerke` ist eine sogenannte _globale_ Variable, was nichts anderes bedeutet, als dass sie **ausserhalb** einer Funktion definiert wird. Auf Zeile `49` weisen wir der Variable allerdings **innerhalb** einer Funktion (nämlich `woelfe()`) einen neuen Wert zu. | ||
|
||
**In Python gilt folgende Regel:** Wenn wir einer _globalen_ Variable _innerhalb einer Funktion_ einen _neuen Wert zuweisen_ wollen, dann müssen wir am _Anfang der Funktion_ `global name_der_variable` hinschreiben. `name_der_variable` ersetzen wir natürlich mit dem tatsächlichen Namen der Variable — in unserem Fall also `staerke`. | ||
::: | ||
|
||
```python showLineNumbers {28-34,42,50,37,72-82,90} | ||
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.") | ||
|
||
def bruecke(): | ||
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!") | ||
|
||
def fluss(): | ||
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": | ||
bruecke() | ||
else: | ||
print("Ungültige Wahl! Spiel vorbei!") | ||
|
||
def schloss(): | ||
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!") | ||
|
||
def woelfe(): | ||
global staerke | ||
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.") | ||
schloss() | ||
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 | ||
schloss() | ||
else: | ||
print("Die Wölfe greifen dich an! Spiel vorbei!") | ||
else: | ||
print("Ungültige Wahl! Spiel vorbei!") | ||
|
||
def hoehle(): | ||
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!") | ||
|
||
def tempel(): | ||
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!") | ||
|
||
def riesenspinne(): | ||
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!") | ||
hoehle() | ||
elif auswahl == "fliehen": | ||
print("Du konntest der Spinne entkommen.") | ||
tempel() | ||
else: | ||
print("Ungültige Wahl! Spiel vorbei!") | ||
|
||
auswahl = input("In welche Richtung möchtest du gehen? (links/rechts/geradeaus): ") | ||
if auswahl == "links": | ||
fluss() | ||
elif auswahl == "rechts": | ||
woelfe() | ||
elif auswahl == "geradeaus": | ||
riesenspinne() | ||
else: | ||
print("Ungültige Wahl! Spiel vorbei!") | ||
``` | ||
|
||
--- |