import time import random global stepscount stepscount = 0 inventory = [] done = [] visited = [] global goahead goahead = 0 def cover(): print(""" ______ ______ ______ ______ _______ _______ _____ ( ___ \ / ___ \ / ___ \ / ___ \ ( )( ___ )|\ /| / ___ \ | ( ) )\/ ) )\/ \ \\/ ) )| () () || ( ) |( \ / ) ( (___) ) | (__/ / / / ___) / / / | || || || (___) | \ (_) / \ / | __ ( / / (___ ( / / | |(_)| || ___ | ) _ ( / ___ \ | ( \ \ / / ) \ / / | | | || ( ) | / ( ) \ ( ( ) ) | )___) ) / / /\___/ / / / | ) ( || ) ( |( / \ ) ( (___) ) |/ \___/ \_/ \______/ \_/ |/ \||/ \||/ \| \_____/ _______ _______ _______ _______ ( ____ \( ____ )( ___ )( ____ \|\ /| | ( \/| ( )|| ( ) || ( \/| ) ( | | | | (____)|| (___) || (_____ | (___) | | | | __)| ___ |(_____ )| ___ | | | | (\ ( | ( ) | ) || ( ) | | (____/\| ) \ \__| ) ( |/\____) || ) ( | (_______/|/ \__/|/ \|\_______)|/ \| """) time.sleep(2) print(""" DIES BASIERT AUF EINER WAHREN TATSACHE. DIE SPIELELEMENTE SIND VEREINFACHT UND TEILS UNREALISTISCH DARGESTELLT. WICHTIGE DETAILS WERDEN ZUR EINFACHEREN VERSTÄNDLICHKEIT WEGGELASSEN. DER ERMITTLUNGSPROZESS IST IN WIRKLICHKEIT EINE UNGEHEURLICH SCHWIERIGE AUFGABE UND WIRD HIER AUF EIN MÖGLICHST ÜBERSCHAUBARES MASS GEKÜRZT. """) time.sleep(5) go = 0 while go == 0: a = userinput("Tippe folgendes ein, wenn du bereit bist: ok | ") if a == "ok": go = 1 else: print("wrong, retry") global start start = time.time() def gameoverpossible(): global start if "grounding" not in done: current = time.time() - start if current < 120: gameover1() elif current < 180 and current > 119: gameover2() elif current < 240 and current > 179: gameover3() elif current < 300 and current > 239: gameover() else: current = time.time() def gameover1(): if random.randint(0,10) == 1: gameover() else: current = time.time() def gameover2(): if random.randint(0,6) == 1: gameover() else: current = time.time() def gameover3(): if random.randint(0,3) == 1: gameover() else: current = time.time() def gameover(): global next next = 0 global exit exit = 0 print(""" NEW YORK TIMES DIE KATASTROPHE --------------------------------- Heute morgen gegen 7 Uhr ist eine Boeing 737 MAX 8 der United Airlines abgestürzt. Alle 178 Menschen an Bord der Maschine sind bei dem fast senkrechten Absturz der Maschine gestorben. Der Unfall ähnelt den beiden bisherigen Abstürzen von 737 MAX in Ethiopien und Indonesien in vielerlei Hinsicht. Auch hier war die Maschine senkrecht abgestürzt, auch hier wollten die Piloten umkehren und meldeten Probleme mit der Flugsteuerung. Die Ermittler dieses Falles werden sich morgen früh für ihre langsame Arbeit für den Tod der 178 Menschen verantworten, da sie kein Weltweites Flugverbot für die 737 MAX ausgesprochen hatte. --------------------------------- Oh weh. Das wird einige Konsequenzen für dich nach sich ziehen. """) time.sleep(4) print(""" Es ist der nächste Morgen. Du machst dich auf zum Gericht. Die Richter entziehen den Fall deiner Verantwortung und verurteilen dich zu lebenslänglicher Haft, aufgrund von fahrlässiger Tötung. Das ist das Ende deiner Karriere. """) print("Punktezahl: 10000000000000000000000000000000000000000000000000000") def einfuehrung(): print("""Es ist Samstagmorgen... Urplötzlich stürzt eine fast brandneue Boeing 737MAX von Ethiopian Airlines ab. Die Welt ist schockiert, da dies bereits der zweite Absturz dieses Typs ist. Beides Mal waren fast brandneue Flugzeuge involviert. Beide Abstürze ähnelten sich massiv. Deine Aufgabe ist es nun, die Absturze zu klären.""") print(""" Als neu ernannter Ermittler musst du dir bereits jetzt eine wichtige Frage stellen: Solltest du ein weltweites Flugverbot für diesen Flugzeugtypen verhängen? Sowohl Boeing als auch die Fluggesellschaften werden sich dagegen sträuben. """) i = userinput("Willst du das Flugverbot verhängen? (y/n)") if i == "y": print(""" NEW YORK TIMES NTSB ERMITTLER VERHÄNGT FLUGVERBOT FÜR UNGLÜCKSFLIEGER -------------------------------------------------------------- Heute Morgen hat ein Sprecher des NTSB (National Transport and Safety Board verkündet, dass der leitende Ermittler ein Flugverbot für alle Flugzeuge der Boeing 737MAX-Klasse zu verhängen. Dies ist auf massive Proteste seitens der Fluggesellschaften und von Boeing gestossen. Jedoch: Viele Aviatikexperten befürworten den Entscheid des Ermittlers. Die Sicherheit der Passagiere muss um jeden Preis gewährleistet werden. Die einzige Möglichkeit dies zu gewährleisten ist, ein Flugverbot auszusprechen. """) done.append("grounding") elif i == "n": print(""" Die Wirtschaft ist wichtig, ein Pilotenfehler kann ja nicht ausgeschlossen werden. Ermitteln wir! """) else: print("wrong, retry") einfuehrung() time.sleep(4) def grundriss(): if "grounding" in done: print(""" _________________________________________________________________________________________________________ Willkommen im Ermittlerbüro. Dies ist dein Arbeitsplatz an der Unfallstelle. Die Welt will Antworten und Boeing braucht sie, um das Flugzeug zu verbessern. Der Zeitdruck ist aber geringer, da keine weiteren Abstürze geschehen können. Hier kannst du alle Gegenstände, welche du auf der Unfallstelle finden kannst untersuchen, um die mögliche Unfallursache herauszufinden. """) else: print(""" _________________________________________________________________________________________________________ Willkommen im Ermittlerbüro. Dies ist dein Arbeitsplatz an der Unfallstelle. Du solltest dich so schnell wie möglich um diesen Fall kümmern, denn sonst könnte es zu weiteren Abstürzen kommen. Hier kannst du alle Gegenstände, welche du auf der Unfallstelle finden kannst untersuchen, um die mögliche Unfallursache herauszufinden. """) def abspann(): print(""" DU HAST ES GESCHAFFT! GLÜCKWUNSCH! """) global start global stepscount times = time.time() - start points = times*2 + stepscount**2 - 110 if points < 0: print("Deine Zeit: ",times) print("\n\nDeine Punkte (Je geringer desto besser): 0") print("\nDeine Anzahl Schritte (Je geringer desto besser):", stepscount) else: print("Deine Zeit: ",times) print("\n\nDeine Punkte (Je geringer desto besser): ",points) print("\nDeine Anzahl Schritte (Je geringer desto besser):", stepscount) bewertung(points) def bewertung(punkte): print(""" DEINE BEWERTUNG:""") if punkte <= 0: print(""" GOD """) if punkte < 20: print(""" A+ """) elif punkte < 40: print(""" A """) elif punkte < 100: print(""" B """) elif punkte < 200: print(""" C """) elif punkte < 301: print(""" D """) elif punkte > 300: print(""" D- """) def userinput(question): return input(question).lower() def makedone(item): inventory.remove(item) done.append(item) def eb(): global goahead global stepscount stepscount += 1 print("""Du befindest dich jetzt im Ermittlerbüro. """) while len(inventory) > 0: stepscount += 1 if "blackbox" in inventory: makedone("blackbox") print("""Da du ja jetzt die Blackbox des Flugzeugs gefunden hast, kannst du sie hier im Ermittlerbüro aufmachen und die Flugdaten auslesen. Dies dauert jedoch eine gewisse Zeit. Du öffnest ihn und hoffst, dass einer deiner Spezialisten die Daten retten kann.""") time.sleep(7) print("""Dein Spezialist hat es geschafft! Die Daten konten wiederhergestellt werden! Du siehst eine Auffälligkeit in den Daten der Flughöhe und der vertikalen Geschwindigkeit. Dies deutet auf massive technische Probleme hin. Auch die Daten des Anstellwinkelsensors 1, sind auffällig: Er hatte die ganze Zeit denselben Anstellwinkel angezeigt. """) if "anstellwinkelsensor" in inventory: print("""Glücklicherweise hast du ihn bereits auf dem Trümmerfeld entdeckt. Du untersuchst ihn nun.""") goahead = 1 elif "anstellwinkelsensor" in done: print("""Du hast ihn ja bereits untersucht. """) goahead = 1 else: print("""Du solltest dich vielleicht nach dem Sensor umsehen.""") elif "anstellwinkelsensor" in inventory: makedone("anstellwinkelsensor") print("""Da du ja zuvor den Anstellwinkelsensor des Flugzeugs gefunden hast, kannst du ihn jetzt auf Schäden überprüfen. Du untersuchst die Ströme, welche der Sensor bei Bewegung ausgibst und machst eine Entdeckung: ER FUNKTIONIERT NICHT! Logischerweise könnte er auch durch den Aufprall beschädigt sein, """) if "blackbox" in done: print("""aber die Blackbox bestätigt ja den Ausfall des Sensors. Du bist der Ursache auf der Spur. Glückwunsch!""") goahead = 1 inventory.clear() else: print("""du solltest deshalb die Blackbox finden, um den Ausfall zu bestätigen. """) print("\n") elif "turbine" in inventory: print("""Du hast eine der beiden Turbinen in das Büro transportieren lassen. Als mögliche Absturzursache hast du Triebwerksversagen im Verdacht. Beim Betrachten der Triebwerke erkennst du aber an der Verformung der Schaufeln und dem Dreck in der Turbine selbst, also im Kompressor, dass sie voll funktionstüchtig war. Somit kann ein Absturz durch Triebwerksversagen ausgeschlossen werden. Denn ein modernes Flugzeug kann auch mit nur einem Triebwerk problemlos fliegen.""") makedone("turbine") elif "zeugen" in inventory: makedone("zeugen") print("""Du hast ja auch bereits die Zeugen befragt. Du schaust dir deine Notizen lange an, kannst aber nichts erkennen, was dir für den Fall helfen könnte. Du verwirfst die Aussagen als nicht aussagekräftig.""") time.sleep(5) if goahead == 1: global exit exit = 1 stepscount += 1 print("""Du wendest dich nun den Pilotenakten zu. Der Kapitän hatte beachtliche 8000 Flugstunden und soweit du erkennen magst, auch keine bekannten Probleme. Auch die (kurze) Karriere des Copiloten war makellos, er hatte jedoch nur 200 Flugstunden. Die Piloten hatten beim Kontakt mit dem Tower Probleme gemeldet und zur Umkehr gebeten. Dies bestätigte auch der Stimmenrekorder. Deine Aufmerksamkeit fällt auf das als Manouvering Caracteristics Augumentation System, oder kurz MCAS, welches eigentlich einen Strömungsabriss verhindern sollte, aber, aufgrund der Architektur der 737-Familie, nur mit einem der redundanten Anstellwinkelsensoren verbunden war.""") time.sleep(10) print("""Des weiteren: Zwei Sensoren sind einer zu wenig, denn falls jetzt einer ausfallen sollte, welcher sollte verwendet werden? Das MCAS hatte hier schlicht weg keine Chance, vernüftig zu handeln und hatte das Flugzeug in einen Sturzflug gezwungen, da der Anstellwinkelsensor einen zu hohen Anstellwinkel gemeldet hatte. Das Flugzeug war jedoch gar nicht in jener Lage und die Piloten kämpften vergeblich gegen das System, welches sich nicht abschalten liess. Denn durch die grösseren und Effizienteren Triebwerke (LEAP 1A) der 737MAX, mussten diese weiter vorne und höher unter dem Flügel angebracht werden, um genügend Bodenfreiheit zu gewährleisten. Dies hatte dazu geführt, dass bei dem schon sehr alten Flugzeug das sogenannte Pitch-Up moment grösser wurde und somit die Nase des Flugzeugs in gewissen Fluglagen unkontrolliert nach oben gehen kann. Das MCAS sollte dies verhindern, denn diese Fluglage führt unweigerlich zu einem Strömungsabriss, bei welchem das Flugzeug sogesagt "vom Himmel fallen würde".""") time.sleep(10) if "grounding" in done: stepscount -= 2 print(""" Nachdem du ja glücklicherweise bereits bei Ermittlungsbeginn das Grounding des Typs andgeordnet hattest. Die Fluggesellschaften und Boeing hatten zwar nicht sehr positiv darauf reagiert, aber mit dem was du herausgefunden hattest, sind jetzt alle froh, dass du es getan hattest. Die 737 MAX war anschliessend bis im Dezember 2020 gegroundet und Boeing fuhr durch dieses Problem massive Verluste ein. """) else: stepscount += 10 print(""" Alle sind schockiert, dass du nicht bereits bei Ermittlungsbeginn ein Grounding angeordnet hattest. Boeing und auch die Fluggesellschaften fanden es zwar erst besser, aber auch sie sind jetzt der Meinung, dass es besser gewesen wäre, wenn du bereits da ein Grounding angeordnet hättest. Deine Haltung davon ist zwar verständlich, aber du wirst trotzdem zur Verantwortung gezogen. Du musst eine Haftstrafe von einem Jahr absitzen, da du viele Personen in Gefahr gebracht hast. Trotzdem, der Fall ist geklärt. """) return 0 else: print("""Um etwas untersuchen zu können, musst du erst etwas in dein Inventar nehmen, dann hier zurückkehren. Gehe dazu hinaus auf die Unfallstelle. Auch da könnten sich wichtige Hinweise verstecken.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Heck (h) oder willst du Zeugen befragen (z)? ") if i == "c": return 4 if i == "f": return 2 if i == "h": return 3 if i == "z": return 5 def fl(): global stepscount stepscount += 1 if "flügel" in visited: print("""Du hast den Flügel bereits untersucht.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h), zum Büro (b) oder willst du Zeugen befragen (z)? ") if i == "c": return 4 if i == "b": return 1 if i == "h": return 3 if i == "z": return 5 else: print("wrong, retry") return 2 else: print(""" Der Flügel. Komplett zertrümmert. Er scheint in einem beinahe 90° Winkel aufgeschlagen zu sein. Du und dein Team finden eine der beiden Turbinen. Du lässt sie in dein Büro transportieren, um sie dort zu untersuchen. Du kannst entweder in dein Büro gehen oder weitersuchen.""") i = userinput("Willst du zurück? (y/n)") inventory.append("turbine") visited.append("flügel") time.sleep(2) if i == 'y': return 1 elif i == 'n': print("""Du willst also weitersuchen.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h) oder willst du Zeugen befragen (z)? ") if i == "c": return 4 if i == "h": return 3 if i == "z": return 5 else: print("wrong, retry") return 2 def hk(): global stepscount stepscount += 1 if "heck" in visited: print("""Du hast das Heck bereits untersucht.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Büro (b) oder willst du Zeugen befragen (z)? ") if i == "c": return 4 if i == "b": return 1 if i == "f": return 2 if i == "z": return 5 else: print("wrong, retry") return 3 else: print(""" Du entdeckst etwas, das wie das Seitenleitwerks des Flugzeugs aussehen könnte. Dein grösstes Ziel ist, die Blackbox zu finden. Du hebst Teile an, und plötzlich siehst du sie: Die Blackbox. Du hebst sie auf und lässt sie in dein Büro bringen. """) inventory.append("blackbox") time.sleep(1) visited.append("heck") i = userinput("Willst du zurück? (y/n)") if i == 'y': return 1 elif i == 'n': print("""Du willst also weitersuchen.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f) oder willst du Zeugen befragen (z)? ") if i == "c": return 4 if i == "f": return 2 if i == "z": return 5 else: print("wrong, retry") return 3 def zg(): global stepscount stepscount += 1 if "zeugen" in visited: print("""Du hast die Zeugen bereits befragt.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Flügel (f), zum Büro (b) oder zum Heck (h)? ") if i == "c": return 4 if i == "b": return 1 if i == "f": return 2 if i == "h": return 3 else: print("wrong, retry") return 5 else: print(""" Du machst dich auf den Weg in ein nahegelegenes Dorf, da du gehört hast, dass eine Person den Absturz gesehen hat. - Hallo. Sie haben den Absturz mitverfolgt? - Ja habe ich. - Wollen sie uns etwas darüber erzählen? - Ja klar. Also. Ich war gerade auf dem Weg nach Hause, als ich ein Flugzeug hörte. Es war lauter als sonst, deshalb schaute ich auf. Etwas schien ganz und gar nicht gut, denn plötzlich kippte es zur Seite weg und stürzte vom Himmel. Einfach so. Eine riesige Explosion erschütterte unser Dorf. - Vielen Dank. Sie haben mir geholfen. Du machst dich auf den Weg zurück zur Unfallstelle. Willst du dir direkt Gedanken über die Aussagen machen? Dafür musst du ins Büro zurück. """) inventory.append("zeugen") time.sleep(1) visited.append("zeugen") i = userinput("Willst du zurück? (y/n)") if i == 'y': return 1 elif i == 'n': print("""Du willst also weitersuchen.""") i = userinput("Wo willst du hin? Zum Cockpit (c), zum Heck (h) oder zum Flügel (f)? ") if i == "c": return 4 if i == "h": return 3 if i == "f": return 2 else: print("wrong, retry") return 5 def co(): global stepscount stepscount += 1 if "cockpit" in visited: print("""Du hast das Cockpit bereits untersucht.""") i = userinput("Wo willst du hin? Zum Heck (h), zum Flügel (f), zum Büro (b) oder willst du Zeugen befragen (z)? ") if i == "h": return 3 if i == "b": return 1 if i == "f": return 2 if i == "z": return 5 else: print("wrong, retry") return 4 else: print(""" Du näherst dich der Nase des Flugzeugs. Vorsichtig läufst du umher. Vor dir liegt ein Sensor. Er scheint defekt zu sein. Du hebst ihn auf und lässt ihn in dein Büro bringen. Du kannst zurück gehen und ihn untersuchen oder weitersuchen.""") inventory.append("anstellwinkelsensor") time.sleep(1) visited.append("cockpit") i = userinput("Willst du zurück? (y/n)") if i == 'y': return 1 elif i == 'n': print("""Du willst also weitersuchen.""") i = userinput("Wo willst du hin? Zum Flügel (f), zum Heck (h) oder willst du Zeugen befragen (z)? ") if i == "f": return 2 if i == "h": return 3 if i == "z": return 5 else: print("wrong, retry") return 4 def main(): cover() einfuehrung() grundriss() global next global exit next = 1 exit = 0 while next != 0: if next == 1: next = eb() elif next == 2: next = fl() elif next == 3: next = hk() elif next == 4: next = co() elif next == 5: next = zg() else: print("an error occured. restart. Exit Code:", next) next = 0 exit = 0 gameoverpossible() if exit == 1: abspann() main()