From 91b6f8c0638b89c32d4ec16ff47bf0d8350aa02d Mon Sep 17 00:00:00 2001 From: MatyasZsombor Date: Sun, 15 Jun 2025 22:12:58 +0200 Subject: [PATCH] Moved npcs, items, utilities --- adventure.pl | 90 ++-------------------------------------- game_assets/items.pl | 23 ++++++++++ game_assets/npcs.pl | 21 ++++++++++ game_assets/utilities.pl | 39 +++++++++++++++++ 4 files changed, 86 insertions(+), 87 deletions(-) create mode 100644 game_assets/items.pl create mode 100644 game_assets/npcs.pl create mode 100644 game_assets/utilities.pl diff --git a/adventure.pl b/adventure.pl index e320651..14cca00 100644 --- a/adventure.pl +++ b/adventure.pl @@ -2,6 +2,9 @@ % Von Zsombor Matyas und Jonas Hinterdorfer :- include('game_assets/locations.pl'). +:- include('game_assets/items.pl'). +:- include('game_assets/npcs.pl'). +:- include('game_assets/utilities.pl'). % ========== GAME STATE ========== :- dynamic(player_location/1). @@ -58,52 +61,6 @@ init_game :- % Initialize obstacles init_obstacles. -% ========== ITEMS ========== -item(laptop, 'Laptop', 'Dein vertrauter Laptop mit Hacking-Software.'). -item(emp_granate, 'EMP-Granate', 'Eine elektromagnetische Impulsgranate gegen elektrische Systeme.'). -item(parkour_handschuhe, 'Parkour-Handschuhe', 'Verbessern deinen Grip beim Klettern.'). -item(kampfdrohne, 'Kampfdrohne', 'Deine selbstgebaute Verteidigungsdrohne.'). -item(emp_generator, 'EMP-Generator', 'Ein mächtiger EMP-Generator gegen das Sischerheitssytem des Aviary HQs.'). -item(spule, 'Elektro-Spule', 'Eine hochwertige Induktionsspule.'). -item(batterie, 'Hochleistungsbatterie', 'Eine spezielle Batterie für EMP-Geräte.'). -item(kondensator, 'Kondensator', 'Ein Hochspannungskondensator.'). -item(heilspray, 'Heilspray', 'Regeneriert 30 Gesundheitspunkte.'). -item(drohnen_motor, 'Drohnen-Motor', 'Ein kleiner Motor für Drohnen-Antrieb.'). -item(steuerungsmodul, 'Steuerungsmodul', 'Elektronisches Modul zur Drohnen-Steuerung.'). -item(master_schluessel, 'Master-Schlüssel', 'Ein geheimnisvoller Schlüssel mit Aviary-Logo. Gewährt vollständigen Systemzugriff.'). - -% Initial item locations -init_items :- - retractall(item_location(_, _)), - retractall(player_inventory(_)), - assertz(player_inventory(laptop)), - assertz(item_location(emp_granate, htl_werkstatt)), - assertz(item_location(emp_granate, htl_werkstatt)), - assertz(item_location(parkour_handschuhe, altstadt)), - assertz(item_location(heilspray, htl_labor)). - -% ========== CHARACTERS ========== -character(john, 'John Miller', 'Ein 17-jähriger HTL-Schüler mit Hacking-Fähigkeiten.'). -character(wren, 'Wren', 'Cybersicherheitslehrerin und Rogue-Hackerin.'). -character(die_kraehe, 'Die Krähe', 'KI-Mastermind hinter dem Drohnen-Netzwerk.'). - -% Initial NPC locations -init_npcs :- - retractall(npc_location(_, _)), - assertz(npc_location(wren, htl_labor)). - -% ========== ENEMIES ========== -init_enemies :- - retractall(enemy(_, _, _, _)), - retractall(enemy_location(_, _)), - assertz(enemy(tauben_schwarm, 'Tauben-Schwarm', 50, 'Metallische Tauben mit roten LED-Augen.')), - assertz(enemy(storch_drohne, 'Storch-Drohne', 80, 'Große, gepanzerte Kampfdrohne.')), - assertz(enemy(die_kraehe, 'Die Krähe', 150, 'Monströse KI-Drohne mit Gedankenkontrolle.')), - - assertz(enemy_location(tauben_schwarm, altstadt)), - assertz(enemy_location(storch_drohne, donauufer)), - assertz(enemy_location(die_kraehe, aviary_hq)). - % ========== MAIN GAME PREDICATES ========== start_game :- init_game, @@ -374,12 +331,6 @@ describe_obstacle(drone_swarm) :- describe_obstacle(security_system) :- write('Hochsicherheitssystem - benötigt EMP-Generator'). -write_list([]). -write_list([H|T]) :- - write(H), - (T = [] -> true ; write(', ')), - write_list(T). - % ========== MOVEMENT WITH OBSTACLES ========== move_player(Direction) :- player_location(CurrentLoc), @@ -1117,41 +1068,6 @@ handle_game_over_choice(_) :- write('Ungültige Wahl! Bitte wähle 1, 2 oder 3.'), nl, game_over_menu. - -% ========== UTILITY PREDICATES ========== -get_random_damage(Damage) :- - random(12, 21, Damage). % Random damage between 12-20 - -get_random_enemy_damage(Damage) :- - random(10, 19, Damage). % Random enemy damage between 10-18 - -damage_player(Damage) :- - player_health(Health), - NewHealth is Health - Damage, - retract(player_health(Health)), - assertz(player_health(NewHealth)). - -random_member(Element, List) :- - length(List, Length), - Length > 0, - random(0, Length, RandomIndex), - nth0(RandomIndex, List, Element). - -write_sequence([]). -write_sequence([H|T]) :- - write(H), - (T = [] -> true ; write(' -> ')), - write_sequence(T). - -read_sequence(Sequence) :- - read(Input), - (is_list(Input) -> - Sequence = Input ; - Sequence = [Input]). - -clear_screen :- - catch(shell('clear'), _, (catch(shell('cls'), _, fail))). - % ========== HELP PREDICATES ========== hilfe :- process_command([hilfe]). schaue :- process_command([schaue]). diff --git a/game_assets/items.pl b/game_assets/items.pl new file mode 100644 index 0000000..a2ba719 --- /dev/null +++ b/game_assets/items.pl @@ -0,0 +1,23 @@ +% ========== ITEMS ========== +item(laptop, 'Laptop', 'Dein vertrauter Laptop mit Hacking-Software.'). +item(emp_granate, 'EMP-Granate', 'Eine elektromagnetische Impulsgranate gegen elektrische Systeme.'). +item(parkour_handschuhe, 'Parkour-Handschuhe', 'Verbessern deinen Grip beim Klettern.'). +item(kampfdrohne, 'Kampfdrohne', 'Deine selbstgebaute Verteidigungsdrohne.'). +item(emp_generator, 'EMP-Generator', 'Ein mächtiger EMP-Generator gegen das Sischerheitssytem des Aviary HQs.'). +item(spule, 'Elektro-Spule', 'Eine hochwertige Induktionsspule.'). +item(batterie, 'Hochleistungsbatterie', 'Eine spezielle Batterie für EMP-Geräte.'). +item(kondensator, 'Kondensator', 'Ein Hochspannungskondensator.'). +item(heilspray, 'Heilspray', 'Regeneriert 30 Gesundheitspunkte.'). +item(drohnen_motor, 'Drohnen-Motor', 'Ein kleiner Motor für Drohnen-Antrieb.'). +item(steuerungsmodul, 'Steuerungsmodul', 'Elektronisches Modul zur Drohnen-Steuerung.'). +item(master_schluessel, 'Master-Schlüssel', 'Ein geheimnisvoller Schlüssel mit Aviary-Logo. Gewährt vollständigen Systemzugriff.'). + +% ========== INITIAL ITEM LOCATIONS ========== +init_items :- + retractall(item_location(_, _)), + retractall(player_inventory(_)), + assertz(player_inventory(laptop)), + assertz(item_location(emp_granate, htl_werkstatt)), + assertz(item_location(emp_granate, htl_werkstatt)), + assertz(item_location(parkour_handschuhe, altstadt)), + assertz(item_location(heilspray, htl_labor)). diff --git a/game_assets/npcs.pl b/game_assets/npcs.pl new file mode 100644 index 0000000..dd319dd --- /dev/null +++ b/game_assets/npcs.pl @@ -0,0 +1,21 @@ +% ========== CHARACTERS ========== +character(john, 'John Miller', 'Ein 17-jähriger HTL-Schüler mit Hacking-Fähigkeiten.'). +character(wren, 'Wren', 'Cybersicherheitslehrerin und Rogue-Hackerin.'). +character(die_kraehe, 'Die Krähe', 'KI-Mastermind hinter dem Drohnen-Netzwerk.'). + +% Initial NPC locations +init_npcs :- + retractall(npc_location(_, _)), + assertz(npc_location(wren, htl_labor)). + +% ========== ENEMIES ========== +init_enemies :- + retractall(enemy(_, _, _, _)), + retractall(enemy_location(_, _)), + assertz(enemy(tauben_schwarm, 'Tauben-Schwarm', 50, 'Metallische Tauben mit roten LED-Augen.')), + assertz(enemy(storch_drohne, 'Storch-Drohne', 80, 'Große, gepanzerte Kampfdrohne.')), + assertz(enemy(die_kraehe, 'Die Krähe', 150, 'Monströse KI-Drohne mit Gedankenkontrolle.')), + + assertz(enemy_location(tauben_schwarm, altstadt)), + assertz(enemy_location(storch_drohne, donauufer)), + assertz(enemy_location(die_kraehe, aviary_hq)). \ No newline at end of file diff --git a/game_assets/utilities.pl b/game_assets/utilities.pl new file mode 100644 index 0000000..13951bd --- /dev/null +++ b/game_assets/utilities.pl @@ -0,0 +1,39 @@ +% ========== UTILITY PREDICATES ========== +get_random_damage(Damage) :- + random(12, 21, Damage). % Random damage between 12-20 + +get_random_enemy_damage(Damage) :- + random(10, 19, Damage). % Random enemy damage between 10-18 + +damage_player(Damage) :- + player_health(Health), + NewHealth is Health - Damage, + retract(player_health(Health)), + assertz(player_health(NewHealth)). + +random_member(Element, List) :- + length(List, Length), + Length > 0, + random(0, Length, RandomIndex), + nth0(RandomIndex, List, Element). + +write_list([]). +write_list([H|T]) :- + write(H), + (T = [] -> true ; write(', ')), + write_list(T). + +write_sequence([]). +write_sequence([H|T]) :- + write(H), + (T = [] -> true ; write(' -> ')), + write_sequence(T). + +read_sequence(Sequence) :- + read(Input), + (is_list(Input) -> + Sequence = Input ; + Sequence = [Input]). + +clear_screen :- + catch(shell('clear'), _, (catch(shell('cls'), _, fail))). \ No newline at end of file