Advertisement
kajs54

sss

Dec 8th, 2024
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. % Définir les mouvements possibles
  2. move(state(X, X, Z, T), state(Y, Y, Z, T), 'Prendre le loup') :-
  3. opposite(X, Y),
  4. X = Z. % Le loup doit être sur la même rive que le fermier
  5. move(state(X, Y, X, T), state(Y, Y, Y, T), 'Prendre la chèvre') :-
  6. opposite(X, Y),
  7. X = Y. % La chèvre doit être sur la même rive que le fermier
  8. move(state(X, Y, Z, X), state(Y, Y, Z, Y), 'Prendre la laitue') :-
  9. opposite(X, Y),
  10. X = Z. % La laitue doit être sur la même rive que le fermier
  11. move(state(X, Y, Z, T), state(Y, Y, Z, T), 'Traverser seul') :-
  12. opposite(X, Y).
  13.  
  14. % Définir la rive opposée
  15. opposite(0, 1).
  16. opposite(1, 0).
  17.  
  18. % Vérifier si l'état est valide (les objets ne doivent pas être laissés ensemble sans le fermier)
  19. safe(state(_, W, G, L)) :-
  20. (W = G ; G = 0), % La chèvre est en sécurité si elle est avec le fermier ou seule
  21. (G = L ; L = 0). % La laitue est en sécurité si elle est avec le fermier ou seule
  22.  
  23. % Exécuter un mouvement valide
  24. perform_move(CurrentState, Action, NextState) :-
  25. move(CurrentState, NextState, Action),
  26. safe(NextState). % Vérifie si l'état résultant est sûr
  27.  
  28. % Vérifier si une action est valide (syntaxe correcte)
  29. valid_action('Prendre le loup').
  30. valid_action('Prendre la chèvre').
  31. valid_action('Prendre la laitue').
  32. valid_action('Traverser seul').
  33.  
  34. % Identifier la rive où se trouve l'utilisateur
  35. describe_location(0, 'rive gauche').
  36. describe_location(1, 'rive droite').
  37.  
  38. % Boucle pour demander une action correcte
  39. ask_valid_action(CurrentState, Action) :-
  40. writeln('Entrez votre action (par exemple : Prendre le loup, sans guillemets) :'),
  41. read(UserAction), % L'utilisateur entre juste l'action sans guillemets
  42. (UserAction = 'STOP' -> % Si l'utilisateur entre STOP, on arrête le jeu
  43. writeln('Le jeu est terminé.'),
  44. !;
  45. (valid_action(UserAction) ->
  46. (perform_move(CurrentState, UserAction, _) ->
  47. Action = UserAction
  48. ;
  49. writeln('Action invalide ou interdite dans cet état. Vous avez perdu !'),
  50. fail) % Si l'action est invalide, on indique l'échec du joueur
  51. ;
  52. writeln('Erreur : L\'action saisie n\'est pas valide. Vérifiez la syntaxe.'),
  53. ask_valid_action(CurrentState, Action))).
  54.  
  55. % Jeu interactif
  56. play_game(state(1, 1, 1, 1)) :-
  57. writeln('Félicitations ! Vous avez transporté tout le monde sur la rive droite.').
  58.  
  59. play_game(CurrentState) :-
  60. CurrentState = state(X, _, _, _),
  61. describe_location(X, Location),
  62. format('Vous êtes actuellement sur la ~w.\n', [Location]),
  63. writeln('État actuel : '), writeln(CurrentState),
  64. writeln('Actions disponibles :'),
  65. writeln('- "Prendre le loup"'),
  66. writeln('- "Prendre la chèvre"'),
  67. writeln('- "Prendre la laitue"'),
  68. writeln('- "Traverser seul"'),
  69. writeln('- "STOP"'), % Afficher l'option de STOP pour arrêter le jeu
  70. ask_valid_action(CurrentState, Action),
  71. perform_move(CurrentState, Action, NextState),
  72. writeln('Mouvement réussi : '), writeln(Action),
  73. writeln('Nouvel état : '), writeln(NextState),
  74. % Vérification après chaque mouvement
  75. (safe(NextState) ->
  76. play_game(NextState) ;
  77. writeln('Vous avez échoué ! Le jeu est terminé.')
  78. ).
  79.  
  80. % Afficher des instructions initiales
  81. start_game :-
  82. writeln('Bienvenue dans le jeu du fermier, du loup, de la chèvre et de la laitue !'),
  83. writeln('Pour commencer le jeu, vous devez entrer :'),
  84. writeln('?- play_game(state(0, 0, 0, 0)).'),
  85. writeln('Puis, vous pourrez choisir les actions disponibles pour déplacer le fermier, le loup, la chèvre et la laitue.'),
  86. writeln('Bonne chance !').
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement