its-a-date/Toolbox.py
2024-12-11 10:07:05 +01:00

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)