Advertisement
kajs54

x

Dec 8th, 2024
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 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. % Fonction pour nettoyer et valider l'action saisie
  39. ask_valid_action(CurrentState, Action) :-
  40. writeln('Entrez votre action (par exemple : Prendre le loup, sans guillemets) :'),
  41. read_line_to_string(user_input, UserInput), % L'utilisateur entre une action sans guillemets
  42. string_trim(UserInput, CleanedInput), % Retirer les espaces superflus
  43. (CleanedInput = 'STOP' -> % Si l'utilisateur entre STOP, on arrête le jeu
  44. writeln('Le jeu est terminé.'),
  45. !;
  46. (valid_action(CleanedInput) ->
  47. (perform_move(CurrentState, CleanedInput, _) ->
  48. Action = CleanedInput
  49. ;
  50. writeln('Action invalide ou interdite dans cet état. Vous avez perdu !'),
  51. fail) % Si l'action est invalide, on indique l'échec du joueur
  52. ;
  53. writeln('Erreur : L\'action saisie n\'est pas valide. Vérifiez la syntaxe.'),
  54. ask_valid_action(CurrentState, Action))).
  55.  
  56. % Jeu interactif
  57. play_game(state(1, 1, 1, 1)) :-
  58. writeln('Félicitations ! Vous avez transporté tout le monde sur la rive droite.').
  59.  
  60. play_game(CurrentState) :-
  61. CurrentState = state(X, _, _, _),
  62. describe_location(X, Location),
  63. format('Vous êtes actuellement sur la ~w.\n', [Location]),
  64. writeln('État actuel : '), writeln(CurrentState),
  65. writeln('Actions disponibles :'),
  66. writeln('- Prendre le loup'),
  67. writeln('- Prendre la chèvre'),
  68. writeln('- Prendre la laitue'),
  69. writeln('- Traverser seul'),
  70. writeln('- STOP'), % Afficher l'option de STOP pour arrêter le jeu
  71. ask_valid_action(CurrentState, Action),
  72. perform_move(CurrentState, Action, NextState),
  73. writeln('Mouvement réussi : '), writeln(Action),
  74. writeln('Nouvel état : '), writeln(NextState),
  75. % Vérification après chaque mouvement
  76. (safe(NextState) ->
  77. play_game(NextState) ;
  78. writeln('Vous avez échoué ! Le jeu est terminé.')
  79. ).
  80.  
  81. % Afficher des instructions initiales
  82. start_game :-
  83. writeln('Bienvenue dans le jeu du fermier, du loup, de la chèvre et de la laitue !'),
  84. writeln('Pour commencer le jeu, vous devez entrer :'),
  85. writeln('?- play_game(state(0, 0, 0, 0)).'),
  86. writeln('Puis, vous pourrez choisir les actions disponibles pour déplacer le fermier, le loup, la chèvre et la laitue.'),
  87. writeln('Bonne chance !').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement