6 Unit LABYGRAPH: IIUWGRAPH Class;
\r
10 Unit ELEM: Class (S: SALLE);
\r
18 Unit EMPIL: Procedure (InOut E: ELEM; InOut P: PILE);
\r
27 Unit DEPIL: Procedure (InOut P: PILE);
\r
42 Unit VIDE: Function (P: PILE): Boolean;
\r
44 Result:= (P.PREM=None);
\r
49 Unit PIECE: Class (N,E,S,O: Boolean; MARQUE: Boolean);
\r
52 Unit SALLE: Class (L,C: Integer; PC: PIECE);
\r
55 Unit PRINCE: Procedure (X,Y: Integer);
\r
57 Call Move (X+5,Y+10); Call Draw (X+5,Y+6);
\r
58 Call Move (X+6,Y+5); Call Draw (X+6,Y+6);
\r
59 Call Move (X+7,Y+2); Call Draw (X+7,Y+3);
\r
60 Call Move (X+7,Y+5); Call Draw (X+7,Y+15);
\r
61 Call Point (X+6,Y+15);
\r
62 Call Move (X+8,Y+1); Call Draw (X+8,Y+10);
\r
63 Call Move (X+9,Y+1); Call Draw (X+9,Y+10);
\r
64 Call Move (X+10,Y+2); Call Draw (X+10,Y+3);
\r
65 Call Move (X+10,Y+5); Call Draw (X+10,Y+15);
\r
66 Call Move (X+11,Y+5); Call Draw (X+11,Y+6);
\r
67 Call Point (X+11,Y+15);
\r
68 Call Move (X+12,Y+6); Call Draw (X+12,Y+10);
\r
69 Call Draw (X+15,Y+13); Call Draw (X+15,Y+15);
\r
70 Call Move (X+14,Y+14); Call Draw (X+16,Y+14);
\r
73 Unit PRINCNORD: Procedure (OutPut PNORD: ArrayOf Integer);
\r
79 Call Move (X+5,Y+10); Call Draw (X+5,Y+6);
\r
80 Call Move (X+6,Y+5); Call Draw (X+6,Y+6);
\r
81 Call Move (X+7,Y+2); Call Draw (X+7,Y+3);
\r
82 Call Move (X+7,Y+5); Call Draw (X+7,Y+15);
\r
83 Call Point (X+6,Y+14);
\r
84 Call Move (X+8,Y+1); Call Draw (X+8,Y+10);
\r
85 Call Move (X+9,Y+1); Call Draw (X+9,Y+10);
\r
86 Call Move (X+10,Y+2); Call Draw (X+10,Y+3);
\r
87 Call Move (X+10,Y+5); Call Draw (X+10,Y+15);
\r
88 Call Move (X+11,Y+5); Call Draw (X+11,Y+6);
\r
89 Call Point (X+11,Y+14);
\r
90 Call Move (X+12,Y+6); Call Draw (X+12,Y+10);
\r
91 Call Move (X+13,Y+10); Call Draw (X+13,Y+16);
\r
92 Call GOODGET (PNORD);
\r
95 Unit PRINCEST: Procedure (OutPut PEST: ArrayOf Integer);
\r
101 Call Move (X+1,Y+13); Call Draw (X+4,Y+13);
\r
102 Call Draw (X+6,Y+11); Call Draw (X+6,Y+9);
\r
103 Call Draw (X+10,Y+5); Call Draw (X+10,Y+12);
\r
104 Call Draw (X+9,Y+13); Call Draw (X+7,Y+13);
\r
105 Call Draw (X+7,Y+14);
\r
106 Call Move (X+10,Y+1); Call Draw (X+10,Y+3);
\r
107 Call Move (X+11,Y+1); Call Draw (X+11,Y+10);
\r
108 Call Move (X+12,Y+1); Call Draw (X+12,Y+3);
\r
109 Call Point (X+13,Y+2);
\r
110 Call Move (X+12,Y+5); Call Draw (X+12,Y+15);
\r
111 Call Point (X+13,Y+15);
\r
112 Call Point (X+13,Y+7);
\r
113 Call Move (X+14,Y+8); Call Draw (X+15,Y+8);
\r
114 Call GOODGET (PEST);
\r
117 Unit PRINCSUD: Procedure (OutPut PSUD: ArrayOf Integer);
\r
123 Call Move (X+4,Y+1); Call Draw (X+4,Y+9);
\r
124 Call Point (X+5,Y+10);
\r
125 Call Move (X+6,Y+10); Call Draw (X+6,Y+6);
\r
126 Call Move (X+7,Y+5); Call Draw (X+7,Y+6);
\r
127 Call Move (X+8,Y+2); Call Draw (X+8,Y+3);
\r
128 Call Move (X+8,Y+5); Call Draw (X+8,Y+15);
\r
129 Call Point (X+7,Y+16);
\r
130 Call Move (X+9,Y+1); Call Draw (X+9,Y+10);
\r
131 Call Move (X+10,Y+1); Call Draw (X+10,Y+10);
\r
132 Call Move (X+11,Y+2); Call Draw (X+11,Y+3);
\r
133 Call Move (X+11,Y+5); Call Draw (X+11,Y+15);
\r
134 Call Move (X+12,Y+5); Call Draw (X+12,Y+6);
\r
135 Call Move (X+12,Y+5); Call Draw (X+12,Y+6);
\r
136 Call Point (X+12,Y+16);
\r
137 Call Move (X+13,Y+6); Call Draw (X+13,Y+10);
\r
138 Call GOODGET (PSUD);
\r
141 Unit PRINCOUEST: Procedure (OutPut POUEST: ArrayOf Integer);
\r
147 Call Move (X+2,Y+8); Call Draw (X+3,Y+8);
\r
148 Call Point (X+4,Y+2);
\r
149 Call Point (X+4,Y+7);
\r
150 Call Move (X+5,Y+1); Call Draw (X+5,Y+3);
\r
151 Call Move (X+5,Y+5); Call Draw (X+5,Y+15);
\r
152 Call Draw (X+4,Y+15);
\r
153 Call Move (X+6,Y+1); Call Draw (X+6,Y+10);
\r
154 Call Move (X+7,Y+1); Call Draw (X+7,Y+3);
\r
155 Call Move (X+16,Y+4); Call Draw (X+11,Y+4);
\r
156 Call Move (X+11,Y+5);
\r
157 Call Draw (X+9,Y+7); Call Draw (X+7,Y+5);
\r
158 Call Draw (X+7,Y+12); Call Draw (X+8,Y+13);
\r
159 Call Draw (X+10,Y+13); Call Draw (X+10,Y+14);
\r
160 Call GOODGET (POUEST);
\r
163 Unit PRINCESSE: Procedure (X,Y: Integer);
\r
165 Call Point (X+5,Y+5);
\r
166 Call Point (X+12,Y+5);
\r
167 Call Move (X+8,Y+1); Call Draw (X+11,Y+4);
\r
168 Call Move (X+9,Y+1); Call Draw (X+6,Y+4);
\r
169 Call Move (X+7,Y+2); Call Draw (X+13,Y+8);
\r
170 Call Move (X+10,Y+2); Call Draw (X+4,Y+8);
\r
171 Call Point (X+4,Y+12);
\r
172 Call Move (X+5,Y+11); Call Draw (X+5,Y+12);
\r
173 Call Move (X+6,Y+9); Call Draw (X+6,Y+12);
\r
174 Call Point (X+7,Y+6);
\r
175 Call Move (X+7,Y+8); Call Draw (X+7,Y+15);
\r
176 Call Move (X+8,Y+5); Call Draw (X+8,Y+12);
\r
177 Call Move (X+9,Y+5); Call Draw (X+9,Y+12);
\r
178 Call Point (X+10,Y+6);
\r
179 Call Move (X+10,Y+8); Call Draw (X+10,Y+15);
\r
180 Call Move (X+11,Y+9); Call Draw (X+11,Y+12);
\r
181 Call Move (X+12,Y+11); Call Draw (X+12,Y+12);
\r
182 Call Point (X+13,Y+12);
\r
185 Unit COEUR: Procedure (X,Y: Integer);
\r
187 Call Move (X+8,Y+5); Call Draw (X+6,Y+3);
\r
188 Call Draw (X+4,Y+3); Call Draw (X+2,Y+5);
\r
189 Call Draw (X+2,Y+9); Call Draw (X+7,Y+14);
\r
190 Call Draw (X+10,Y+14); Call Draw (X+15,Y+9);
\r
191 Call Draw (X+15,Y+5); Call Draw (X+13,Y+3);
\r
192 Call Draw (X+11,Y+3); Call Draw (X+9,Y+5);
\r
193 Call Move (X+4,Y+7); Call Draw (X+4,Y+8);
\r
194 Call Draw (X+8,Y+12); Call Draw (X+9,Y+12);
\r
197 Unit BBLANC: Procedure (X,Y: Integer);
\r
199 Call Move (X+7,Y+3); Call Draw (X+3,Y+7);
\r
200 Call Draw (X+3,Y+10); Call Draw (X+7,Y+14);
\r
201 Call Draw (X+10,Y+14); Call Draw (X+14,Y+10);
\r
202 Call Draw (X+14,Y+7); Call Draw (X+10,Y+3);
\r
203 Call Draw (X+7,Y+3);
\r
204 Call Move (X+5,Y+8); Call Draw (X+5,Y+9);
\r
205 Call Draw (X+8,Y+12); Call Draw (X+9,Y+12);
\r
208 Unit BNOIRE: Procedure (X,Y: Integer);
\r
210 Call Move (X+3,Y+7); Call Draw (X+3,Y+10);
\r
211 Call Move (X+4,Y+6); Call Draw (X+4,Y+11);
\r
212 Call Move (X+5,Y+5); Call Draw (X+5,Y+7);
\r
213 Call Move (X+5,Y+10); Call Draw (X+5,Y+12);
\r
214 Call Move (X+6,Y+4); Call Draw (X+6,Y+9);
\r
215 Call Move (X+6,Y+11); Call Draw (X+6,Y+13);
\r
216 Call Move (X+7,Y+3); Call Draw (X+7,Y+10);
\r
217 Call Move (X+7,Y+12); Call Draw (X+7,Y+14);
\r
218 Call Move (X+8,Y+3); Call Draw (X+8,Y+11);
\r
219 Call Move (X+8,Y+13); Call Draw (X+8,Y+14);
\r
220 Call Move (X+9,Y+3); Call Draw (X+9,Y+11);
\r
221 Call Move (X+9,Y+13); Call Draw (X+9,Y+14);
\r
222 Call Move (X+10,Y+3); Call Draw (X+10,Y+14);
\r
223 Call Move (X+11,Y+4); Call Draw (X+11,Y+13);
\r
224 Call Move (X+12,Y+5); Call Draw (X+12,Y+12);
\r
225 Call Move (X+13,Y+6); Call Draw (X+13,Y+11);
\r
226 Call Move (X+14,Y+7); Call Draw (X+14,Y+10);
\r
229 Unit BARNORD: Procedure (X,Y: Integer);
\r
231 Call Move (X+5,Y+1); Call Draw (X+5,Y+4);
\r
232 Call Move (X+12,Y+1); Call Draw (X+12,Y+4);
\r
235 Unit BAROUEST: Procedure (X,Y: Integer);
\r
237 Call Move (X+1,Y+5); Call Draw (X+4,Y+5);
\r
238 Call Move (X+1,Y+12); Call Draw (X+4,Y+12);
\r
241 Unit BARSUD: Procedure (X,Y: Integer);
\r
243 Call Move (X+5,Y+13); Call Draw (X+5,Y+16);
\r
244 Call Move (X+12,Y+13); Call Draw (X+12,Y+16);
\r
247 Unit BAREST: Procedure (X,Y: Integer);
\r
249 Call Move (X+13,Y+5); Call Draw (X+16,Y+5);
\r
250 Call Move (X+13,Y+12); Call Draw (X+16,Y+12);
\r
253 Unit BARHORIZ: Procedure (X,Y: Integer);
\r
255 Call Move (X+1,Y+5); Call Draw (X+16,Y+5);
\r
256 Call Move (X+1,Y+10); Call Draw (X+16,Y+10);
\r
257 Call Move (X+1,Y+12); Call Draw (X+16,Y+12);
\r
260 Unit BARVERTI: Procedure (X,Y: Integer);
\r
262 Call Move (X+5,Y+1); Call Draw (X+5,Y+16);
\r
263 Call Move (X+7,Y+1); Call Draw (X+7,Y+16);
\r
264 Call Move (X+12,Y+1); Call Draw (X+12,Y+16);
\r
267 Unit TOMBE: Procedure (X,Y: Integer);
\r
269 Call Move (X+2,Y+5); Call Draw (X+6,Y+3);
\r
270 Call Move (X+4,Y+1); Call Draw (X+4,Y+8);
\r
271 Call Draw (X+6,Y+8); Call Draw (X+15,Y+13);
\r
272 Call Draw (X+12,Y+16);
\r
273 Call Move (X+11,Y+16); Call Draw (X+2,Y+11);
\r
274 Call Move (X+2,Y+10); Call Draw (X+4,Y+8);
\r
275 Call Move (X+4,Y+11); Call Draw (X+11,Y+14);
\r
278 Unit PELOTE: Procedure (X,Y: Integer);
\r
280 Call Move (X+6,Y+2);
\r
281 Call Draw (X+2,Y+6); Call Draw (X+2,Y+11);
\r
282 Call Draw (X+6,Y+15); Call Draw (X+11,Y+15);
\r
283 Call Draw (X+15,Y+11); Call Draw (X+15,Y+6);
\r
284 Call Draw (X+11,Y+2); Call Draw (X+6,Y+2);
\r
285 Call Draw (X+6,Y+9); Call Draw (X+11,Y+14);
\r
286 Call Draw (X+11,Y+8);
\r
287 Call Move (X+4,Y+5); Call Draw (X+4,Y+10);
\r
288 Call Draw (X+8,Y+14);
\r
289 Call Move (X+13,Y+12); Call Draw (X+13,Y+5);
\r
290 Call Draw (X+9,Y+9); Call Draw (X+9,Y+11);
\r
291 Call Point (X+8,Y+10);
\r
292 Call Move (X+9,Y+3); Call Draw (X+7,Y+5);
\r
293 Call Move (X+11,Y+4); Call Draw (X+7,Y+8);
\r
297 Unit FIN: Procedure (X,Y: Integer);
\r
299 Call Move (X,Y); Call Draw (X+32,Y);
\r
300 Call Draw (X+32,Y+19); Call Draw (X,Y+19);
\r
302 Call Move (X+10,Y+5);
\r
303 Call Draw (X+10,Y+4); Call Draw (X+4,Y+4);
\r
304 Call Draw (X+4,Y+15); Call Draw (X+6,Y+15);
\r
305 Call Draw (X+6,Y+4);
\r
306 Call Point (X+7,Y+10); Call Point (X+8,Y+10);
\r
307 Call Point (X+8,Y+11);
\r
308 Call Move (X+13,Y+4); Call Draw (X+17,Y+4);
\r
309 Call Move (X+13,Y+15); Call Draw (X+17,Y+15);
\r
310 Call Move (X+14,Y+5); Call Draw (X+14,Y+14);
\r
311 Call Move (X+16,Y+5); Call Draw (X+16,Y+14);
\r
312 Call Move (X+22,Y+4); Call Draw (X+20,Y+4);
\r
313 Call Draw (X+20,Y+15); Call Draw (X+22,Y+15);
\r
314 Call Draw (X+22,Y+4); Call Draw (X+29,Y+15);
\r
315 Call Draw (X+29,Y+4); Call Draw (X+28,Y+4);
\r
318 Unit BLANC: Procedure (X,Y: Integer);
\r
324 Call Move (X+1,Y+I);
\r
325 Call Draw (X+16,Y+I);
\r
330 (* ------------------------------------------------------------------------- *)
\r
332 Unit GOODGET: Procedure (OutPut PDIR: ArrayOf Integer);
\r
333 Var TAB: ArrayOf Integer,
\r
336 Array PDIR Dim (1:66);
\r
338 TAB:= GetMap (16,16);
\r
339 PDIR (1):= TAB (1);
\r
344 PDIR (1+8*(I-1)+J):= TAB (1+J);
\r
350 (* ------------------------------------------------------------------------- *)
\r
352 Unit TEMPO: Procedure (T: Integer);
\r
360 (* ------------------------------------------------------------------------- *)
\r
362 Unit XCASE: Function (XC: Integer): Integer;
\r
364 Result:= BX+32*(XC-1)+16;
\r
367 (* ------------------------------------------------------------------------- *)
\r
369 Unit YCASE: Function (YC: Integer): Integer;
\r
371 Result:= BY+32*(YC-1)+16;
\r
374 (* ------------------------------------------------------------------------- *)
\r
375 (* ------------------------------------------------------------------------- *)
\r
377 Unit INITLABY: Procedure (OutPut LABY: ArrayOf ArrayOf PIECE);
\r
378 Var I,J,LIG,COL: Integer;
\r
382 Array LABY Dim (1:LIG);
\r
385 Array LABY (I) Dim (1:COL);
\r
388 LABY (I,J):= New PIECE (True,True,True,True,False);
\r
391 BX:= (496-(COL*32+16)) DIV 2;
\r
392 BY:= (336-(LIG*32+16)) DIV 2;
\r
395 (* ------------------------------------------------------------------------- *)
\r
396 (* ------------------------------------------------------------------------- *)
\r
398 Unit BATIR: Procedure (InOut LABY: ArrayOf ArrayOf PIECE;
\r
399 OutPut ENTREE,SORTIE: SALLE);
\r
401 Unit XBOUL: Function (XB: Integer): Integer;
\r
403 Result:= BX+32*(XB-1);
\r
406 (* ------------------------------------------------------------------------- *)
\r
408 Unit YBOUL: Function (YB: Integer): Integer;
\r
410 Result:= BY+32*(YB-1);
\r
413 (* ------------------------------------------------------------------------- *)
\r
415 Unit AFFMUR: Procedure (YDEB,XDEB: Integer; COUL,DIR: Boolean);
\r
429 Call BARVERTI (X,Y+16);
\r
430 Call BARNORD (X,Y+32);
\r
433 LABY(YDEB,XDEB-1).E:= Not COUL;
\r
435 If XDEB<=Upper (LABY (1))
\r
437 LABY(YDEB,XDEB).O:= Not COUL;
\r
439 Else (* DIR=HORIZ *)
\r
441 Call BARHORIZ (X+16,Y);
\r
442 Call BAROUEST (X+32,Y);
\r
445 LABY(YDEB-1,XDEB).S:= Not COUL;
\r
447 If YDEB<=Upper (LABY)
\r
449 LABY(YDEB,XDEB).N:= Not COUL;
\r
455 (* ------------------------------------------------------------------------- *)
\r
457 Unit AFFLONGMUR: Procedure (XDEB,YDEB,XFIN,YFIN: Integer,COUL: Boolean);
\r
458 Var DEB,FIN,I: Integer;
\r
460 If XDEB=XFIN And YDEB=/=YFIN
\r
462 DEB:= IMIN (YDEB,YFIN);
\r
463 FIN:= IMAX (YDEB,YFIN);
\r
464 For I:= DEB To FIN-1
\r
466 Call AFFMUR (I,XDEB,COUL,VERTI);
\r
469 If YDEB=YFIN And XDEB=/=XFIN
\r
471 DEB:= IMIN (XDEB,XFIN);
\r
472 FIN:= IMAX (XDEB,XFIN);
\r
473 For I:= DEB To FIN-1
\r
475 Call AFFMUR (YDEB,I,COUL,HORIZ);
\r
483 (* ------------------------------------------------------------------------- *)
\r
485 Unit CREERLABY: Procedure (InOut LABY: ArrayOf ArrayOf PIECE);
\r
487 Unit BOULPROCH: Procedure (X,Y: Integer;
\r
488 OutPut XBL,YBL: Integer; OutPut ERR: Boolean);
\r
491 XBL:= (X-BX+8) DIV 32+1;
\r
492 If XBL>Upper (LABY (1))+1
\r
496 YBL:= (Y-BY+8) DIV 32+1;
\r
497 If YBL>Upper (LABY)+1
\r
504 (* ------------------------------------------------------------------------- *)
\r
506 Unit BOULBLNR: Procedure (XBL,YBL: Integer);
\r
518 (* ------------------------------------------------------------------------- *)
\r
520 Unit BOULNRBL: Procedure (XBL,YBL: Integer);
\r
532 (* ------------------------------------------------------------------------- *)
\r
534 Var X,Y,XDEB,YDEB,XFIN,YFIN: Integer,
\r
535 LEFT,RIGHT,CENTER,ERREUR,BORD: Boolean;
\r
539 Call Status (X,Y,LEFT,RIGHT,CENTER);
\r
540 If (LEFT Or RIGHT) And X>XFINI And X<XFINI+32
\r
541 And Y>YFINI And Y<YFINI+18
\r
547 Call BOULPROCH (X,Y,XDEB,YDEB,ERREUR);
\r
551 Call BOULBLNR (XDEB,YDEB);
\r
555 Call Status (X,Y,LEFT,RIGHT,CENTER);
\r
559 Call BOULNRBL (XDEB,YDEB);
\r
566 Call BOULPROCH (X,Y,XFIN,YFIN,ERREUR);
\r
570 Call BOULNRBL (XDEB,YDEB);
\r
571 BORD:= (XDEB=XFIN And (XDEB=1 Or
\r
572 XDEB=Upper (LABY(1))+1)) Or
\r
573 (YDEB=YFIN And (YDEB=1 Or
\r
574 YDEB=Upper (LABY)+1));
\r
577 Call AFFLONGMUR (XDEB,YDEB,XFIN,YFIN,BLANC);
\r
593 Call BOULPROCH (X,Y,XDEB,YDEB,ERREUR);
\r
597 Call BOULBLNR (XDEB,YDEB);
\r
601 Call Status (X,Y,LEFT,RIGHT,CENTER);
\r
605 Call BOULNRBL (XDEB,YDEB);
\r
612 Call BOULPROCH (X,Y,XFIN,YFIN,ERREUR);
\r
616 Call BOULNRBL (XDEB,YDEB);
\r
617 BORD:=(XDEB=XFIN And (XDEB=1 Or
\r
618 XDEB=Upper(LABY(1))+1)) Or
\r
619 (YDEB=YFIN And (YDEB=1 Or
\r
620 YDEB=Upper (LABY)+1));
\r
623 Call AFFLONGMUR (XDEB,YDEB,XFIN,YFIN,NOIR);
\r
644 (* ------------------------------------------------------------------------- *)
\r
646 Unit PLACENTSORT: Procedure (OutPut ENTREE,SORTIE: SALLE);
\r
648 Unit CASEPROCH: Procedure (X,Y: Integer;
\r
649 OutPut XC,YC: Integer; OutPut ERR: Boolean);
\r
652 XC:= (X-BX-8) DIV 32+1;
\r
653 If XC>Upper (LABY (1)) Or XC<1
\r
657 YC:= (Y-BY-8) DIV 32+1;
\r
658 If YC>Upper (LABY) Or YC<1
\r
665 (* ------------------------------------------------------------------------- *)
\r
667 Var X,Y,XC,YC: Integer,
\r
668 LEFT,RIGHT,CENTER,ERREUR,PLACENTREE,PLACSORTIE,OCCUPEE: Boolean;
\r
671 PLACENTREE:= False;
\r
672 PLACSORTIE:= False;
\r
674 Call Status (X,Y,LEFT,RIGHT,CENTER);
\r
675 If (LEFT Or RIGHT) And PLACENTREE And PLACSORTIE And X>XFINI
\r
676 And X<XFINI+32 And Y>YFINI And Y<YFINI+16
\r
682 Call CASEPROCH (X,Y,XC,YC,ERREUR);
\r
685 If PLACENTREE AndIf ENTREE.L=YC And ENTREE.C=XC
\r
687 PLACENTREE:= False;
\r
691 Call PRINCE (XCASE (XC),YCASE (YC));
\r
698 If Not PLACSORTIE OrIf (PLACSORTIE And
\r
699 (SORTIE.L=/=YC Or SORTIE.C=/=XC))
\r
701 ENTREE:= New SALLE (YC,XC,LABY (YC,XC));
\r
704 Call PRINCE (XCASE (XC),YCASE (YC));
\r
716 Call CASEPROCH (X,Y,XC,YC,ERREUR);
\r
719 If PLACSORTIE AndIf SORTIE.L=YC And SORTIE.C=XC
\r
721 PLACSORTIE:= False;
\r
725 Call PRINCESSE (XCASE (XC),YCASE (YC));
\r
732 If Not PLACENTREE OrIf (PLACENTREE And
\r
733 (ENTREE.L=/=YC Or ENTREE.C=/=XC))
\r
735 SORTIE:= New SALLE (YC,XC,LABY (YC,XC));
\r
738 Call PRINCESSE (XCASE (XC),YCASE (YC));
\r
755 (* ------------------------------------------------------------------------- *)
\r
763 Var LIG,COL: Integer;
\r
766 For LIG:=1 To Upper (LABY)+1
\r
768 For COL:=1 To Upper (LABY (1))+1
\r
770 Call BBLANC (BX+32*(COL-1), BY+32*(LIG-1));
\r
773 Call AFFLONGMUR (1,1,Upper (LABY(1))+1,1,BLANC);
\r
774 Call AFFLONGMUR (1,Upper (LABY)+1,
\r
775 Upper (LABY(1))+1,Upper (LABY)+1,BLANC);
\r
776 Call AFFLONGMUR (1,1,1,Upper (LABY)+1,BLANC);
\r
777 Call AFFLONGMUR (Upper (LABY(1))+1,1,
\r
778 Upper(LABY(1))+1, Upper (LABY)+1,BLANC);
\r
779 Call FIN (XFINI,YFINI);
\r
780 Call CREERLABY (LABY);
\r
781 Call PLACENTSORT (ENTREE,SORTIE);
\r
783 Call FIN (XFINI,YFINI);
\r
787 (* ------------------------------------------------------------------------- *)
\r
788 (* ------------------------------------------------------------------------- *)
\r
790 Unit CHERCHER: LIFO Procedure (LABY: ArrayOf ArrayOf PIECE,
\r
791 ENTREE,SORTIE: SALLE);
\r
793 Unit DEPNORD: Procedure (E: ELEM; InOut POS: Integer);
\r
797 If E.S.L+1=/=ENTREE.L Or E.S.C=/=ENTREE.C
\r
800 When 1 : Call Move (XCASE (E.S.C)+12,YCASE (E.S.L)+47);
\r
801 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+32);
\r
802 When 2 : Call Move (XCASE (E.S.C),YCASE (E.S.L)+44);
\r
803 Call Draw (XCASE (E.S.C)+6,YCASE (E.S.L)+44);
\r
804 Call Move (XCASE (E.S.C)+7,YCASE (E.S.L)+43);
\r
805 Call Draw (XCASE (E.S.C)+8,YCASE (E.S.L)+43);
\r
806 Call Draw (XCASE (E.S.C)+11,YCASE (E.S.L)+40);
\r
807 Call Draw (XCASE (E.S.C)+11,YCASE (E.S.L)+39);
\r
808 Call Move (XCASE (E.S.C)+12,YCASE (E.S.L)+38);
\r
809 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+32);
\r
810 When 4 : Call Move (XCASE (E.S.C)+15,YCASE (E.S.L)+35);
\r
811 Call Draw (XCASE (E.S.C)+14,YCASE (E.S.L)+35);
\r
812 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+33);
\r
813 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+32);
\r
816 Call Move (XCASE (E.S.C),YCASE (E.S.L)+16);
\r
817 Call XorMap (PNORD);
\r
818 Call TEMPO (TEMPS);
\r
819 Call XorMap (PNORD);
\r
820 Call Move (XCASE (E.S.C)+12,YCASE (E.S.L)+31);
\r
821 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+16);
\r
822 Call Move (XCASE (E.S.C),YCASE (E.S.L));
\r
823 Call XorMap (PNORD);
\r
824 Call TEMPO (TEMPS);
\r
825 Call XorMap (PNORD);
\r
830 (* ------------------------------------------------------------------------- *)
\r
832 Unit DEPEST: Procedure (E: ELEM; InOut POS: Integer);
\r
836 If E.S.L=/=ENTREE.L Or E.S.C-1=/=ENTREE.C
\r
839 When 2 : Call Move (XCASE (E.S.C)-32,YCASE (E.S.L)+12);
\r
840 Call Draw (XCASE (E.S.C)-17,YCASE (E.S.L)+12);
\r
841 When 3 : Call Move (XCASE (E.S.C)-29,YCASE (E.S.L));
\r
842 Call Draw (XCASE (E.S.C)-29,YCASE (E.S.L)+6);
\r
843 Call Move (XCASE (E.S.C)-28,YCASE (E.S.L)+7);
\r
844 Call Draw (XCASE (E.S.C)-28,YCASE (E.S.L)+8);
\r
845 Call Draw (XCASE (E.S.C)-27,YCASE (E.S.L)+11);
\r
846 Call Draw (XCASE (E.S.C)-26,YCASE (E.S.L)+11);
\r
847 Call Move (XCASE (E.S.C)-25,YCASE (E.S.L)+12);
\r
848 Call Draw (XCASE (E.S.C)-17,YCASE (E.S.L)+12);
\r
849 When 1 : Call Move (XCASE (E.S.C)-20,YCASE (E.S.L)+15);
\r
850 Call Draw (XCASE (E.S.C)-20,YCASE (E.S.L)+14);
\r
851 Call Draw (XCASE (E.S.C)-18,YCASE (E.S.L)+12);
\r
852 Call Draw (XCASE (E.S.C)-17,YCASE (E.S.L)+12);
\r
855 Call Move (XCASE (E.S.C)-16,YCASE (E.S.L));
\r
856 Call XorMap (PEST);
\r
857 Call TEMPO (TEMPS);
\r
858 Call XorMap (PEST);
\r
859 Call Move (XCASE (E.S.C)-16,YCASE (E.S.L)+12);
\r
860 Call Draw (XCASE (E.S.C)-1,YCASE (E.S.L)+12);
\r
861 Call Move (XCASE (E.S.C),YCASE (E.S.L));
\r
862 Call XorMap (PEST);
\r
863 Call TEMPO (TEMPS);
\r
864 Call XorMap (PEST);
\r
869 (* ------------------------------------------------------------------------- *)
\r
871 Unit DEPSUD: Procedure (E: ELEM; InOut POS: Integer);
\r
875 If E.S.L-1=/=ENTREE.L Or E.S.C=/=ENTREE.C
\r
878 When 3 : Call Move (XCASE (E.S.C)+3,YCASE (E.S.L)-32);
\r
879 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)-17);
\r
880 When 4 : Call Move (XCASE (E.S.C)+15,YCASE (E.S.L)-29);
\r
881 Call Draw (XCASE (E.S.C)+9,YCASE (E.S.L)-29);
\r
882 Call Move (XCASE (E.S.C)+8,YCASE (E.S.L)-28);
\r
883 Call Draw (XCASE (E.S.C)+7,YCASE (E.S.L)-28);
\r
884 Call Draw (XCASE (E.S.C)+4,YCASE (E.S.L)-27);
\r
885 Call Draw (XCASE (E.S.C)+4,YCASE (E.S.L)-26);
\r
886 Call Move (XCASE (E.S.C)+3,YCASE (E.S.L)-25);
\r
887 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)-17);
\r
888 When 2 : Call Move (XCASE (E.S.C),YCASE (E.S.L)-20);
\r
889 Call Draw (XCASE (E.S.C)+1,YCASE (E.S.L)-20);
\r
890 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)-18);
\r
891 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)-17);
\r
894 Call Move (XCASE (E.S.C),YCASE (E.S.L)-16);
\r
895 Call XorMap (PSUD);
\r
896 Call TEMPO (TEMPS);
\r
897 Call XorMap (PSUD);
\r
898 Call Move (XCASE (E.S.C)+3,YCASE (E.S.L)-16);
\r
899 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)-1);
\r
900 Call Move (XCASE (E.S.C),YCASE (E.S.L));
\r
901 Call XorMap (PSUD);
\r
902 Call TEMPO (TEMPS);
\r
903 Call XorMap (PSUD);
\r
908 (* ------------------------------------------------------------------------- *)
\r
910 Unit DEPOUEST: Procedure (E: ELEM; InOut POS: Integer);
\r
914 If E.S.L=/=ENTREE.L Or E.S.C+1=/=ENTREE.C
\r
917 When 4 : Call Move (XCASE (E.S.C)+47,YCASE (E.S.L)+3);
\r
918 Call Draw (XCASE (E.S.C)+32,YCASE (E.S.L)+3);
\r
919 When 1 : Call Move (XCASE (E.S.C)+44,YCASE (E.S.L)+15);
\r
920 Call Draw (XCASE (E.S.C)+44,YCASE (E.S.L)+9);
\r
921 Call Move (XCASE (E.S.C)+43,YCASE (E.S.L)+8);
\r
922 Call Draw (XCASE (E.S.C)+43,YCASE (E.S.L)+7);
\r
923 Call Draw (XCASE (E.S.C)+40,YCASE (E.S.L)+4);
\r
924 Call Draw (XCASE (E.S.C)+39,YCASE (E.S.L)+4);
\r
925 Call Move (XCASE (E.S.C)+38,YCASE (E.S.L)+3);
\r
926 Call Draw (XCASE (E.S.C)+32,YCASE (E.S.L)+3);
\r
927 When 3 : Call Move (XCASE (E.S.C)+35,YCASE (E.S.L));
\r
928 Call Draw (XCASE (E.S.C)+35,YCASE (E.S.L)+1);
\r
929 Call Draw (XCASE (E.S.C)+33,YCASE (E.S.L)+3);
\r
930 Call Draw (XCASE (E.S.C)+32,YCASE (E.S.L)+3);
\r
933 Call Move (XCASE (E.S.C)+16,YCASE (E.S.L));
\r
934 Call XorMap (POUEST);
\r
935 Call TEMPO (TEMPS);
\r
936 Call XorMap (POUEST);
\r
937 Call Move (XCASE (E.S.C)+31,YCASE (E.S.L)+3);
\r
938 Call Draw (XCASE (E.S.C)+16,YCASE (E.S.L)+3);
\r
939 Call Move (XCASE (E.S.C),YCASE (E.S.L));
\r
940 Call XorMap (POUEST);
\r
941 Call TEMPO (TEMPS);
\r
942 Call XorMap (POUEST);
\r
947 (* ------------------------------------------------------------------------- *)
\r
949 Unit DEMITOUR: Procedure (E: ELEM; InOut POS: Integer, DMTR: Boolean);
\r
955 When 1 : Call Move (XCASE (E.S.C)+3,YCASE (E.S.L));
\r
956 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)+5);
\r
957 Call Draw (XCASE (E.S.C)+5,YCASE (E.S.L)+7);
\r
958 Call Draw (XCASE (E.S.C)+10,YCASE (E.S.L)+7);
\r
959 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+5);
\r
960 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L));
\r
961 When 2 : Call Move (XCASE (E.S.C)+15,YCASE (E.S.L)+3);
\r
962 Call Draw (XCASE (E.S.C)+10,YCASE (E.S.L)+3);
\r
963 Call Draw (XCASE (E.S.C)+8,YCASE (E.S.L)+5);
\r
964 Call Draw (XCASE (E.S.C)+8,YCASE (E.S.L)+10);
\r
965 Call Draw (XCASE (E.S.C)+10,YCASE (E.S.L)+12);
\r
966 Call Draw (XCASE (E.S.C)+15,YCASE (E.S.L)+12);
\r
967 When 3 : Call Move (XCASE (E.S.C)+3,YCASE (E.S.L)+15);
\r
968 Call Draw (XCASE (E.S.C)+3,YCASE (E.S.L)+10);
\r
969 Call Draw (XCASE (E.S.C)+5,YCASE (E.S.L)+8);
\r
970 Call Draw (XCASE (E.S.C)+10,YCASE (E.S.L)+8);
\r
971 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+10);
\r
972 Call Draw (XCASE (E.S.C)+12,YCASE (E.S.L)+15);
\r
973 When 4 : Call Move (XCASE (E.S.C),YCASE (E.S.L)+3);
\r
974 Call Draw (XCASE (E.S.C)+5,YCASE (E.S.L)+3);
\r
975 Call Draw (XCASE (E.S.C)+7,YCASE (E.S.L)+5);
\r
976 Call Draw (XCASE (E.S.C)+7,YCASE (E.S.L)+10);
\r
977 Call Draw (XCASE (E.S.C)+5,YCASE (E.S.L)+12);
\r
978 Call Draw (XCASE (E.S.C),YCASE (E.S.L)+12);
\r
984 If E.S.L=E.ANTE.S.L
\r
986 If E.S.C>E.ANTE.S.C
\r
988 Call DEPOUEST (E.ANTE,POS);
\r
990 Call DEPEST (E.ANTE,POS);
\r
993 If E.S.L>E.ANTE.S.L
\r
995 Call DEPSUD (E.ANTE,POS);
\r
997 Call DEPNORD (E.ANTE,POS);
\r
1002 (* ------------------------------------------------------------------------- *)
\r
1006 Var I,POS: Integer,
\r
1007 TROUVE,FIN,DMTR: Boolean,
\r
1011 TAB: ArrayOf Integer;
\r
1015 ENTREE.PC.MARQUE:= True;
\r
1016 E:= New ELEM (ENTREE);
\r
1018 Call BLANC (XCASE (ENTREE.C),YCASE (ENTREE.L));
\r
1019 Call PELOTE (XCASE (ENTREE.C),YCASE (ENTREE.L));
\r
1020 ENT:= Copy (ENTREE);
\r
1028 If E.S.PC.N AndIf Not LABY (E.S.L-1,E.S.C).MARQUE
\r
1030 E:= New ELEM (New SALLE (AUX.L-1,AUX.C,LABY (AUX.L-1,AUX.C)));
\r
1031 E.S.PC.MARQUE:= True;
\r
1033 Call DEPNORD (E,POS);
\r
1035 If AUX.PC.E AndIf Not LABY (AUX.L,AUX.C+1).MARQUE
\r
1037 E:= New ELEM (New SALLE (AUX.L,AUX.C+1,LABY (AUX.L,AUX.C+1)));
\r
1038 E.S.PC.MARQUE:= True;
\r
1040 Call DEPEST (E,POS);
\r
1042 If AUX.PC.S AndIf Not LABY (AUX.L+1,AUX.C).MARQUE
\r
1044 E:= New ELEM (New SALLE (AUX.L+1,AUX.C,LABY (AUX.L+1,AUX.C)));
\r
1045 E.S.PC.MARQUE:= True;
\r
1047 Call DEPSUD (E,POS);
\r
1049 If AUX.PC.O AndIf Not LABY (AUX.L,AUX.C-1).MARQUE
\r
1051 E:= New ELEM (New SALLE (AUX.L,AUX.C-1,
\r
1052 LABY (AUX.L,AUX.C-1)));
\r
1053 E.S.PC.MARQUE:= True;
\r
1055 Call DEPOUEST (E,POS);
\r
1065 If E.S.L=SORTIE.L And E.S.C=SORTIE.C
\r
1074 Call DEMITOUR (E,POS,DMTR);
\r
1086 Call BLANC (XCASE (SORTIE.C),YCASE (SORTIE.L));
\r
1087 Call COEUR (XCASE (SORTIE.C),YCASE (SORTIE.L));
\r
1091 Call BLANC (XCASE (ENT.C),YCASE (ENT.L));
\r
1092 Call TOMBE (XCASE (ENT.C),YCASE (ENT.L));
\r
1093 Call BLANC (XCASE (SORTIE.C),YCASE (SORTIE.L));
\r
1094 Call TOMBE (XCASE (SORTIE.C),YCASE (SORTIE.L));
\r
1099 (* ------------------------------------------------------------------------- *)
\r
1101 Unit TOUCHE: Procedure;
\r
1111 (* ------------------------------------------------------------------------- *)
\r
1113 Var BX,BY,NBOUT: Integer,
\r
1115 PNORD,PEST,PSUD,POUEST: ArrayOf Integer;
\r
1118 Call PRINCNORD (PNORD);
\r
1119 Call PRINCEST (PEST);
\r
1120 Call PRINCSUD (PSUD);
\r
1121 Call PRINCOUEST (POUEST);
\r
1122 SOURIS:= Init (NBOUT);
\r
1131 (* ------------------------------------------------------------------------- *)
\r
1132 (* ------------------------------------------------------------------------- *)
\r
1136 Pref LABYGRAPH Block
\r
1137 Var LABY: ArrayOf ArrayOf PIECE,
\r
1138 ENTREE,SORTIE: SALLE;
\r
1141 Call INITLABY (LABY);
\r
1142 Call BATIR (LABY,ENTREE,SORTIE);
\r
1143 Call CHERCHER (LABY,ENTREE,SORTIE);
\r