Advertisement
kajs54

axdaxzdax

Dec 10th, 2024
8
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. % Etat : state(Fermier, Loup, Chevre, Laitue), 0 = rive gauche, 1 = rive droite.
  2.  
  3. % Définir les actions de mouvement
  4. % Déplacer le loup
  5. move(loup, state(F, F, C, L), state(NF, NF, C, L)) :-
  6. opposite(F, NF).
  7.  
  8. % Déplacer la chèvre
  9. move(chevre, state(F, L, F, L), state(NF, L, NF, L)) :-
  10. opposite(F, NF).
  11.  
  12. % Déplacer la laitue
  13. move(laitue, state(F, L, C, F), state(NF, L, C, NF)) :-
  14. opposite(F, NF).
  15.  
  16. % Traverser seul
  17. move(fermier, state(F, L, C, T), state(NF, L, C, T)) :-
  18. opposite(F, NF).
  19.  
  20. % Vérifier les rives opposées
  21. opposite(0, 1).
  22. opposite(1, 0).
  23.  
  24. % Définir les cas d'échec explicites
  25. % Échec : Le loup est seul avec la chèvre
  26. danger(state(_, L, L, _)) :-
  27. L \= 0. % Le fermier n'est pas présent.
  28.  
  29. % Échec : La chèvre est seule avec la laitue
  30. danger(state(_, _, C, C)) :-
  31. C \= 0. % Le fermier n'est pas présent.
  32.  
  33. % Échec : Le fermier traverse seul et laisse le loup, la chèvre, et la laitue ensemble
  34. danger(state(F, L, C, L)) :-
  35. F \= L, F \= C, F \= L.
  36.  
  37. % Vérifier si un état est sûr
  38. safe(State) :-
  39. \+ danger(State). % Un état est sûr s'il n'est pas dangereux.
  40.  
  41. % Affichage des actions possibles
  42. available_actions :-
  43. writeln('Actions disponibles :'),
  44. writeln('- move(loup)'),
  45. writeln('- move(chevre)'),
  46. writeln('- move(laitue)'),
  47. writeln('- move(fermier)'),
  48. writeln('- stop (pour arrêter le jeu)').
  49.  
  50. % Jouer un mouvement
  51. perform_move(CurrentState, Action, NextState) :-
  52. move(Action, CurrentState, NextState),
  53. safe(NextState). % Vérifie si l'état après mouvement est sûr.
  54.  
  55. % Demander à l'utilisateur de jouer
  56. play_game(State) :-
  57. % Vérifier si l'état est dangereux avant de continuer
  58. (danger(State) ->
  59. writeln('Vous avez perdu ! Une situation dangereuse est survenue.'),
  60. writeln('Fin du jeu.') ;
  61. (
  62. % Si l'état est sûr, continuer à jouer
  63. write('État actuel : '), writeln(State),
  64. available_actions,
  65. write('Entrez votre action (comme move(loup), move(chevre), move(laitue), move(fermier) ou stop) : '),
  66. read(Action),
  67. (Action = stop ->
  68. writeln('Le jeu est terminé.') ;
  69. (perform_move(State, Action, NewState) ->
  70. write('Mouvement réussi : '), writeln(Action),
  71. writeln('Nouvel état : '), writeln(NewState),
  72. (NewState = state(1, 1, 1, 1) ->
  73. writeln('Félicitations, vous avez gagné !');
  74. play_game(NewState)
  75. )
  76. ; writeln('Mouvement invalide ou dangereux, réessayez.'),
  77. play_game(State)
  78. )
  79. )
  80. )
  81. ).
  82.  
  83. % Démarrer le jeu
  84. start_game :-
  85. writeln('Pour commencer le jeu, tapez :'),
  86. writeln('?- play_game(state(0, 0, 0, 0)).').
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement