Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Etat : state(Fermier, Loup, Chevre, Laitue), 0 = gauche, 1 = droite.
- % Définir les actions de mouvement
- % Déplacer le loup
- move(loup, state(X, X, G, L), state(Y, Y, G, L)) :-
- opposite(X, Y).
- % Déplacer la chèvre
- move(chevre, state(X, L, X, L), state(Y, L, Y, L)) :-
- opposite(X, Y).
- % Déplacer la laitue
- move(laitue, state(X, L, G, X), state(Y, L, G, Y)) :-
- opposite(X, Y).
- % Traverser seul
- move(sole, state(X, L, G, T), state(Y, L, G, T)) :-
- opposite(X, Y).
- % Vérifier si l'état est valide
- safe(state(_, 1, 1, 1)). % L'état où tout est sur la rive droite est sûr.
- safe(state(_, W, G, L)) :-
- % Les objets sont séparés, pas de danger
- (W = G ; W = 0), % La chèvre est avec le fermier ou seul
- (G = L ; L = 0). % La laitue est avec le fermier ou seule
- % Vérifier l'opposée des rives
- opposite(0, 1).
- opposite(1, 0).
- % Affichage des actions possibles basées sur l'état
- available_actions(state(X, _, _, _)) :-
- (opposite(X, 1) -> writeln('move(loup)'); true),
- (opposite(X, 1) -> writeln('move(chevre)'); true),
- (opposite(X, 1) -> writeln('move(laitue)'); true),
- (opposite(X, 1) -> writeln('move(sole)'); true).
- % 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) :-
- % Affichage de l'état actuel
- write('État actuel : '), writeln(State),
- available_actions(State),
- write('Entrez votre action (par exemple : move(loup)) : '),
- 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),
- (safe(NewState) -> writeln('Félicitations, vous avez gagné !') ;
- play_game(NewState))
- ; writeln('Mouvement invalide, 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