134 lines
7.1 KiB
Python
134 lines
7.1 KiB
Python
""""
|
|
Hier finden Sie Funktionen, die Sie für Ihr eigenes Abenteuer nutzen können.
|
|
Die Funktionen sind auch auf OneNote dokumentiert.
|
|
"""
|
|
|
|
import random
|
|
|
|
def randomInRange (untergrenze,obergrenze):
|
|
"""Generiert einen zufälligen Wert innerhalb vorgegebener Grenzen"""
|
|
return random.randint(untergrenze,obergrenze)
|
|
|
|
def randomItem ():
|
|
"""Wählt einen zufälligen Gegenstand aus einer vordefinierten Liste aus."""
|
|
möglicheGegenstände = ["holzpflocksichere Weste","Anti-Knoblauch-Spray","Noten-Booster","Nachsitz-Stellvertreter*in","Gummibärli mit veganer Gelatine","Hausaufgaben-Weg!-Zauber","Sportunterricht-Schwänz-Ausreden-Generator","Dauer-Abo für Programmier-Lern-Videos","nasse-Schwämme-Kanone, unsichtbar für Lehrsonen","vom-Bett-direkt-ins-Schulzimmer-Beamer","Hausaufgaben-Butler","langweilige Informatik-Lektion (äusserst selten!!!)","Monster-Lexikon","Friedens-Panzer","privater Mensa-Tisch mit unendlich Dessert","ewige Jugend","Mute-Schalter für Erwachsene","Thermo-Mix","Lösungen für alle Prüfungen ever","1 Tonne Kaugummi mit Salat-Geschmack","solarbetriebenes Karton-Uboot","Übersetzungsgerät Katzen->Menschen","Hausstaub","Ersatz-Schuebändel","sehr effizientes Reinigungsmittel","Buch 1001 lustige Mathe-Rätsel","10-bändige Enzyklopädie des schweizerdeutschen Humors","3-zinkige Gabel","Löffel mit eingebautem Lautsprecher","Staubsauger, der dich versteht","personalisierbares WC-Papier","Velo mit Gartenschlauch-Anschluss","Laserschwert-Schärfer","Pickel-Erzeugungs-Crème","elegante Wanderschuhe","interstellare Raumfähre für Würmer","Bücherwurm-Komposter","nimmermüdes Murmeltier","Regenbogen produzierende Sonnenbrille","Sichtbarmachende Unsichtbarkeitsbrille","Pflanzenwachstums-Beschleunigungs-Spray","Gedankenlesende Haarbürste","Selbstreinigendes Geschirr","Automatischer Unterrichts-Versteher","Unzerbrechliche Seifenblase","Universale Fernbedienung für alles","Portabler Schwarzes Loch Müllschlucker"]
|
|
return random.choice(möglicheGegenstände)
|
|
|
|
def testeObInListe (liste, ding):
|
|
"""Überprüft, ob ein Element in einer Liste vorhanden ist und gibt entsprechend Rückmeldung"""
|
|
if ding in liste:
|
|
return True
|
|
else:
|
|
print("Leider existiert",ding,"nicht - jedenfalls nicht hier...")
|
|
return False
|
|
|
|
def zeigeListe (listeDerOptionen):
|
|
"""Zeigt eine Liste von Optionen nummeriert an."""
|
|
for i, element in enumerate(listeDerOptionen):
|
|
print(f"{i+1}. {element}")
|
|
|
|
def wähleAusListe(listeDerOptionen):
|
|
"""Lässt Benutzer*innen eine Option aus einer Liste auswählen und gibt die gewählte Option zurück."""
|
|
zeigeListe(listeDerOptionen)
|
|
|
|
# Eingabe der gewünschten Option durch den Nutzer
|
|
auswahl = int(input("Für welche Option entscheiden Sie sich?"))
|
|
|
|
# Überprüfung, ob die eingegebene Option wählbar ist
|
|
if auswahl < 1 or auswahl > len(listeDerOptionen):
|
|
print("Ungültige Auswahl. Bitte versuchen Sie es erneut.")
|
|
return wähleAusListe(listeDerOptionen)
|
|
else:
|
|
return auswahl
|
|
|
|
def pressForward():
|
|
"""Hält das Ausführend des Programms an, bis der Benutzer eine Taste drückt."""
|
|
input("\n-----------Drücken Sie eine beliebige Taste fürs Weiterfahren.-----------")
|
|
|
|
def AbenteuerAbbrechen():
|
|
"""Beendet das Abenteuer vorzeitig und bricht die Ausführung des Programms ab."""
|
|
print("Das Spiel ist leider zu Ende.")
|
|
exit()
|
|
|
|
def AbenteuerEnde():
|
|
"""Markiert das erfolgreiche Ende des Abenteuers."""
|
|
print("Nach zahlreichen Strapazen haben Sie es geschafft!")
|
|
pressForward()
|
|
print("Sie sind rechtzeitig in die heutige Informatik-Lektion gekommen!")
|
|
pressForward()
|
|
print("Mit einem seligen Lächeln geben Sie sich den spannenden Inhalten hin :-)")
|
|
pressForward()
|
|
print("::::::::::::::::THE END::::::::::::::::")
|
|
|
|
|
|
class Wesen ():
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.lebenspunkte = 100
|
|
self.kraft = randomInRange(3,6) # randomisierte Kraft zur Instanziierung, um Spielablauf weniger berechenbar zu gestalten
|
|
self.besitz = self.besitz = [randomItem()]
|
|
|
|
def stelltSichVor(self):
|
|
"""Stellt das Wesen vor und zeigt dessen Besitz."""
|
|
print("Name:\t\t",self.name)
|
|
print("Folgendes ist im Besitz von ",self.name,":")
|
|
zeigeListe(self.besitz) # Aufruf einer weiteren Funktion (zeigeListe)
|
|
pressForward()
|
|
|
|
def bekommtEtwas (self, beschreibung):
|
|
"""Fügt der Besitzliste des Wesens ein neues Item hinzu."""
|
|
self.besitz.append(beschreibung)
|
|
print(self.name,"besitzt jetzt",beschreibung)
|
|
|
|
def gibtEtwasAn (self, nehmer, beschreibung):
|
|
"""Ermöglicht die Übergabe von Gegenständen zwischen zwei Wesen."""
|
|
print(self.name,"gibt",beschreibung,"an",nehmer.name)
|
|
if testeObInListe (self.besitz,beschreibung)==False:
|
|
print("\nOh",self.name,"hat gar kein",beschreibung,":-(")
|
|
else:
|
|
nehmer.bekommtEtwas(beschreibung)
|
|
self.besitz.remove(beschreibung)
|
|
pressForward()
|
|
|
|
def kämpftMit (self, anderesWesen, anzahlRunden):
|
|
"""Lässt zwei Wesen über eine bestimmte Anzahl von Runden miteinander kämpfen."""
|
|
print("\n",self.name,"und",anderesWesen.name,"kämpfen!")
|
|
|
|
# Hier werden 4 Funktionen innerhalb einer Funktion definiert.
|
|
# Das ist dann sinnvoll, wenn diese Funktion nirgends sonst verwendet werden.
|
|
# Falls später z.B. der Verlierer dem Gewinner einen Gegenstand gibt, kann das unkompliziert ergänzt werden - ohne den übrigen Code zu verändern.
|
|
def kämpfen (fig1, fig2): # fig1=verteidiger, fig2= angreifer
|
|
if testeObBeideLeben(self, anderesWesen):
|
|
angriffsstärke = randomInRange(1,10) * fig2.kraft
|
|
print(fig2.name,"greift",fig1.name,"mit",angriffsstärke,"an.")
|
|
fig1.lebenspunkte=fig1.lebenspunkte-angriffsstärke
|
|
statusbericht(fig1)
|
|
|
|
def statusbericht (wesen):
|
|
print("Lebenspunkte von",wesen.name,":\t",wesen.lebenspunkte)
|
|
|
|
def kampfBeenden(self):
|
|
print("\nDer Kampf zwischen",self.name,"und",anderesWesen.name,"ist zu Ende.")
|
|
|
|
if self.lebenspunkte > anderesWesen.lebenspunkte:
|
|
print(self.name,"hat gewonnen!")
|
|
else:
|
|
print(self.name,"hat verloren.")
|
|
|
|
def testeObBeideLeben(self, anderesWesen):
|
|
if self.lebenspunkte > 0 and anderesWesen.lebenspunkte > 0:
|
|
return True
|
|
|
|
# Es folgt nun in den nächsten Zeilen der eigentliche Kampf.
|
|
# Durch die Verwendung von Funktionen wird es sehr übersichtlich!
|
|
statusbericht(self)
|
|
statusbericht(anderesWesen)
|
|
rundenZähler = 1
|
|
anzahlRunden +=1
|
|
while (rundenZähler<anzahlRunden and testeObBeideLeben(self, anderesWesen)):
|
|
print("\nRunde",(rundenZähler),":")
|
|
kämpfen(self, anderesWesen)
|
|
kämpfen(anderesWesen, self)
|
|
rundenZähler+=1
|
|
pressForward()
|
|
kampfBeenden(self) |