its-a-date/Toolbox.py

134 lines
7.1 KiB
Python
Raw Normal View History

2024-11-14 23:26:28 +01:00
""""
Hier finden Sie Funktionen, die Sie für Ihr eigenes Abenteuer nutzen können.
Die Funktionen sind auch auf OneNote dokumentiert.
"""
import random
2024-12-11 10:07:05 +01:00
def randomInRange (untergrenze,obergrenze):
2024-11-14 23:26:28 +01:00
"""Generiert einen zufälligen Wert innerhalb vorgegebener Grenzen"""
2024-12-11 10:07:05 +01:00
return random.randint(untergrenze,obergrenze)
2024-11-14 23:26:28 +01:00
2024-12-11 10:07:05 +01:00
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)
2024-11-14 23:26:28 +01:00
2024-12-11 10:07:05 +01:00
def testeObInListe (liste, ding):
2024-11-14 23:26:28 +01:00
"""Überprüft, ob ein Element in einer Liste vorhanden ist und gibt entsprechend Rückmeldung"""
if ding in liste:
return True
2024-12-11 10:07:05 +01:00
else:
print("Leider existiert",ding,"nicht - jedenfalls nicht hier...")
2024-11-14 23:26:28 +01:00
return False
2024-12-11 10:07:05 +01:00
def zeigeListe (listeDerOptionen):
2024-11-14 23:26:28 +01:00
"""Zeigt eine Liste von Optionen nummeriert an."""
for i, element in enumerate(listeDerOptionen):
2024-12-11 10:07:05 +01:00
print(f"{i+1}. {element}")
2024-11-14 23:26:28 +01:00
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)
2024-12-11 10:07:05 +01:00
2024-11-14 23:26:28 +01:00
# Eingabe der gewünschten Option durch den Nutzer
auswahl = int(input("Für welche Option entscheiden Sie sich?"))
2024-12-11 10:07:05 +01:00
2024-11-14 23:26:28 +01:00
# Ü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:
2024-12-11 10:07:05 +01:00
return auswahl
2024-11-14 23:26:28 +01:00
def pressForward():
"""Hält das Ausführend des Programms an, bis der Benutzer eine Taste drückt."""
2024-12-11 10:07:05 +01:00
input("\n-----------Drücken Sie eine beliebige Taste fürs Weiterfahren.-----------")
2024-11-14 23:26:28 +01:00
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!")
2024-12-11 10:07:05 +01:00
pressForward()
2024-11-14 23:26:28 +01:00
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::::::::::::::::")
2024-12-11 10:07:05 +01:00
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)