forked from SIGSWAG/PrologPuissance4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ihm.pl
94 lines (77 loc) · 2.55 KB
/
ihm.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
%%%%%%%%%%%%%%
%% DÉPRÉCIÉ %%
%%%%%%%%%%%%%%
%%%%%%%%%%%% ihm.pl %%%%%%%%%%%%
:- module(ihm, [afficher/0, demandeCoup/3, afficherGagnant/4, afficherPartieNulle/0, demandeTypeDeJeu/1]).
:- use_module(util).
%%%%%%%%%%%%%%%%%%%%%%%
%% Prédicats publics %%
%%%%%%%%%%%%%%%%%%%%%%%
% afficher/0
% Affiche dans la console la partie actuelle.
% Tout le temps vrai.
afficher :-
findall(_, afficherColonne(_), _),
nl,
findall(_, afficherPlateau(_), _).
% demandeCoup/3(+CouleurJCourant, +Message, -Coup)
% Demande à l'utilisateur courant de saisir un coup.
% Coup s'unifie au coup saisi par l'utilisateur.
demandeCoup(CouleurJCourant, Message, Coup) :-
nl, write(Message), nl,
write('['), write(CouleurJCourant), write('] '),
saisirCoup(Coup).
% afficherGagnant/4(+CouleurGagnante, +CouleurPerdante, +TypeJoueurGagnant, +TypeJoueurPerdant)
% Affiche le gagnant et le perdant.
% Tout le temps vrai.
afficherGagnant(CouleurGagnante, CouleurPerdante, TypeJoueurGagnant, TypeJoueurPerdant) :-
nl,
write('Le joueur '),
write(TypeJoueurGagnant),
write(' ('), write(CouleurGagnante), write(')'),
write(' gagne contre le joueur '),
write(TypeJoueurPerdant),
write(' ('),write(CouleurPerdante),write(')').
% afficherPartieNulle/0
% Affiche qu'il y a partie nulle.
% Tout le temps vrai.
afficherPartieNulle :-
nl,
write('Il y a egalite entre les 2 joueurs').
% demandeTypeDeJeu/1(-TypeDeJeu)
% Demande à l'utilisateur de saisir un type de jeu. N'échoue pas en cas d'entrée invalide (en dehors des valeurs possibles).
% TypeDeJeu s'unifie au type saisi par l'utilisateur.
demandeTypeDeJeu(TypeDeJeu) :-
write(' --- Puissance 4 ---'), nl,
findall(_, afficherTypeJoueur(_,_), _),
nl, nl,
write(' ----------------------- '), nl,
write('Saisissez votre choix :'), nl,
read(TypeDeJeu), integer(TypeDeJeu).
%%%%%%%%%%%%%%%%%%%%%%
%% Prédicats privés %%
%%%%%%%%%%%%%%%%%%%%%%
afficherColonne(X) :-
nbColonnes(NbColonnes),
between(1,NbColonnes,X),
write(X).
% principe : on parcourt la base de faits et pour chaque case on affiche une couleur (ou pas)
afficherPlateau(Y) :-
nbLignes(NbLignes),
between(1,NbLignes,Y1),
Y is 7-Y1,
findall(_, afficherLigne(_,Y), _),
nl.
afficherLigne(X,Y) :-
nbColonnes(NbColonnes),
between(1,NbColonnes,X),
afficherCase(X,Y).
afficherCase(X,Y) :- case(X,Y,rouge), write(r), !.
afficherCase(X,Y) :- case(X,Y,jaune), write(j), !.
afficherCase(_,_) :- write(.).
saisirCoup(Coup) :-
write('Veuillez saisir votre coup : '),
read(Coup).
afficherTypeJoueur(I,J) :-
typeJoueur(I,J),
write('\t'), write(I), write('. '), write(J), nl.