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 ( " \n Oh " , 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 ( " \n Der 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 ( " \n Runde " , ( rundenZähler ) , " : " )
kämpfen ( self , anderesWesen )
kämpfen ( anderesWesen , self )
rundenZähler + = 1
pressForward ( )
kampfBeenden ( self )