"""" 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