Advertisement
kajs54

xxxxx

Dec 8th, 2024
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. % Etat : state(Fermier, Loup, Chevre, Laitue), 0 = gauche, 1 = droite.
  2.  
  3. % Définir les actions de mouvement
  4. % Déplacer le loup
  5. move(loup, state(X, X, G, L), state(Y, Y, G, L)) :-
  6. opposite(X, Y).
  7.  
  8. % Déplacer la chèvre
  9. move(chevre, state(X, L, X, L), state(Y, L, Y, L)) :-
  10. opposite(X, Y).
  11.  
  12. % Déplacer la laitue
  13. move(laitue, state(X, L, G, X), state(Y, L, G, Y)) :-
  14. opposite(X, Y).
  15.  
  16. % Traverser seul
  17. move(sole, state(X, L, G, T), state(Y, L, G, T)) :-
  18. opposite(X, Y).
  19.  
  20. % Vérifier si l'état est valide
  21. safe(state(_, 1, 1, 1)). % L'état où tout est sur la rive droite est sûr.
  22.  
  23. safe(state(_, W, G, L)) :-
  24. % Les objets sont séparés, pas de danger
  25. (W = G ; W = 0), % La chèvre est avec le fermier ou seul
  26. (G = L ; L = 0). % La laitue est avec le fermier ou seule
  27.  
  28. % Vérifier l'opposée des rives
  29. opposite(0, 1).
  30. opposite(1, 0).
  31.  
  32. % Affichage des actions possibles basées sur l'état
  33. available_actions(state(X, _, _, _)) :-
  34. (opposite(X, 1) -> writeln('move(loup)'); true),
  35. (opposite(X, 1) -> writeln('move(chevre)'); true),
  36. (opposite(X, 1) -> writeln('move(laitue)'); true),
  37. (opposite(X, 1) -> writeln('move(sole)'); true).
  38.  
  39. % Jouer un mouvement
  40. perform_move(CurrentState, Action, NextState) :-
  41. move(Action, CurrentState, NextState),
  42. safe(NextState). % Vérifie si l'état après mouvement est sûr
  43.  
  44. % Demander à l'utilisateur de jouer
  45. play_game(State) :-
  46. % Affichage de l'état actuel
  47. write('État actuel : '), writeln(State),
  48. available_actions(State),
  49. write('Entrez votre action (par exemple : move(loup)) : '),
  50. read(Action),
  51. (Action = stop ->
  52. writeln('Le jeu est terminé.') ;
  53. (perform_move(State, Action, NewState) ->
  54. write('Mouvement réussi : '), writeln(Action),
  55. writeln('Nouvel état : '), writeln(NewState),
  56. (safe(NewState) -> writeln('Félicitations, vous avez gagné !') ;
  57. play_game(NewState))
  58. ; writeln('Mouvement invalide, réessayez.'),
  59. play_game(State)
  60. )
  61. ).
  62.  
  63. % Démarrer le jeu
  64. start_game :-
  65. writeln('Pour commencer le jeu, tapez :'),
  66. writeln('?- play_game(state(0, 0, 0, 0)).').
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement