Du kombinierst Variablen, Eingaben, Rechnungen, Verzweigungen, Schleifen und Zufall zu einem Text-Adventure. Du betrittst eine Höhle, kämpfst oder fliehst und erhältst bei einem Sieg Gold. Eigene Funktionen und Listen kannst du als Zusatzaufgabe ergänzen; im Grundspiel kommen sie noch nicht vor.
random.randint(8, 15) liefert eine zufällige ganze Zahl von 8 bis 15, beide Grenzen eingeschlossen.
while monster_leben > 0 and leben > 0: wiederholt den Kampf, solange beide Lebenswerte grösser als 0 sind. and bedeutet «und». Innerhalb der Schleife müssen sich Werte verändern oder ein break muss die Schleife beenden, damit sie nicht endlos läuft.
Menüeingaben bleiben Text. Vergleiche deshalb mit "2", nicht mit der Zahl 2.
break?Erstelle die Datei und starte sie nach jeder Etappe.
random, gestalte den Titel und frage name ab. Setze leben auf 100 und gold auf 10. Begrüsse die Person.1 - Höhle betreten und 2 - Weglaufen. Frage wahl ab. Bei "2" endet die Geschichte mit einer Meldung. Sonst erscheint ein Monster mit 30 Leben.1 - Angreifen und 2 - Fliehen.aktion ab. Bei "2" gib eine Fluchtmeldung aus und beende die Schleife.leben ab und zeige den Schaden.leben <= 0 gilt. Gib dann eine Niederlagenmeldung aus.Die gesamte Kampflogik gehört in den else-Zweig der Höhlenwahl. Die Schleife liegt darin und benötigt eine weitere Einrückung. break verlässt die nächste umgebende Schleife. Prüfe den Sieg mit <= 0, weil Schaden die Monsterleben auch unter null bringen kann.
Im Grundspiel bedeutet "2" Weglaufen beziehungsweise Fliehen. Jede andere Eingabe führt in die Höhle beziehungsweise zum Angriff. Eine strengere Prüfung ist eine Zusatzaufgabe.
| Weg | Eingaben | Erwartung |
|---|---|---|
| Nach Hause | Name, dann 2 |
Ende ohne Kampf |
| Flucht | Name, dann 1, dann 2 |
Flucht ohne Angriff oder Belohnung |
| Sieg | Name, dann immer 1 |
Sieg und 30 Gold; kein Gegenangriff nach dem Sieg |
| Niederlage | Vorübergehend leben = 1, dann angreifen |
Niederlage nach dem ersten Gegenangriff |
Stelle nach dem Niederlagentest die Startleben wieder auf 100. Mit den normalen Werten gewinnst du beim fortgesetzten Angreifen in höchstens vier Angriffen; die höchstens drei Gegenangriffe reichen nicht für eine Niederlage. Die Schadenszahlen können bei jedem Start anders sein.
Baue jeweils eine Erweiterung ein und teste sie:
Erkläre jemandem anhand deines Codes eine Kampfrunde: Woher kommt der Schaden, welcher Wert verändert sich und warum endet der Kampf?
Vergleiche erst nach deinem eigenen Versuch. Dieser Code enthält das vollständige Grundspiel; die freiwilligen Zusatzaufgaben sind nicht eingebaut.
Datei: beispiele/mini-games/09_python_quest.py
import random
print("========================")
print(" PYTHON QUEST")
print("========================")
print()
name = input("Wie heisst du? ")
leben = 100
gold = 10
print()
print("Hallo", name + "!")
print("Du stehst vor einer dunklen Höhle.")
print("1 - Höhle betreten")
print("2 - Weglaufen")
wahl = input("> ")
if wahl == "2":
print("Du gehst nach Hause. Ende.")
else:
monster_leben = 30
print()
print("Ein Monster erscheint!")
while monster_leben > 0 and leben > 0:
print()
print("Dein Leben:", leben)
print("Monster:", monster_leben)
print("1 - Angreifen")
print("2 - Fliehen")
aktion = input("> ")
if aktion == "2":
print("Du fliehst aus der Höhle.")
break
schaden = random.randint(8, 15)
monster_leben = monster_leben - schaden
print("Du verursachst", schaden, "Schaden.")
if monster_leben <= 0:
print("Du hast das Monster besiegt!")
gold = gold + 20
print("Du findest 20 Gold.")
print("Gold:", gold)
break
monster_schaden = random.randint(5, 12)
leben = leben - monster_schaden
print("Das Monster verursacht", monster_schaden, "Schaden.")
if leben <= 0:
print("Du wurdest besiegt.")