Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Etat : state(Fermier, Loup, Chevre, Laitue), 0 = rive gauche, 1 = rive droite.
- % Définir les actions de mouvement
- % Déplacer le loup
- move(loup, state(F, F, C, L), state(NF, NF, C, L)) :-
- opposite(F, NF).
- % Déplacer la chèvre
- move(chevre, state(F, L, F, L), state(NF, L, NF, L)) :-
- opposite(F, NF).
- % Déplacer la laitue
- move(laitue, state(F, L, C, F), state(NF, L, C, NF)) :-
- opposite(F, NF).
- % Traverser seul
- move(fermier, state(F, L, C, T), state(NF, L, C, T)) :-
- opposite(F, NF).
- % Vérifier les rives opposées
- opposite(0, 1).
- opposite(1, 0).
- % Définir les cas d'échec explicites
- % Échec : Le loup est seul avec la chèvre
- danger(state(_, L, L, _)) :-
- L \= 0. % Le fermier n'est pas présent.
- % Échec : La chèvre est seule avec la laitue
- danger(state(_, _, C, C)) :-
- C \= 0. % Le fermier n'est pas présent.
- % Échec : Le fermier traverse seul et laisse le loup, la chèvre, et la laitue ensemble
- danger(state(F, L, C, L)) :-
- F \= L, F \= C, F \= L.
- % Vérifier si un état est sûr
- safe(State) :-
- \+ danger(State). % Un état est sûr s'il n'est pas dangereux.
- % Affichage des actions possibles
- available_actions :-
- writeln('Actions disponibles :'),
- writeln('- move(loup)'),
- writeln('- move(chevre)'),
- writeln('- move(laitue)'),
- writeln('- move(fermier)'),
- writeln('- stop (pour arrêter le jeu)').
- % Jouer un mouvement
- perform_move(CurrentState, Action, NextState) :-
- move(Action, CurrentState, NextState),
- safe(NextState). % Vérifie si l'état après mouvement est sûr.
- % Demander à l'utilisateur de jouer
- play_game(State) :-
- % Vérifier si l'état est dangereux avant de continuer
- (danger(State) ->
- writeln('Vous avez perdu ! Une situation dangereuse est survenue.'),
- writeln('Fin du jeu.') ;
- (
- % Si l'état est sûr, continuer à jouer
- write('État actuel : '), writeln(State),
- available_actions,
- write('Entrez votre action (comme move(loup), move(chevre), move(laitue), move(fermier) ou stop) : '),
- read(Action),
- (Action = stop ->
- writeln('Le jeu est terminé.') ;
- (perform_move(State, Action, NewState) ->
- write('Mouvement réussi : '), writeln(Action),
- writeln('Nouvel état : '), writeln(NewState),
- (NewState = state(1, 1, 1, 1) ->
- writeln('Félicitations, vous avez gagné !');
- play_game(NewState)
- )
- ; writeln('Mouvement invalide ou dangereux, réessayez.'),
- play_game(State)
- )
- )
- )
- ).
- % Démarrer le jeu
- start_game :-
- writeln('Pour commencer le jeu, tapez :'),
- writeln('?- play_game(state(0, 0, 0, 0)).').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement