1 /* accesseurs sur ligne et colonne*/
3 colonne(1,[A,_,_,_],A).
4 colonne(2,[_,A,_,_],A).
5 colonne(3,[_,_,A,_],A).
6 colonne(4,[_,_,_,A],A).
8 ligne(1,[A,_,_,_,_],A).
9 ligne(2,[_,A,_,_,_],A).
10 ligne(3,[_,_,A,_,_],A).
11 ligne(4,[_,_,_,A,_],A).
12 ligne(5,[_,_,_,_,A],A).
18 /* retourne le contenu "Contenu_case" de la case
19 situé à la colonne "Col" et la ligne "Lig" du jeux en cours
22 case(Lig,Col,Conf,Contenu) :-
23 ligne(Lig,Conf,Ligne),
24 colonne(Col,Ligne,Contenu).
27 changeContenuColonne(1,X,[_,B,C,D],[X,B,C,D]).
28 changeContenuColonne(2,X,[A,_,C,D],[A,X,C,D]).
29 changeContenuColonne(3,X,[A,B,_,D],[A,B,X,D]).
30 changeContenuColonne(4,X,[A,B,C,_],[A,B,C,X]).
33 changeContenuLigne(1,X,[_,B,C,D,E],[X,B,C,D,E]).
34 changeContenuLigne(2,X,[A,_,C,D,E],[A,X,C,D,E]).
35 changeContenuLigne(3,X,[A,B,_,D,E],[A,B,X,D,E]).
36 changeContenuLigne(4,X,[A,B,C,_,E],[A,B,C,X,E]).
37 changeContenuLigne(5,X,[A,B,C,D,_],[A,B,C,D,X]).
41 changeContenu(Conf1,Piece,Y,X,Conf2):-
43 changeContenuColonne(X,Piece,Ligne,Lignep),
44 changeContenuLigne(Y,Lignep,Conf1,Conf2).
49 [jaune1,rouge1,rouge2,jaune1],
50 [jaune2,rouge3,rouge4,jaune2],
51 [noir1,blanc1,blanc2,noir1],
52 [noir2,bois,bois,noir2],
53 [marron,vide,vide,marron]]).
59 [jaune1,rouge1,rouge2,jaune1],
60 [jaune2,rouge3,rouge4,jaune2],
61 [noir1,blanc1,blanc2,noir1],
71 [_,rouge3,rouge4,_]]).
77 [jaune1,rouge1,rouge2,jaune1],
78 [jaune2,rouge3,rouge4,jaune2],
86 /* deplacement horizontal */
87 glissementHOK(rouge1,Conf1,Conf2):-
88 case(Lig,Col,Conf1,rouge1),
89 case(Lig,Colpp,Conf1,vide),
90 case(Ligp,Colpp,Conf1,vide),
94 changeContenu(Conf1,rouge1,Lig,Colp,Conf1a),
95 changeContenu(Conf1a,rouge2,Lig,Colpp,Conf1b),
96 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
97 changeContenu(Conf1c,rouge3,Ligp,Colp,Conf1d),
98 changeContenu(Conf1d,rouge4,Ligp,Colpp,Conf1e),
99 changeContenu(Conf1e,vide,Ligp,Col,Conf2).
101 glissementHOK(noir1,Conf1,Conf2):-
102 case(Lig,Col,Conf1,noir1),
103 case(Lig,Colp,Conf1,vide),
104 case(Ligp,Colp,Conf1,vide),
107 changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
108 changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
109 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
110 changeContenu(Conf1c,vide,Ligp,Col,Conf2).
113 glissementHOK(jaune1,Conf1,Conf2):-
114 case(Lig,Col,Conf1,jaune1),
115 case(Lig,Colp,Conf1,vide),
116 case(Ligp,Colp,Conf1,vide),
119 changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
120 changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
121 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
122 changeContenu(Conf1c,vide,Ligp,Col,Conf2).
124 glissementHOK(blanc1,Conf1,Conf2):-
125 case(Lig,Col,Conf1,blanc1),
126 case(Lig,Colpp,Conf1,vide),
129 changeContenu(Conf1,blanc1,Lig,Colp,Conf1a),
130 changeContenu(Conf1a,blanc2,Lig,Colpp,Conf1b),
131 changeContenu(Conf1b,vide,Lig,Col,Conf2).
133 glissementHOK(bois,Conf1,Conf2):-
134 case(Lig,Col,Conf1,bois),
135 case(Lig,Colp,Conf1,vide),
137 changeContenu(Conf1,bois,Lig,Colp,Conf1a),
138 changeContenu(Conf1a,vide,Lig,Col,Conf2).
140 glissementHOK(marron,Conf1,Conf2):-
141 case(Lig,Col,Conf1,marron),
142 case(Lig,Colp,Conf1,vide),
144 changeContenu(Conf1,marron,Lig,Colp,Conf1a),
145 changeContenu(Conf1a,vide,Lig,Col,Conf2).
147 /***** Copier-coller a simplifier ***/
149 glissementHOK(rouge1,Conf1,Conf2):-
150 case(Lig,Col,Conf1,rouge1),
151 case(Lig,Colm,Conf1,vide),
152 case(Ligp,Colm,Conf1,vide),
156 changeContenu(Conf1,rouge1,Lig,Colm,Conf1a),
157 changeContenu(Conf1a,rouge2,Lig,Col,Conf1b),
158 changeContenu(Conf1b,vide,Lig,Colp,Conf1c),
159 changeContenu(Conf1c,rouge3,Ligp,Colm,Conf1d),
160 changeContenu(Conf1d,rouge4,Ligp,Col,Conf1e),
161 changeContenu(Conf1e,vide,Ligp,Colp,Conf2).
164 glissementHOK(noir1,Conf1,Conf2):-
165 case(Lig,Col,Conf1,noir1),
166 case(Lig,Colp,Conf1,vide),
167 case(Ligp,Colp,Conf1,vide),
170 changeContenu(Conf1,noir1,Lig,Colp,Conf1a),
171 changeContenu(Conf1a,noir2,Ligp,Colp,Conf1b),
172 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
173 changeContenu(Conf1c,vide,Ligp,Col,Conf2).
176 glissementHOK(jaune1,Conf1,Conf2):-
177 case(Lig,Col,Conf1,jaune1),
178 case(Lig,Colp,Conf1,vide),
179 case(Ligp,Colp,Conf1,vide),
182 changeContenu(Conf1,jaune1,Lig,Colp,Conf1a),
183 changeContenu(Conf1a,jaune2,Ligp,Colp,Conf1b),
184 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
185 changeContenu(Conf1c,vide,Ligp,Col,Conf2).
188 glissementHOK(blanc1,Conf1,Conf2):-
189 case(Lig,Col,Conf1,blanc1),
190 case(Lig,Colm,Conf1,vide),
193 changeContenu(Conf1,blanc1,Lig,Colm,Conf1a),
194 changeContenu(Conf1a,blanc2,Lig,Col,Conf1b),
195 changeContenu(Conf1b,vide,Lig,Colp,Conf2).
197 glissementHOK(bois,Conf1,Conf2):-
198 case(Lig,Col,Conf1,bois),
199 case(Lig,Colm,Conf1,vide),
201 changeContenu(Conf1,bois,Lig,Colm,Conf1a),
202 changeContenu(Conf1a,vide,Lig,Col,Conf2).
204 glissementHOK(marron,Conf1,Conf2):-
205 case(Lig,Col,Conf1,marron),
206 case(Lig,Colm,Conf1,vide),
208 changeContenu(Conf1,marron,Lig,Colm,Conf1a),
209 changeContenu(Conf1a,vide,Lig,Col,Conf2).
212 /** fin du copier-coller **/
216 /** déplacement vertical **/
218 glissementVOK(rouge1,Conf1,Conf2):-
219 case(Lig,Col,Conf1,rouge1),
220 case(Ligpp,Col,Conf1,vide),
221 case(Ligpp,Colp,Conf1,vide),
225 changeContenu(Conf1,rouge1,Ligp,Col,Conf1a),
226 changeContenu(Conf1a,rouge2,Ligp,Colp,Conf1b),
227 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
228 changeContenu(Conf1c,rouge3,Ligpp,Col,Conf1d),
229 changeContenu(Conf1d,rouge4,Ligpp,Colp,Conf1e),
230 changeContenu(Conf1e,vide,Lig,Colp,Conf2).
232 glissementVOK(noir1,Conf1,Conf2):-
233 case(Lig,Col,Conf1,noir1),
234 case(Ligpp,Col,Conf1,vide),
237 changeContenu(Conf1,noir1,Ligp,Col,Conf1a),
238 changeContenu(Conf1a,noir2,Ligpp,Col,Conf1b),
239 changeContenu(Conf1b,vide,Lig,Col,Conf2).
241 glissementVOK(jaune1,Conf1,Conf2):-
242 case(Lig,Col,Conf1,jaune1),
243 case(Ligpp,Col,Conf1,vide),
246 changeContenu(Conf1,jaune1,Ligp,Col,Conf1a),
247 changeContenu(Conf1a,jaune2,Ligpp,Col,Conf1b),
248 changeContenu(Conf1b,vide,Lig,Col,Conf2).
250 glissementVOK(blanc1,Conf1,Conf2):-
251 case(Lig,Col,Conf1,blanc1),
252 case(Ligp,Col,Conf1,vide),
253 case(Ligp,Colp,Conf1,vide),
256 changeContenu(Conf1,blanc1,Ligp,Col,Conf1a),
257 changeContenu(Conf1a,blanc2,Ligp,Colp,Conf1b),
258 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
259 changeContenu(Conf1c,vide,Lig,Colp,Conf2).
261 glissementVOK(bois,Conf1,Conf2):-
262 case(Lig,Col,Conf1,bois),
263 case(Ligp,Col,Conf1,vide),
265 changeContenu(Conf1,bois,Ligp,Col,Conf1a),
266 changeContenu(Conf1a,vide,Lig,Col,Conf2).
269 glissementVOK(marron,Conf1,Conf2):-
270 case(Lig,Col,Conf1,marron),
271 case(Ligp,Col,Conf1,vide),
273 changeContenu(Conf1,marron,Ligp,Col,Conf1a),
274 changeContenu(Conf1a,vide,Lig,Col,Conf2).
276 /***** copier coller de deplacement vertical **/
278 glissementVOK(rouge1,Conf1,Conf2):-
279 case(Lig,Col,Conf1,rouge1),
280 case(Ligm,Col,Conf1,vide),
281 case(Ligm,Colp,Conf1,vide),
285 changeContenu(Conf1,rouge1,Ligm,Col,Conf1a),
286 changeContenu(Conf1a,rouge2,Ligm,Colp,Conf1b),
287 changeContenu(Conf1b,vide,Ligp,Col,Conf1c),
288 changeContenu(Conf1c,rouge3,Lig,Col,Conf1d),
289 changeContenu(Conf1d,rouge4,Lig,Colp,Conf1e),
290 changeContenu(Conf1e,vide,Ligp,Colp,Conf2).
292 glissementVOK(noir1,Conf1,Conf2):-
293 case(Lig,Col,Conf1,noir1),
294 case(Ligm,Col,Conf1,vide),
297 changeContenu(Conf1,noir1,Ligm,Col,Conf1a),
298 changeContenu(Conf1a,noir2,Lig,Col,Conf1b),
299 changeContenu(Conf1b,vide,Ligp,Col,Conf2).
301 glissementVOK(jaune1,Conf1,Conf2):-
302 case(Lig,Col,Conf1,jaune1),
303 case(Ligm,Col,Conf1,vide),
306 changeContenu(Conf1,jaune1,Ligm,Col,Conf1a),
307 changeContenu(Conf1a,jaune2,Lig,Col,Conf1b),
308 changeContenu(Conf1b,vide,Ligp,Col,Conf2).
310 glissementVOK(blanc1,Conf1,Conf2):-
311 case(Lig,Col,Conf1,blanc1),
312 case(Ligm,Col,Conf1,vide),
313 case(Ligm,Colp,Conf1,vide),
316 changeContenu(Conf1,blanc1,Ligm,Col,Conf1a),
317 changeContenu(Conf1a,blanc2,Ligm,Colp,Conf1b),
318 changeContenu(Conf1b,vide,Lig,Col,Conf1c),
319 changeContenu(Conf1c,vide,Lig,Colp,Conf2).
321 glissementVOK(bois,Conf1,Conf2):-
322 case(Lig,Col,Conf1,bois),
323 case(Ligm,Col,Conf1,vide),
325 changeContenu(Conf1,bois,Ligm,Col,Conf1a),
326 changeContenu(Conf1a,vide,Lig,Col,Conf2).
329 glissementVOK(marron,Conf1,Conf2):-
330 case(Lig,Col,Conf1,marron),
331 case(Ligm,Col,Conf1,vide),
333 changeContenu(Conf1,marron,Ligm,Col,Conf1a),
334 changeContenu(Conf1a,vide,Lig,Col,Conf2).
336 /*** fin du copier coller **/
339 glissement(Piece,C1,C2):-
340 glissementHOK(Piece,C1,C2).
341 glissement(Piece,C1,C2):-
342 glissementVOK(Piece,C1,C2).
349 resoud(Conf,[Conf]) :- final(Conf).
350 resoud(Conf,[Conf|Historique]) :-
351 glissement(_,Conf,Confp),
352 resoud(Confp,Historique),
353 not(member(Conf,Historique)).
361 /*test(Moves) :-etat_initial(Conf), resoud(Conf,[Conf],Moves).*/