mirror of
https://github.com/JonasHinterdorfer/TextAdventure.git
synced 2025-10-26 03:41:10 +00:00
Compare commits
2 Commits
051d40a2f6
...
813908e52d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
813908e52d | ||
|
|
5c70f9cd1e |
303
adventure.pl
303
adventure.pl
@ -1,5 +1,300 @@
|
||||
parent(john, mary).
|
||||
parent(mary, ann).
|
||||
ancestor(X, Y) :- parent(X, Y).
|
||||
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).
|
||||
% SkyNet: Wings of Deception - Prolog Implementation
|
||||
|
||||
% Charaktere
|
||||
charakter(user, skynet_agent).
|
||||
charakter(wren, cybersecurity_lehrer).
|
||||
charakter(havik, cybernetic_enforcer).
|
||||
charakter(the_crow, ki_mastermind).
|
||||
|
||||
% Fähigkeiten der Charaktere
|
||||
faehigkeit(user, hacking).
|
||||
faehigkeit(user, parkour).
|
||||
faehigkeit(user, combat_drone).
|
||||
faehigkeit(wren, remote_sabotage).
|
||||
faehigkeit(wren, emp_crafting).
|
||||
faehigkeit(wren, information_brokering).
|
||||
faehigkeit(havik, combat_mastery).
|
||||
faehigkeit(havik, drone_swarm_control).
|
||||
faehigkeit(havik, interrogation).
|
||||
faehigkeit(the_crow, mind_control).
|
||||
faehigkeit(the_crow, hive_coordination).
|
||||
faehigkeit(the_crow, cloaking).
|
||||
|
||||
% Feinde
|
||||
feind(pigeon, basic).
|
||||
feind(stork, heavy).
|
||||
feind(the_crow, boss).
|
||||
|
||||
% Fähigkeiten der Feinde
|
||||
feind_faehigkeit(pigeon, swarming).
|
||||
feind_faehigkeit(pigeon, pecking).
|
||||
feind_faehigkeit(stork, tactical_strike).
|
||||
feind_faehigkeit(stork, armor_plating).
|
||||
feind_faehigkeit(the_crow, hive_control).
|
||||
feind_faehigkeit(the_crow, psychic_scramble).
|
||||
feind_faehigkeit(the_crow, shadow_phase).
|
||||
|
||||
% Schwächen der Feinde
|
||||
schwaeche(pigeon, loud_noise).
|
||||
schwaeche(pigeon, fragile).
|
||||
schwaeche(stork, langsam).
|
||||
schwaeche(the_crow, emp).
|
||||
|
||||
% Orte im Spiel
|
||||
ort(schule).
|
||||
ort(strasse).
|
||||
ort(aviary_hq).
|
||||
ort(geheimes_labor).
|
||||
ort(dachboden_aviary_hq).
|
||||
|
||||
% Verbindungen zwischen Orten
|
||||
verbindung(strasse, schule).
|
||||
verbindung(schule, strasse).
|
||||
verbindung(strasse, geheimes_labor).
|
||||
verbindung(geheimes_labor, strasse).
|
||||
verbindung(geheimes_labor, aviary_hq).
|
||||
verbindung(aviary_hq, geheimes_labor).
|
||||
verbindung(aviary_hq, dachboden_aviary_hq).
|
||||
verbindung(dachboden_aviary_hq, aviary_hq).
|
||||
|
||||
% Gegenstände im Spiel
|
||||
gegenstand(emp_grenade).
|
||||
gegenstand(hacking_tool).
|
||||
gegenstand(signal_jammer).
|
||||
|
||||
% Wo Gegenstände gefunden werden können
|
||||
gegenstand_ort(emp_grenade, stork). % Storks droppen EMP Granaten
|
||||
gegenstand_ort(hacking_tool, schule).
|
||||
gegenstand_ort(signal_jammer, geheimes_labor).
|
||||
|
||||
% Story-Meilensteine
|
||||
story_milestone(1, "Überlebt einen Vogel-Angriff auf dem Weg zur Schule").
|
||||
story_milestone(2, "Entdeckt in der Cybersecurity-Klasse, dass Vögel bewaffnete Überwachungsdrohnen sind").
|
||||
story_milestone(3, "Spricht mit Wren über die Aviary Control-Gruppe").
|
||||
story_milestone(4, "Übersteht den ersten Kampf gegen einen Taubenschwarm").
|
||||
story_milestone(5, "Wird von Agent HAVIK nach einem wichtigen Fund überfallen").
|
||||
story_milestone(6, "Trifft auf schwer gepanzerte Storch-Drohnen").
|
||||
story_milestone(7, "Bemerkt, dass Zivilisten seltsam handeln - The Crow's Gedankenkontrolle breitet sich aus").
|
||||
story_milestone(8, "Baut mit Wren einen EMP, um den Schwarm zu stören").
|
||||
story_milestone(9, "Kämpft den finalen Kampf auf dem Dach des Aviary HQ").
|
||||
story_milestone(10, "Entscheidet, ob die Wahrheit aufgedeckt wird oder ob man ein weiteres Opfer wird").
|
||||
|
||||
% Spielzustand
|
||||
:- dynamic(aktueller_ort/1).
|
||||
:- dynamic(inventar/1).
|
||||
:- dynamic(abgeschlossene_meilensteine/1).
|
||||
:- dynamic(feind_besiegt/1).
|
||||
|
||||
initialisiere_spiel :-
|
||||
% Überprüfen, ob dynamic deklariert wurde
|
||||
(predicate_property(aktueller_ort(_), dynamic) ->
|
||||
true
|
||||
;
|
||||
dynamic(aktueller_ort/1),
|
||||
dynamic(inventar/1),
|
||||
dynamic(abgeschlossene_meilensteine/1),
|
||||
dynamic(feind_besiegt/1)
|
||||
),
|
||||
% Bisherige Werte löschen
|
||||
retractall(aktueller_ort(_)),
|
||||
retractall(inventar(_)),
|
||||
retractall(abgeschlossene_meilensteine(_)),
|
||||
retractall(feind_besiegt(_)),
|
||||
% Neue Werte setzen
|
||||
assertz(aktueller_ort(strasse)),
|
||||
assertz(abgeschlossene_meilensteine(0)),
|
||||
write('SkyNet: Wings of Deception - Das Abenteuer beginnt!'), nl,
|
||||
write('Du überlebst knapp einen "Vogel-Angriff" auf dem Weg zur Schule.'), nl,
|
||||
write('Was möchtest du tun? (gehe_zu(Ort), untersuche, kaempfe, inventar, hilfe)'), nl.
|
||||
|
||||
% Bewegung zwischen Orten
|
||||
gehe_zu(Ziel) :-
|
||||
aktueller_ort(Aktuelle),
|
||||
verbindung(Aktuelle, Ziel),
|
||||
retractall(aktueller_ort(_)),
|
||||
assertz(aktueller_ort(Ziel)),
|
||||
beschreibe_ort(Ziel),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
gehe_zu(Ziel) :-
|
||||
aktueller_ort(Aktuelle),
|
||||
\+ verbindung(Aktuelle, Ziel),
|
||||
write('Du kannst von hier aus nicht direkt dorthin gelangen.'), nl.
|
||||
|
||||
% Beschreibungen der Orte
|
||||
beschreibe_ort(schule) :-
|
||||
write('Du befindest dich in der Schule. Der Cybersecurity-Unterricht findet im Raum 101 statt.'), nl,
|
||||
write('Wren, dein Lehrer, scheint nervös zu sein und wirft immer wieder Blicke aus dem Fenster.'), nl.
|
||||
|
||||
beschreibe_ort(strasse) :-
|
||||
write('Du bist auf der Straße. Mehrere Tauben sitzen auf den Stromkabeln und scheinen dich zu beobachten.'), nl,
|
||||
write('Ein unheimliches Gefühl überkommt dich - ihre Bewegungen wirken mechanisch.'), nl.
|
||||
|
||||
beschreibe_ort(geheimes_labor) :-
|
||||
write('Du hast Wrens geheimes Labor gefunden. Überall liegen Elektronikteile und Drohnenreste herum.'), nl,
|
||||
write('An der Wand hängt eine Karte mit markierten Orten - einer davon ist das Aviary HQ.'), nl.
|
||||
|
||||
beschreibe_ort(aviary_hq) :-
|
||||
write('Das imposante Aviary HQ-Gebäude ragt vor dir auf. Die Sicherheitsmaßnahmen sind streng.'), nl,
|
||||
write('Storch-Drohnen patrouillieren den Eingang und Scanner überwachen jeden Winkel.'), nl.
|
||||
|
||||
beschreibe_ort(dachboden_aviary_hq) :-
|
||||
write('Du stehst auf dem Dach des Aviary HQ. Der Wind peitscht dir ins Gesicht.'), nl,
|
||||
write('In der Mitte des Daches steht eine massive schwarze Gestalt - The Crow, der Mastermind hinter allem.'), nl.
|
||||
|
||||
% Kampfsystem
|
||||
kaempfe :-
|
||||
aktueller_ort(strasse),
|
||||
\+ feind_besiegt(pigeon),
|
||||
write('Du wirst von einem Schwarm Tauben angegriffen!'), nl,
|
||||
write('Mit deinen Kampfdrohnen kannst du sie abwehren. Die Tauben explodieren bei Treffern und beschädigen andere in der Nähe.'), nl,
|
||||
write('Nach einem intensiven Kampf hast du die Drohnen besiegt.'), nl,
|
||||
assertz(feind_besiegt(pigeon)),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
kaempfe :-
|
||||
aktueller_ort(aviary_hq),
|
||||
\+ feind_besiegt(stork),
|
||||
write('Schwer gepanzerte Storch-Drohnen greifen dich an!'), nl,
|
||||
write('Sie sind langsam, aber ihre Panzerung macht sie widerstandsfähig. Sie führen Sturzflug-Angriffe aus!'), nl,
|
||||
inventar(hacking_tool),
|
||||
write('Mit deinem Hacking-Tool kannst du ihre Systeme kurzzeitig stören und sie besiegen.'), nl,
|
||||
write('Nach dem Kampf findest du eine EMP-Granate.'), nl,
|
||||
assertz(inventar(emp_grenade)),
|
||||
assertz(feind_besiegt(stork)),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
kaempfe :-
|
||||
aktueller_ort(dachboden_aviary_hq),
|
||||
\+ feind_besiegt(the_crow),
|
||||
inventar(emp_grenade),
|
||||
inventar(signal_jammer),
|
||||
write('The Crow greift dich mit voller Macht an! Seine Fähigkeiten zur Gedankenkontrolle und Tarnung machen ihn zu einem gefährlichen Gegner.'), nl,
|
||||
write('Mit der EMP-Granate und dem Signal-Jammer kannst du seine Kontrolle über den Schwarm unterbrechen und ihn verwundbar machen.'), nl,
|
||||
write('Nach einem epischen Kampf gelingt es dir, The Crow zu besiegen und seine Pläne zu durchkreuzen.'), nl,
|
||||
assertz(feind_besiegt(the_crow)),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
kaempfe :-
|
||||
aktueller_ort(dachboden_aviary_hq),
|
||||
\+ feind_besiegt(the_crow),
|
||||
write('The Crow ist zu mächtig ohne die richtigen Werkzeuge. Du brauchst einen EMP und einen Signal-Jammer, um eine Chance zu haben!'), nl,
|
||||
!.
|
||||
|
||||
kaempfe :-
|
||||
write('Es gibt hier nichts zu bekämpfen.'), nl.
|
||||
|
||||
% Untersuchung der Umgebung
|
||||
untersuche :-
|
||||
aktueller_ort(schule),
|
||||
\+ inventar(hacking_tool),
|
||||
write('Du durchsuchst den Computerraum und findest ein spezielles Hacking-Tool, das Wren zurückgelassen hat.'), nl,
|
||||
write('Es könnte nützlich sein, um die Drohnen zu hacken.'), nl,
|
||||
assertz(inventar(hacking_tool)),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
untersuche :-
|
||||
aktueller_ort(geheimes_labor),
|
||||
\+ inventar(signal_jammer),
|
||||
write('Bei genauerer Untersuchung von Wrens Labor findest du einen Signal-Jammer.'), nl,
|
||||
write('Er scheint speziell für die Frequenzen der Vogel-Drohnen entwickelt worden zu sein.'), nl,
|
||||
assertz(inventar(signal_jammer)),
|
||||
pruefe_story_fortschritt,
|
||||
!.
|
||||
|
||||
untersuche :-
|
||||
aktueller_ort(Ort),
|
||||
write('Du untersuchst die Umgebung, findest aber nichts Besonderes.'), nl.
|
||||
|
||||
% Inventar anzeigen
|
||||
inventar :-
|
||||
findall(Item, inventar(Item), Items),
|
||||
write('Dein Inventar enthält:'), nl,
|
||||
liste_items(Items).
|
||||
|
||||
liste_items([]) :-
|
||||
write('- Nichts'), nl.
|
||||
liste_items([Item|Rest]) :-
|
||||
write('- '), write(Item), nl,
|
||||
liste_items(Rest).
|
||||
|
||||
% Story-Fortschritt überprüfen
|
||||
pruefe_story_fortschritt :-
|
||||
abgeschlossene_meilensteine(Aktuell),
|
||||
NaechsterMeilenstein is Aktuell + 1,
|
||||
pruefe_meilenstein(NaechsterMeilenstein),
|
||||
retractall(abgeschlossene_meilensteine(_)),
|
||||
assertz(abgeschlossene_meilensteine(NaechsterMeilenstein)),
|
||||
story_milestone(NaechsterMeilenstein, Beschreibung),
|
||||
write('*** STORY-FORTSCHRITT: '), write(Beschreibung), write(' ***'), nl,
|
||||
!.
|
||||
|
||||
pruefe_story_fortschritt.
|
||||
|
||||
% Bedingungen für Meilensteine
|
||||
pruefe_meilenstein(1) :-
|
||||
aktueller_ort(strasse).
|
||||
pruefe_meilenstein(2) :-
|
||||
aktueller_ort(schule).
|
||||
pruefe_meilenstein(3) :-
|
||||
aktueller_ort(schule),
|
||||
inventar(hacking_tool).
|
||||
pruefe_meilenstein(4) :-
|
||||
feind_besiegt(pigeon).
|
||||
pruefe_meilenstein(5) :-
|
||||
aktueller_ort(geheimes_labor).
|
||||
pruefe_meilenstein(6) :-
|
||||
aktueller_ort(aviary_hq).
|
||||
pruefe_meilenstein(7) :-
|
||||
feind_besiegt(stork).
|
||||
pruefe_meilenstein(8) :-
|
||||
inventar(emp_grenade),
|
||||
inventar(signal_jammer).
|
||||
pruefe_meilenstein(9) :-
|
||||
aktueller_ort(dachboden_aviary_hq).
|
||||
pruefe_meilenstein(10) :-
|
||||
feind_besiegt(the_crow).
|
||||
|
||||
% Hilfe anzeigen
|
||||
hilfe :-
|
||||
write('Verfügbare Befehle:'), nl,
|
||||
write('- start. : Spiel initialisieren'), nl,
|
||||
write('- gehe_zu(Ort). : Zu einem anderen Ort gehen'), nl,
|
||||
write('- untersuche. : Die Umgebung untersuchen'), nl,
|
||||
write('- kaempfe. : Gegen Feinde kämpfen'), nl,
|
||||
write('- inventar. : Inventar anzeigen'), nl,
|
||||
write('- hilfe. : Diese Hilfe anzeigen'), nl,
|
||||
write('- beende_spiel. : Das Spiel beenden'), nl,
|
||||
write('Verfügbare Orte: schule, strasse, geheimes_labor, aviary_hq, dachboden_aviary_hq'), nl,
|
||||
write('WICHTIG: Vergiss nicht, einen Punkt nach jedem Befehl zu setzen!'), nl.
|
||||
|
||||
% Aktuellen Spielstand anzeigen
|
||||
status :-
|
||||
aktueller_ort(Ort),
|
||||
abgeschlossene_meilensteine(Meilenstein),
|
||||
write('Du befindest dich hier: '), write(Ort), nl,
|
||||
write('Story-Fortschritt: Meilenstein '), write(Meilenstein), write(' abgeschlossen'), nl,
|
||||
write('Verfügbare Verbindungen:'), nl,
|
||||
findall(Ziel, verbindung(Ort, Ziel), Ziele),
|
||||
liste_orte(Ziele).
|
||||
|
||||
liste_orte([]) :-
|
||||
write('- Keine verfügbaren Verbindungen'), nl.
|
||||
liste_orte([Ort|Rest]) :-
|
||||
write('- '), write(Ort), nl,
|
||||
liste_orte(Rest).
|
||||
|
||||
% Spiel beenden
|
||||
beende_spiel :-
|
||||
write('Danke fürs Spielen von SkyNet: Wings of Deception!'), nl,
|
||||
halt.
|
||||
|
||||
% Hauptprädikat zum Starten des Spiels
|
||||
start :-
|
||||
initialisiere_spiel,
|
||||
write('Spiel gestartet. Vergiss nicht, einen Punkt nach jedem Befehl zu setzen!'), nl.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user