10 '************************
20 '* MAZE * 30 '* pour * 40 '* AMSTRAD CPC 464 * 50 '* par * 60 '* G.MANKOWSKI * 70 '* mai 1985 * 80 '************************ 90 MODE 1 100 DEFINT A-Z 110 CLS:LOCATE 1,10:PRINT "Jouez-vous sur un ecran monochrome ou couleur (M/C) ?" 120 R$=UPPER$(INKEY$):IF R$="M" THEN 140 ELSE IF R$<>"C" THEN 120 130 IF R$="C" THEN 150 140 BORDER 1:INK 0,1:INK 1,24:INK 2,13:INK 3,8 150 np=1 160 '**************************** 170 '*** caracteres redefinis *** 180 '**************************** 190 SYMBOL AFTER 220 200 SYMBOL 244,28,28,9,62,92,28,20,20 210 SYMBOL 245,24,24,255,126,60,60,36,36 220 SYMBOL 246,126,129,189,165,165,189,129,126 230 SYMBOL 247,31,17,31,4,4,60,12,60 240 SYMBOL 248,0,255,84,84,84,84,255,0 250 SYMBOL 249,255,195,195,195,195,195,195,255 260 SYMBOL 250,56,68,148,164,169,146,68,56 270 SYMBOL 251,28,34,73,149,37,41,34,28 280 SYMBOL 252,56,68,146,169,164,148,68,56 290 SYMBOL 253,28,34,41,37,149,73,34,28 300 SYMBOL 221,255,0,255,0,255,0,255,0 310 SYMBOL 222,255,0,63,0,15,0,3,0 320 SYMBOL 223,0,0,3,0,15,0,63,0 330 SYMBOL 224,255,0,252,0,240,0,192,0 340 SYMBOL 225,0,0,192,0,240,0,252,0 350 SYMBOL 226,0,1,3,1,1,1,0,0 360 SYMBOL 227,0,119,85,117,85,119,0,0 370 SYMBOL 228,0,119,69,117,21,119,0,0 380 SYMBOL 229,0,119,21,117,69,119,0,0 390 SYMBOL 230,0,119,85,117,21,119,0,0 400 SYMBOL 231,0,119,69,117,85,119,0,0 410 SYMBOL 232,0,119,21,117,21,119,0,0 420 SYMBOL 233,255,255,192,255,255,3,255,255 430 GOSUB 4310:REM *** instructions *** 440 CLS:PEN 1 450 LOCATE 1,10:PRINT "Le niveau de difficulte choisi(1,2 ou 3)" 460 LOCATE 1,12:PRINT "determine le nombre de coffres(5,4 ou 3)" 470 LOCATE 1,14:PRINT " qui contiendront une clef" 480 LOCATE 1,18:INPUT " Quel est votre choix";nidi 490 IF nidi=1 OR nidi=2 OR nidi=3 THEN 500 ELSE 480 500 GOSUB 5390 510 ORIGIN 0,0:CLS 520 WINDOW #1,1,25,1,25 530 WINDOW #2,27,27,15,25 540 WINDOW #3,27,40,4,7 550 WINDOW #4,27,40,1,3 560 WINDOW #5,27,40,9,14 570 WINDOW #7,29,39,15,24 580 DIM L$(5):DIM FX(5):DIM FY(5) 590 DIM 10479 73):DIM 10473 73) 600 DEG:FOR i=0 TO 72 610 10479 i)=COS(5*i) 620 10473 i)=SIN(5*i) 630 NEXT i 640 INK 0,0:BORDER 0:PAPER 0 650 IF R$="M" THEN 670 660 INK 3,3:INK 1,9:GOTO 680 670 INK 3,9:INK 1,24 680 PAPER #4,3:CLS #4:PEN 1:LOCATE #4,2,2:PRINT #4,CHR$(250);CHR$(251);"MESSAGES";CHR$(252);CHR$(253) 690 PAPER #3,3:CLS #3:PRINT#3:PRINT #3," VEUILLEZ PATIENTER" 700 xx=2:yy=2:xxp=2:yyp=2:fois=0:etsor=INT(10*RND+1) 710 RANDOMIZE TIME:n=INT(10*RND+1) 720 '**************************** 730 '** generation labyrinthes ** 740 '**************************** 750 DIM R(5,6,6):DIM S(2,7,7):RANDOMIZE TIME 760 FOR m=1 TO 5 770 FOR i=0 TO 5 780 FOR j=0 TO 5 790 R(m,i,j)=INT(10*RND+1) 800 NEXT j:NEXT i:NEXT m 810 FOR m=1 TO 2 820 FOR i=0 TO 6 830 FOR j=0 TO 6 840 S(m,i,j)=INT(10*RND+1) 850 IF S(m,0,j)<5 THEN 840 860 NEXT j:NEXT i:NEXT m 870 '*************************** 880 '** coordonnees escaliers ** 890 '*************************** 900 DIM EX(15):DIM EY(15):RANDOMIZE TIME 910 FOR i=1 TO 15 920 EX(i)=2*(INT(10*RND+2)):EY(i)=2*(INT(10*RND+2)) 930 FOR j=0 TO i-1:IF ABS(EX(i)-EX(j))<3 AND ABS(EY(i)-EY(j))<3 THEN 920 940 NEXT j 950 NEXT i 960 '************************** 970 '*** coordonnees coffre *** 980 '************************** 990 DIM cox(10):DIM coy(10):RANDOMIZE TIME 1000 FOR i=1 TO 10 1010 cox(i)=2*(INT(12*RND+1)):coy(i)=2*(INT(12*RND+1)) 1020 IF cox(i)=4 AND coy(i)=2 THEN 1010 1030 FOR j=1 TO 15 1040 IF coy(i)<>EY(j) THEN 1060 1050 IF cox(i)=EX(j) OR cox(i)=EX(j)+2 THEN 1010 1060 NEXT j:NEXT i 1070 GOSUB 3720:REM *** coordonnees lettre code *** 1080 DIM cle(10):FOR i=1 TO 6-nidi 1090 j=INT(10*RND+1) 1100 IF cle(j)=0 THEN cle(j)=1 ELSE 1090 1110 NEXT 1120 CLS #3 1130 PAPER #5,0:CLS #5:PEN 1:FOR i=1 TO 5:LOCATE #5,1,i:PRINT #5,CHR$(221):LOCATE #5,14,i:PRINT #5,CHR$(221):NEXT 1140 LOCATE #5,2,1:PRINT #5,"RECORD:":LOCATE #5,2,3:PRINT #5,"TEMPS:":LOCATE #5,2,5:PRINT #5,"CLEFS:" 1150 LOCATE #5,9,1:IF record=0 THEN PRINT#5,"-----" ELSE PRINT#5,USING"#####";record 1160 '********************** 1170 '*** choix couleurs *** 1180 '********************** 1190 CLS#3:CLS #1:IF R$="M" THEN 1370 1200 cn=n MOD 4 1210 ck=-13*(cn=0)-9*(cn=1)-10*(cn=2)-12*(cn=3) 1220 BORDER ck:INK 0,ck 1230 ON n GOTO 1240,1250,1260,1270,1280,1290,1300,1310,1320,1330 1240 INK 1,0:INK 2,4:INK 3,13:GOTO 1370 1250 INK 1,0:INK 2,4:INK 3,13:GOTO 1370 1260 INK 1,0:INK 2,4:INK 3,15:GOTO 1370 1270 INK 1,0:INK 2,4:INK 3,16:GOTO 1370 1280 INK 1,3:INK 2,1:INK 3,0:GOTO 1370 1290 INK 1,3:INK 2,0:INK 3,12:GOTO 1370 1300 INK 1,3:INK 2,0:INK 3,9:GOTO 1370 1310 INK 1,1:INK 2,4:INK 3,11:GOTO 1370 1320 INK 1,1:INK 2,4:INK 3,13:GOTO 1370 1330 INK 1,1:INK 2,12:INK 3,4:GOTO 1370 1340 '******************* 1350 '** choix du code ** 1360 '******************* 1370 RANDOMIZE TIME:z=INT(50*RND):RESTORE 6120 1380 FOR i=-4 TO 5*(z-1):READ v:NEXT i 1390 READ u1,u2,u3,u4,u5 1400 code$=CHR$(u1)+CHR$(u2)+CHR$(u3)+CHR$(u4)+CHR$(u5) 1410 code$=LOWER$(code$) 1420 FOR L=1 TO 5:L$(l)=MID$(code$,L,1):NEXT L 1430 xx=xx+2 1440 '*** indicateur d'etage *** 1450 FOR b=1 TO 10:LOCATE #2,1,b:PRINT #2,CHR$(249):NEXT b 1460 LOCATE #2,1,11-np:PRINT #2,CHR$(249) 1470 LOCATE #2,1,11-n:PRINT #2,CHR$(143) 1480 np=n 1490 '*************** 1500 '*** horloge *** 1510 '*************** 1520 DI:PEN 3:PAPER #7,2:CLS #7:LOCATE #7,5,1:PRINT #7,CHR$(226);CHR$(227):LOCATE #7,1,3:PRINT #7,CHR$(226);CHR$(228):LOCATE #7,10,3:PRINT #7,CHR$(232) 1530 LOCATE #7,1,8:PRINT #7,CHR$(226);CHR$(229):LOCATE #7,10,8:PRINT #7,CHR$(231):LOCATE #7,6,10:PRINT #7,CHR$(230) 1540 ORIGIN 536,96 1550 MOVE 62* 10479 0),62* 10473 0):FOR i=1 TO 72:DRAW 62* 10479 i),62* 10473 i):NEXT i 1560 MOVE 52* 10479 0),52* 10473 0):FOR i=1 TO 72:DRAW 52* 10479 i),52* 10473 i):NEXT i 1570 FOR t=30 TO 330 STEP 60:MOVE 52*COS(t),52*SIN(t):DRAW 62*COS(t),62*SIN(t):NEXT t:ORIGIN 0,0:EI 1580 '*************************** 1590 '* construction labyrinthe * 1600 '*************************** 1610 CLS #1 1620 DI:FOR i=0 TO 8 STEP 2:MOVE i,0:DRAWR 0,398:MOVE 398-i,0:DRAWR 0,398:MOVE 0,i:DRAWR 398,0:MOVE 0,398-i:DRAWR 398,0:NEXT:EI 1630 PEN 1:FOR i=3 TO 23 STEP 2 1640 FOR j=3 TO 23 STEP 2 1650 LOCATE i,j:PRINT CHR$(144) 1660 NEXT j:NEXT i 1670 k=-(n=1 OR n=6)-2*(n=2 OR n=7)-3*(n=3 OR n=8)-4*(n=4 OR n=9)-5*(n=5 OR n=10) 1680 FOR i=0 TO 5 1690 FOR j=0 TO 5 1700 x=16*(22-4*i)+7 1710 y=16*(22-4*j)+7 1720 ON R(k,i,j) GOSUB 2920,2930,2940,2950,2960,2970,2980,2990,3000,3010 1730 NEXT j:NEXT i 1740 k=-(n>0)-(n>5) 1750 FOR i=0 TO 6 1760 FOR j=0 TO 6 1770 x=16*(24-4*i)+7 1780 y=16*(24-4*j)+7 1790 ON S(k,i,j) GOSUB 2920,2930,2940,2950,2960,2970,2980,2990,3000,3010 1800 NEXT j:NEXT i 1810 ON np GOSUB 3410,3420,3430,3440,3450,3460,3470,3480,3490,3500 1820 GOSUB 3510 1830 PEN 1:LOCATE cox(n),coy(n):PRINT CHR$(246) 1840 PEN 3:FOR j=1 TO 5:LOCATE codex(n,j),codey(n,j):PRINT CHR$(164):NEXT j 1850 IF n=etsor THEN fois=fois+1 ELSE 1910 1860 IF fois=1 THEN GOSUB 3970 1870 PEN 1:LOCATE #1,xsor,ysor:PRINT #1,CHR$(233) 1880 '************************** 1890 '** coordonnees fantomes ** 1900 '************************** 1910 RANDOMIZE TIME 1920 FX(1)=2*INT(9*RND+4):FY(1)=2 1930 IF FX(1)=cox(n) THEN 1920 1940 FOR j=1 TO 5:IF FX(1)=codex(n,j) THEN 1920 ELSE NEXT j 1950 FX(2)=2:FY(2)=2*INT(10*RND+2) 1960 IF FY(2)=coy(n) THEN 1950 1970 FOR j=1 TO 5:IF FY(2)=codey(n,j) THEN 1950 ELSE NEXT j 1980 FX(3)=24:FY(3)=2*INT(10*RND+2) 1990 IF FY(3)=coy(n) THEN 1980 2000 FOR j=1 TO 5:IF FY(3)=codey(n,j) THEN 1980 ELSE NEXT j 2010 FX(4)=2*INT(12*RND+1):FY(4)=24 2020 IF FX(4)=cox(n) THEN 2010 2030 FOR j=1 TO 5:IF FX(4)=codex(n,j) THEN 2010 ELSE NEXT j 2040 FX(5)=2*INT(12*RND+1):FY(5)=24 2050 IF FX(5)=cox(n) OR FX(5)=FX(4) THEN 2040 2060 FOR j=1 TO 5:IF FX(5)=codex(n,j) THEN 2040 ELSE NEXT j 2070 PEN 2:FOR k=1 TO 5:LOCATE FX(k),FY(k):PRINT CHR$(245):NEXT k 2080 pause=1:EVERY 50,2 GOSUB 2830 2090 EVERY 100,1 GOSUB 2530 2100 s0=INT(TIME/300):te=0:pause=0:tepeto=0 2110 '************************* 2120 DI:PEN 1 2130 LOCATE xxp,yyp:PRINT CHR$(128) 2140 SOUND 1,150,5,5 2150 LOCATE xx,yy:PRINT CHR$(244) 2160 xxp=xx:yyp=yy:EI 2170 xc=16*(xx-1)+7:yc=16*(25-yy)+7 2180 IF pause=1 THEN n=INT(10*RND+1):xx=xx-2:temps=temps+180:LOCATE #5,8,3:PRINT #5,USING "#####";temps:GOTO 1190 2190 c$=INKEY$:IF c$="" THEN 2190 2200 IF c$="P" OR c$="p" THEN GOSUB 3570 2210 c=ASC(c$) 2220 IF c<240 OR c>243 THEN 2190 2230 cc=c-239 2240 t=TEST(xc+16*(cc=3)-16*(cc=4),yc-16*(cc=1)+16*(cc=2)) 2250 IF t=1 THEN 2190 2260 xt=xc-8*(cc=1)-8*(cc=2)+24*(cc=3)-40*(cc=4) 2270 t1=TEST(xt,yc-40*(cc=1)+24*(cc=2)-8*(cc=3)-8*(cc=4)) 2280 t2=TEST(xt,yc-38*(cc=1)+26*(cc=2)-6*(cc=3)-6*(cc=4)) 2290 t3=TEST(xt,yc-36*(cc=1)+28*(cc=2)-4*(cc=3)-4*(cc=4)) 2300 tt=t1+2*t2+3*t3 2310 IF tt=2 THEN 3050 2320 IF tt=5 THEN GOTO 4060 2330 IF tt=18 THEN GOTO 4170 2340 IF tt=6 THEN GOTO 2190 2350 IF tt=3 AND nbcle=3 THEN GOTO 5460 2360 IF tt=3 AND nbcle<3 THEN GOTO 2120 2370 FOR i=0 TO 4 STEP 2 2380 t4=TEST(xc-(2+i)*(cc=1)-(2+i)*(cc=2)+(26+i)*(cc=3)-(32+i)*(cc=4),yc-36*(cc=1)+28*(cc=2)-4*(cc=3)-4*(cc=4)) 2390 IF t4>0 THEN 2410 2400 NEXT i:GOTO 2460 2410 xxs=xx-2*(cc=4)+2*(cc=3) 2420 yys=yy+2*(cc=1)-2*(cc=2) 2430 FOR i=1 TO 5 2440 IF (codex(n,i)=xxs) AND (codey(n,i)=yys) THEN 2480 2450 NEXT i 2460 yy=yy+2*(cc=1)-2*(cc=2) 2470 xx=xx+2*(cc=3)-2*(cc=4):GOTO 2120 2480 PEN 2:LOCATE xxs,yys:PRINT MID$(code$,i,1) 2490 GOTO 2120 2500 '************************* 2510 '** deplacement fantome ** 2520 '************************* 2530 DI:IF pause=1 OR pause=2 THEN 2790 2540 FOR I=1 TO 5:A=INT(4*RND+1) 2550 xf=16*(FX(I)-1)+7:yf=16*(25-FY(I))+7 2560 PEN 2:ON A GOTO 2570,2610,2650,2690 2570 IF TEST(xf-20,yf)=1 THEN 2780 2580 IF TEST(xf-24,yf+4)=1 AND TEST(xf-24,yf+6)=0 THEN 2730 2590 IF TEST(xf-24,yf+6)+TEST(xf-26,yf+4)+TEST(xf-28,yf+4)+TEST(xf-30,yf+4)>0 THEN 2780 2600 LOCATE FX(I),FY(I) :PRINT CHR$(128):FX(I)=FX(I)-2:SOUND 1,602,5,5:LOCATE FX(I),FY(I):PRINT CHR$(245):GOTO 2780 2610 IF TEST(xf+20,yf)=1 THEN 2780 2620 IF TEST(xf+40,yf+4)=1 AND TEST(xf+40,yf+6)=0 THEN 2730 2630 IF TEST(xf+40,yf+6)+TEST(xf+32,yf+4)+TEST(xf+34,yf+4)+TEST(xf+36,yf+4)>0 THEN 2780 2640 LOCATE FX(I),FY(I) :PRINT CHR$(128):FX(I)=FX(I)+2:SOUND 1,602,5,5:LOCATE FX(I),FY(I):PRINT CHR$(245):GOTO 2780 2650 IF TEST(xf,yf+20)=1 THEN 2780 2660 IF TEST(xf+8,yf+36)=1 AND TEST(xf+8,yf+38)=0 THEN 2730 2670 IF TEST(xf+8,yf+38)+TEST(xf+2,yf+36)+TEST(xf+4,yf+36)+TEST(xf+6,yf+36)>0 THEN 2780 2680 LOCATE FX(I),FY(I) :PRINT CHR$(128):FY(I)=FY(I)-2:SOUND 1,602,5,5:LOCATE FX(I),FY(I):PRINT CHR$(245):GOTO 2780 2690 IF TEST(xf,yf-20)=1 THEN 2780 2700 IF TEST(xf+8,yf-28)=1 AND TEST(xf+8,yf-26)=0 THEN 2730 2710 IF TEST(xf+8,yf-26)+TEST(xf+2,yf-28)+TEST(xf+4,yf-28)+TEST(xf+6,yf-28)>0 THEN 2780 2720 LOCATE FX(I),FY(I) :PRINT CHR$(128):FY(I)=FY(I)+2:SOUND 1,602,5,5:LOCATE FX(I),FY(I):PRINT CHR$(245):GOTO 2780 2730 IF nbcle=0 THEN 2780 2740 LOCATE #5,nbcle+8,5:PRINT #5,CHR$(128):nbcle=nbcle-1 2750 GOSUB 5800:CLS #3:PRINT #3,"1 cle de moins" 2760 ce=INT(10*RND+1) 2770 IF cle(ce)=1 THEN 2760 ELSE cle(ce)=1 2780 NEXT I 2790 EI:RETURN 2800 '************************* 2810 '*** mouvement horloge *** 2820 '************************* 2830 IF pause=1 THEN 2870 2840 DEG:te=te+2 2850 IF te<360 THEN 2870 2860 pause=1:te=0 2870 MOVE 536,96:DRAWR 52*SIN(te),52*COS(te) 2880 RETURN 2890 '*************************** 2900 '* construction labyrinthe * 2910 '*************************** 2920 MOVE x,y:DRAWR 32,0:MOVE x,y+2:DRAWR 32,0:RETURN 2930 MOVE x,y:DRAWR 32,0:MOVE x,y+2:DRAWR 32,0:MOVE x,y:DRAWR -32,0:MOVE x,y+2:DRAWR -32,0:RETURN 2940 MOVE x,y:DRAWR 32,0:MOVE x,y+2:DRAWR 32,0:MOVE x,y:DRAWR 0,32:MOVE x+2,y:DRAWR 0,32:RETURN 2950 MOVE x,y:DRAWR 32,0:MOVE x,y+2:DRAWR 32,0:MOVE x,y:DRAWR 0,-32:MOVE x+2,y:DRAWR 0,-32:RETURN 2960 MOVE x,y:DRAWR -32,0:MOVE x,y+2:DRAWR -32,0:RETURN 2970 MOVE x,y:DRAWR -32,0:MOVE x,y+2:DRAWR -32,0:MOVE x,y:DRAWR 0,32:MOVE x+2,y:DRAWR 0,32:RETURN 2980 MOVE x,y:DRAWR -32,0:MOVE x,y+2:DRAWR -32,0:MOVE x,y:DRAWR 0,-32:MOVE x+2,y:DRAWR 0,-32:RETURN 2990 MOVE x,y:DRAWR 0,32:MOVE x+2,y:DRAWR 0,32:RETURN 3000 MOVE x,y:DRAWR 0,32:MOVE x+2,y:DRAWR 0,32:MOVE x,y:DRAWR 0,-32:MOVE x+2,y:DRAWR 0,-32:RETURN 3010 MOVE x,y:DRAWR 0,-32:MOVE x+2,y:DRAWR 0,-32:RETURN 3020 '******************** 3030 '*** saut d'etage *** 3040 '******************** 3050 yy=yy+2*(cc=1)-2*(cc=2) 3060 xx=xx+2*(cc=3)-2*(cc=4) 3070 pause=1:te=0:s1=INT(TIME/300):temps=temps+s1-s0+tepeto:LOCATE #5,8,3:PRINT #5,USING "#####";temps 3080 ON n GOTO 3090,3120,3150,3180,3210,3240,3270,3300,3330,3360 3090 IF xx=EX(1) AND yy=EY(1) THEN n=2:GOTO 1170 3100 IF xx=EX(2) AND yy=EY(2) THEN n=3:GOTO 1170 3110 IF xx=EX(3) AND yy=EY(3) THEN n=4:GOTO 1170 3120 IF xx=EX(1) AND yy=EY(1) THEN n=1:GOTO 1170 3130 IF xx=EX(4) AND yy=EY(4) THEN n=3:GOTO 1170 3140 IF xx=EX(5) AND yy=EY(5) THEN n=5:GOTO 1170 3150 IF xx=EX(6) AND yy=EY(6) THEN n=4:GOTO 1170 3160 IF xx=EX(2) AND yy=EY(2) THEN n=1:GOTO 1170 3170 IF xx=EX(4) AND yy=EY(4) THEN n=2:GOTO 1170 3180 IF xx=EX(6) AND yy=EY(6) THEN n=3:GOTO 1170 3190 IF xx=EX(8) AND yy=EY(8) THEN n=10:GOTO 1170 3200 IF xx=EX(3) AND yy=EY(3) THEN n=1:GOTO 1170 3210 IF xx=EX(7) AND yy=EY(7) THEN n=6:GOTO 1170 3220 IF xx=EX(11) AND yy=EY(11) THEN n=8:GOTO 1170 3230 IF xx=EX(5) AND yy=EY(5) THEN n=2:GOTO 1170 3240 IF xx=EX(9) AND yy=EY(9) THEN n=8:GOTO 1170 3250 IF xx=EX(7) AND yy=EY(7) THEN n=5:GOTO 1170 3260 IF xx=EX(13) AND yy=EY(13) THEN n=9:GOTO 1170 3270 IF xx=EX(10) AND yy=EY(10) THEN n=10:GOTO 1170 3280 IF xx=EX(14) AND yy=EY(14) THEN n=8:GOTO 1170 3290 IF xx=EX(15) AND yy=EY(15) THEN n=9:GOTO 1170 3300 IF xx=EX(9) AND yy=EY(9) THEN n=6:GOTO 1170 3310 IF xx=EX(11) AND yy=EY(11) THEN n=5:GOTO 1170 3320 IF xx=EX(14) AND yy=EY(14) THEN n=7:GOTO 1170 3330 IF xx=EX(12) AND yy=EY(12) THEN n=10:GOTO 1170 3340 IF xx=EX(13) AND yy=EY(13) THEN n=6:GOTO 1170 3350 IF xx=EX(15) AND yy=EY(15) THEN n=7:GOTO 1170 3360 IF xx=EX(8) AND yy=EY(8) THEN n=4:GOTO 1170 3370 IF xx=EX(10) AND yy=EY(10) THEN n=7:GOTO 1170 3380 IF xx=EX(12) AND yy=EY(12) THEN n=9:GOTO 1170 3390 GOTO 1170 3400 '************************ 3410 P1=EX(1):P2=EY(1):P3=EX(2):P4=EY(2):P5=EX(3):P6=EY(3):RETURN 3420 P1=EX(1):P2=EY(1):P3=EX(4):P4=EY(4):P5=EX(5):P6=EY(5):RETURN 3430 P1=EX(6):P2=EY(6):P3=EX(4):P4=EY(4):P5=EX(2):P6=EY(2):RETURN 3440 P1=EX(6):P2=EY(6):P3=EX(8):P4=EY(8):P5=EX(3):P6=EY(3):RETURN 3450 P1=EX(7):P2=EY(7):P3=EX(11):P4=EY(11):P5=EX(5):P6=EY(5):RETURN 3460 P1=EX(7):P2=EY(7):P3=EX(13):P4=EY(13):P5=EX(9):P6=EY(9):RETURN 3470 P1=EX(10):P2=EY(10):P3=EX(14):P4=EY(14):P5=EX(15):P6=EY(15):RETURN 3480 P1=EX(11):P2=EY(11):P3=EX(14):P4=EY(14):P5=EX(9):P6=EY(9):RETURN 3490 P1=EX(12):P2=EY(12):P3=EX(13):P4=EY(13):P5=EX(15):P6=EY(15):RETURN 3500 P1=EX(12):P2=EY(12):P3=EX(10):P4=EY(10):P5=EX(8):P6=EY(8):RETURN 3510 PEN 1:LOCATE P1,P2:PRINT CHR$(248);CHR$(128):LOCATE P3,P4:PRINT CHR$(248);CHR$(128):LOCATE P5,P6:PRINT CHR$(248);CHR$(128) 3520 DI:MOVE 16*P1+7,16*(26-P2)+7:DRAWR -32,0:DRAWR 0,-32:DRAWR 32,0:MOVE 16*P3+7,16*(26-P4)+7:DRAWR -32,0:DRAWR 0,-32:DRAWR 32,0:MOVE 16*P5+7,16*(26-P6)+7:DRAWR -32,0:DRAWR 0,-32:DRAWR 32,0 3530 MOVE 16*P1+8,16*(26-P2)+8:DRAWR -31,0:DRAWR 0,-32:DRAWR 31,0:MOVE 16*P3+8,16*(26-P4)+8:DRAWR -31,0:DRAWR 0,-32:DRAWR 31,0:MOVE 16*P5+8,16*(26-P6)+8:DRAWR -31,0:DRAWR 0,-32:DRAWR 31,0:EI:RETURN 3540 '*************** 3550 '*** percage *** 3560 '*************** 3570 GOSUB 5760:CLS#3:PRINT #3," indiquer la direction de percage" 3580 c$=INKEY$:IF c$="" THEN 3580 3590 c= ASC(c$):IF c<240 OR c>243 THEN 3580 3600 IF TEST (xc+20*(c=242)-20*(c=243),yc+20*(c=241)-20*(c=240))=1 THEN 3680 3610 tepe=INT(16*RND+5):te=te+2*tepe:tepeto=tepeto+tepe 3620 GOSUB 5760:CLS#3:PRINT#3," duree de percage: ";tepe;"sec." 3630 ON c-239 GOTO 3640,3650,3660,3670 3640 LOCATE xx,yy-1:PRINTCHR$(128):RETURN 3650 LOCATE xx,yy+1:PRINTCHR$(128):RETURN 3660 LOCATE xx-1,yy:PRINTCHR$(128):RETURN 3670 LOCATE xx+1,yy:PRINTCHR$(128):RETURN 3680 GOSUB 5760:CLS#3:PRINT#3," percage impossible":RETURN 3690 '*************************** 3700 '* coordonnees lettre code * 3710 '*************************** 3720 DIM codex(10,5):DIM codey(10,5) 3730 FOR i=1 TO 10 3740 FOR j=1 TO 5 3750 codex(i,j)=2*(INT(12*RND+1)):codey(i,j)= 2*(INT(12*RND+1)) 3760 IF codex(i,j)=4 AND codey(i,j)=2 THEN 3750 3770 FOR k=0 TO j-1 3780 IF codex(i,j)=codex(i,k) AND codey(i,j)=codey(i,k) THEN 3750 3790 IF codex(i,j)=cox(i) AND codey(i,j)=coy(i) THEN 3750 3800 ON i GOTO 3810,3820,3830,3840,3850,3860,3870,3880,3890,3900 3810 IF codey(i,j)=EY(1) OR codey(i,j)=EY(2) OR codey(i,j)=EY(3) THEN 3750 ELSE 3910 3820 IF codey(i,j)=EY(1) OR codey(i,j)=EY(4) OR codey(i,j)=EY(5) THEN 3750 ELSE 3910 3830 IF codey(i,j)=EY(6) OR codey(i,j)=EY(2) OR codey(i,j)=EY(4) THEN 3750 ELSE 3910 3840 IF codey(i,j)=EY(6) OR codey(i,j)=EY(8) OR codey(i,j)=EY(3) THEN 3750 ELSE 3910 3850 IF codey(i,j)=EY(7) OR codey(i,j)=EY(11) OR codey(i,j)=EY(5) THEN 3750 ELSE 3910 3860 IF codey(i,j)=EY(9) OR codey(i,j)=EY(7) OR codey(i,j)=EY(13) THEN 3750 ELSE 3910 3870 IF codey(i,j)=EY(10) OR codey(i,j)=EY(14) OR codey(i,j)=EY(15) THEN 3750 ELSE 3910 3880 IF codey(i,j)=EY(9) OR codey(i,j)=EY(14) OR codey(i,j)=EY(11) THEN 3750 ELSE 3910 3890 IF codey(i,j)=EY(12) OR codey(i,j)=EY(13) OR codey(i,j)=EY(15) THEN 3750 ELSE 3910 3900 IF codey(i,j)=EY(8) OR codey(i,j)=EY(10) OR codey(i,j)=EY(12) THEN 3750 ELSE 3910 3910 NEXT k 3920 NEXT j 3930 NEXT i:RETURN 3940 '*********************** 3950 '*** porte de sortie *** 3960 '*********************** 3970 xsor=2*INT(10*RND+2):ysor=2*INT(10*RND+2) 3980 IF xsor=cox(etsor) AND ysor=coy(etsor) THEN 3970 3990 FOR i=1 TO 5 4000 IF xsor=codex(etsor,i) AND ysor=codey(etsor,i) THEN 3970 ELSE NEXT i 4010 IF (xsor=P1 AND ysor=P2) OR (xsor=P1+2 AND ysor=P2) THEN 3970 4020 IF (xsor=P3 AND ysor=P4) OR (xsor=P3+2 AND ysor=P4) THEN 3970 4030 IF (xsor=P5 AND ysor=P6) OR (xsor=P5+2 AND ysor=P6) THEN 3970 4040 RETURN 4050 '************************ 4060 '*** ouverture coffre *** 4070 '************************ 4080 pause=2:GOSUB 5760:CLS #3:INPUT#3, "Code du coffre ";c$ 4090 c$=LOWER$(c$):IF c$=code$ THEN 4110 4100 CLS#3:PRINT #3,"Le code n'est pas bon":pause=0:GOTO 2120 4110 IF cle(n)=1 THEN 4140 4120 GOSUB 5770:CLS #3:PRINT#3," BRAVO mais il n'y a pas de cle." 4130 pause=0:GOTO 2120 4140 PEN 3:LOCATE cox(n),coy(n):PRINT CHR$(247) 4150 GOSUB 5770:CLS #3:PEN 1:PRINT#3," BRAVO, prenez la cle" 4160 '****************** 4170 '*** prise clef *** 4180 '****************** 4190 c$=INKEY$:IF c$="" THEN 4190 4200 c=ASC(c$):IF c<240 OR c>243 THEN 4190 4210 xcl=xx+2*(c=242)-2*(c=243) 4220 ycl=yy+2*(c=240)-2*(c=241) 4230 IF xcl=cox(n) AND ycl=coy(n) THEN 4240 ELSE 4290 4240 nbcle=nbcle+1:cle(n)=0 4250 IF nbcle=1 THEN LOCATE #5,9,5:PRINT #5,CHR$(247) 4260 IF nbcle=2 THEN LOCATE #5,10,5:PRINT #5,CHR$(247) 4270 IF nbcle=3 THEN LOCATE #5,11,5:PRINT #5,CHR$(247) 4280 PEN 1:LOCATE cox(n),coy(n):PRINT CHR$(246) 4290 pause=0:GOTO 2120 4300 '******************** 4310 '*** instructions *** 4320 '******************** 4330 IF R$="C" THEN INK 0,0:INK 1,9:INK 2,11:BORDER 0 4340 PAPER 0:PEN 2:CLS:FOR i=3 TO 37:LOCATE i,1:PRINT CHR$(221):LOCATE i,9:PRINT CHR$(221):NEXT i 4350 FOR i=2 TO 8:LOCATE 3,i:PRINT CHR$(221):LOCATE 37,i:PRINT CHR$(221):NEXT i 4360 READ a:IF a=20 THEN 4410 4370 IF a<10 THEN 4380 ELSE 4390 4380 lig=a:col=3:GOTO 4360 4390 col=col+1 4400 LOCATE col,lig:PRINT CHR$(a):GOTO 4360 4410 WINDOW #6,1,40,11,25:PAPER #6,0:CLS #6:PEN 3 4420 FOR i=1 TO 14:PRINT #6:NEXT 4430 GOSUB 5820 4440 PRINT #6,"Voulez-vous les instructions ? (O/N)" 4450 I$=UPPER$(INKEY$):IF I$="N" THEN RETURN ELSE IF I$<>"O" THEN 4450 4460 CLS #6:PRINT #6:PRINT #6:T$="INSTRUCTIONS":GOSUB 5290 4470 T$="Pour faire defiler les instructions,":GOSUB 5280 4480 T$="appuyez sur une touche quelconque.":GOSUB 5290 4490 CALL &BB06 4500 T$="Vous vous trouvez dans un labyrinthe de":GOSUB 5290 4510 T$="10 etages et vous devez en sortir le":GOSUB 5290 4520 T$="plus rapidement possible.":GOSUB 5290 4530 CALL &BB06 4540 T$="Mais, pour pouvoir sortir,il vous":GOSUB 5280 4550 T$="faudra etre en possession des 3 clefs":GOSUB 5290 4560 T$="qui vous permettront de deverrouiller":GOSUB 5290 4570 T$="les 3 cadenas qui condamnent la porte":GOSUB 5290 4580 T$="de sortie.":GOSUB 5290 4590 CALL &BB06 4600 T$="Les clefs sont enfermees dans 5, 4 ou":GOSUB 5280 4610 T$="seulement 3 des 10 coffres que vous":GOSUB 5290 4620 T$="trouverez dans le labyrinthe.":GOSUB 5290 4630 CALL &BB06 4640 T$="L'ouverture d'un coffre necessite la":GOSUB 5280 4650 T$="connaissance d'un code constitue de 5":GOSUB 5290 4660 T$="lettres formant un nom d'animal.":GOSUB 5290 4670 CALL &BB06 4680 T$="Les lettres du code sont dissimulees":GOSUB 5280 4690 T$="a differents endroits de l'etage. Il":GOSUB 5290 4700 T$="peut arriver qu'une lettre du code ne":GOSUB 5290 4710 T$="puisse pas etre obtenue.De toute facon,":GOSUB 5290 4720 T$="vous n'avez pas besoin de connaitre":GOSUB 5290 4730 T$="toutes les lettres du code pour essayer":GOSUB 5290 4740 T$="d'ouvrir un coffre.":GOSUB 5290 4750 CALL &BB06 4760 T$="Les escaliers vous meneront a un autre":GOSUB 5280 4770 T$="etage, mais pas obligatoirement voisin.":GOSUB 5290 4780 T$="Un escalier relie toujours les deux":GOSUB 5290 4790 T$="memes etages. Un dessin a droite du":GOSUB 5290 4800 T$="labyrinthe vous indiquera l'etage ou":GOSUB 5290 4810 T$="vous vous trouvez.":GOSUB 5290 4820 CALL &BB06 4830 T$="Vous n'avez le droit de rester a un":GOSUB 5280 4840 T$="meme etage qu'un temps limite (180 sec)":GOSUB 5290 4850 T$="Au bout de ce laps de temps, vous serez":GOSUB 5290 4860 T$="transfere automatiquement a un autre":GOSUB 5290 4870 T$="etage. Aussi, surveillez l'horloge.":GOSUB 5290 4880 CALL &BB06 4890 T$="Si vous etes coince, vous pouvez vous":GOSUB 5280 4900 T$="en sortir en utilisant la touche <P>":GOSUB 5290 4910 T$="qui vous permet de percer une cloison.":GOSUB 5290 4920 T$="Mais, attention, suivant la resistance":GOSUB 5290 4930 T$="de la cloison, le temps necessaire au":GOSUB 5290 4940 T$="percage peut etre plus ou moins long:":GOSUB 5290 4950 T$="de 5 a 20 secondes. Aussi, n'utilisez":GOSUB 5290 4960 T$="cette possibilite qu'a bon escient.":GOSUB 5290 4970 CALL &BB06 4980 T$="Tout cela serait tres facile, s'il n'y":GOSUB 5280 4990 T$="avait pas des fantomes qui rodent et":GOSUB 5290 5000 T$="qui ont la mauvaise habitude de vous":GOSUB 5290 5010 T$="derober les clefs et d'aller les":GOSUB 5290 5020 T$="remettre dans un coffre. Bien qu'ils":GOSUB 5290 5030 T$="ne vous poursuivent pas vraiment,":GOSUB 5290 5040 T$="mefiez-vous en cependant":GOSUB 5290 5050 CALL &BB06 5060 T$="Pour vous deplacer utilisez les fleches":GOSUB 5280 5070 PRINT#6:PRINT#6:PRINT#6," ";CHR$(244);" : vous" 5080 PRINT#6:PRINT#6," ";CHR$(245);" : les fantomes" 5090 PRINT#6:PRINT#6," ";CHR$(246);" : les coffres" 5100 PRINT#6:PRINT#6," ";CHR$(247);" : les clefs" 5110 PRINT#6:PRINT#6," ";CHR$(248);" : les escaliers" 5120 PRINT#6:PRINT#6," ";CHR$(164);" : les lettres du code" 5130 PRINT#6:PRINT#6," ";CHR$(233);" : la sortie" 5140 CALL &BB06 5150 T$="REMARQUES":GOSUB 5280 5160 T$="La forme des labyrinthes, les positions":GOSUB 5280 5170 T$="des escaliers, du coffre, des lettres":GOSUB 5290 5180 T$="du code, de la porte de sortie, restent":GOSUB 5290 5190 T$="les memes au cours d'une partie, mais":GOSUB 5290 5200 T$="changent si vous en faites une autre.":GOSUB 5290 5210 CALL &BB06 5220 T$="Lorsque vous arrivez a un nouvel etage,":GOSUB 5280 5230 T$="et meme si vous y etes deja passe, un":GOSUB 5290 5240 T$="un nouveau code est affecte au coffre.":GOSUB 5290 5250 T$="BONNE CHANCE":GOSUB 5280 5260 CALL &BB06 5270 CLS:RETURN 5280 PRINT #6 5290 PRINT #6:PRINT #6 5300 LOCATE #6,INT((40-LEN(T$))/2)+1,25:FOR t=1 TO LEN(T$):PRINT #6,MID$(T$,t,1);:IF MID$(T$,t,1)<>" " THEN SOUND 1,284,3,5,0,0,1 5310 FOR d=1 TO 50:NEXT d:NEXT t:RETURN 5320 DATA 3,128,221,221,221,221,225,223,221,221,225,128,128,221,221,221,221,225,128,128,221,221,221,221,221,221,128,223,221,221,221,221,225,128 5330 DATA 4,128,128,221,221,221,221,221,221,221,221,128,128,128,128,128,221,221,128,128,128,128,223,221,221,224,128,221,221,128,128,128,221,128 5340 DATA 5,128,128,221,221,128,221,221,128,221,221,128,223,221,221,221,221,221,128,128,128,223,221,221,224,128,128,221,221,221,221,221,224,128 5350 DATA 6,128,128,221,221,128,221,221,128,221,221,128,221,128,128,128,221,221,128,128,223,221,221,224,128,128,128,221,221,128,128,128,128,128 5360 DATA 7,128,128,221,221,128,221,221,128,221,221,128,222,221,221,221,224,222,221,128,221,221,221,221,221,221,128,222,221,221,221,221,221,128 5370 DATA 9,221,221,221,221,221,221,221,221,71,46,77,65,78,75,79,87,83,75,73,45,49,57,56,53,20 5380 '********************* 5390 n1$="Victor":h1=5555 5400 n2$="William":h2=6666 5410 n3$="Xavier":h3=7777 5420 n4$="Yvan":h4=8888 5430 n5$="Zoe":h5=10000 5440 RETURN 5450 '********************* 5460 '*** fin de partie *** 5470 '********************* 5480 pause=1 5490 CLS#3:CLS#1 5500 s1=INT(TIME/300):temps=temps+s1-s0+tepeto 5510 IF temps>=h5 THEN LOCATE#1,1,10:PRINT#1,"VOTRE SCORE EST TROP":PRINT#1:PRINT#1,"MAUVAIS POUR POUVOIR":PRINT#1:PRINT#1,"FIGURER AU PALMARES":GOTO 5580 5520 IF TEMPS<h1 THEN LOCATE#1,1,10:PRINT#1,"TOUTES MES FELICITATIONS:":PRINT#1:PRINT#1,"VOUS AVEZ BATTU LE RECORD":GOTO 5540 5530 IF TEMPS<h5 THEN PRINT#1,"BRAVO, BELLE PERFORMANCE":PRINT#1:PRINT#1,"QUI VOUS PERMET DE":PRINT#1:PRINT#1,"FIGURER AU PALMARES":GOTO 5540 5540 INPUT "Quel est votre nom";n$ 5550 IF temps<h1 THEN n5$=n4$:n4$=n3$:n3$=n2$:n2$=n1$:n1$=n$ ELSE IF temps<h2 THEN n5$=n4$:n4$=n3$:n3$=n2$:n2$=n$ ELSE IF temps<h3 THEN n5$=n4$:n4$=n3$:n3$=n$ ELSE IF temps<h4 THEN n5$=n4$:n4$=n$ ELSE IF temps<h5 THEN n5$=n$ 5560 tem=temps 5570 IF tem<h1 THEN h5=h4:h4=h3:h3=h2:h2=h1:h1=tem ELSE IF tem<h2 THEN h5=h4:h4=h3:h3=h2:h2=tem ELSE IF tem<h3 THEN h5=h4:h4=h3:h3=tem ELSE IF tem<h4 THEN h5=h4:h4=tem ELSE IF tem<h5 THEN h5=tem 5580 CLS#1 5590 FOR i=7 TO 18:LOCATE #1,i,1:PRINT#1,CHR$(238):LOCATE #1,i,7:PRINT#1,CHR$(238):NEXT 5600 FOR i=2 TO 6:LOCATE #1,7,i:PRINT#1,CHR$(238):LOCATE #1,18,i:PRINT#1,CHR$(238):NEXT 5610 LOCATE #1,11,3:PRINT#1,"MAZE" 5620 LOCATE #1,9,5:PRINT#1,"PALMARES" 5630 LOCATE #1,3,11:PRINT#1,"1- ";n1$:LOCATE #1,16,11:PRINT#1,USING "#####";h1;:PRINT#1," sec." 5640 LOCATE #1,3,13:PRINT#1,"2- ";n2$:LOCATE #1,16,13:PRINT#1,USING "#####";h2;:PRINT#1," sec." 5650 LOCATE #1,3,15:PRINT#1,"3- ";n3$:LOCATE #1,16,15:PRINT#1,USING "#####";h3;:PRINT#1," sec." 5660 LOCATE #1,3,17:PRINT#1,"4- ";n4$:LOCATE #1,16,17:PRINT#1,USING "#####";h4;:PRINT#1," sec." 5670 LOCATE #1,3,19:PRINT#1,"5- ";n5$:LOCATE #1,16,19:PRINT#1,USING "#####";h5;:PRINT#1," sec." 5680 GOSUB 5820 5690 LOCATE #1,1,22:PRINT#1,"Voulez-vous faire une autre partie (O/N) ?" 5700 K$=UPPER$(INKEY$):IF K$="N" THEN NEW ELSE IF K$<>"O" THEN 5700 5710 ERASE R,S,EX,EY,cox,coy,cle,codex,codey 5720 temps=0:nbcle=0:record=h1:CLS:GOTO 680 5730 '***************** 5740 '*** BRUITAGES *** 5750 '***************** 5760 SOUND 1,200,15,4:SOUND 1,0,5:SOUND 1,150,15,4:SOUND 1,0,5:SOUND 1,100,15,4:SOUND 1,0,5:SOUND 1,80,30,4:RETURN 5770 FOR i=0 TO 700 STEP 100 5780 SOUND 1,2000+2*i,10+i/100,7 5790 NEXT i:RETURN 5800 SOUND 1,284,20,5:SOUND 1,0,2:SOUND 1,284,20,5:SOUND 1,319,20,5:SOUND 1,358,40,5:RETURN 5810 '*Aupres de ma blonde* 5820 RESTORE 5880 5830 FOR no=1 TO 92 5840 READ fr,du 5850 SOUND 1,fr,du,5 5860 SOUND 2,fr/2,du,3 5870 SOUND 4,fr*2,du,3 5880 DATA 142,20,0,3,142,40,134,20,142,40 5890 DATA 159,20,179,60,0,3,179,20,0,10 5900 DATA 179,20,119,40,0,3,119,20,106,40 5910 DATA 0,3,106,20,119,60,0,3,119,20 5920 DATA 0,10,142,20,0,3,142,40,134,20 5930 DATA 142,40,159,20,179,60,0,3,179,20 5940 DATA 0,10,179,20,119,40,0,3,119,20 5950 DATA 106,40,0,3,106,20,119,60,0,3 5960 DATA 119,20,0,10,119,20,106,40,0,3 5970 DATA 106,20,0,3,106,40,142,20,134,40 5980 DATA 0,3,134,40,0,3,134,20,119,40 5990 DATA 0,3,119,20,0,3,119,40,159,20 6000 DATA 142,60,0,3,142,40,0,10,179,60 6010 DATA 159,20,142,20,134,20,142,60,119,40 6020 DATA 0,10,159,40,134,20,142,40,159,20 6030 DATA 179,40,213,20,239,40,0,10,179,60 6040 DATA 159,20,142,20,134,20,142,60,119,40 6050 DATA 0,10,159,40,134,20,142,40,159,20 6060 DATA 179,60,179,40 6070 NEXT no 6080 RETURN 6090 '****************** 6100 '*** CODES *** 6110 '****************** 6120 DATA 65,73,71,76,69 6130 DATA 65,83,80,73,67 6140 DATA 66,73,67,72,69 6150 DATA 66,73,83,79,78 6160 DATA 66,79,69,85,70 6170 DATA 66,85,84,79,82 6180 DATA 67,65,82,80,69 6190 DATA 67,72,73,69,78 6200 DATA 67,82,65,66,69 6210 DATA 67,89,71,78,69 6220 DATA 68,73,78,68,69 6230 DATA 68,73,78,71,79 6240 DATA 68,79,71,85,69 6250 DATA 69,73,68,69,82 6260 DATA 70,85,82,69,84 6270 DATA 71,82,73,86,69 6280 DATA 71,85,69,80,69 6290 DATA 72,69,82,79,78 6300 DATA 72,73,66,79,85 6310 DATA 72,85,80,80,69 6320 DATA 72,89,69,78,69 6330 DATA 73,83,65,82,68 6340 DATA 75,79,65,76,65 6350 DATA 76,65,80,73,78 6360 DATA 76,69,82,79,84 6370 DATA 77,65,78,84,69 6380 DATA 77,69,82,76,69 6390 DATA 77,73,76,65,78 6400 DATA 77,79,82,83,69 6410 DATA 77,79,82,85,69 6420 DATA 77,79,85,76,69 6430 DATA 77,85,76,69,84 6440 DATA 77,85,76,79,84 6450 DATA 79,75,65,80,73 6460 DATA 79,82,86,69,84 6470 DATA 80,65,78,68,65 6480 DATA 80,79,78,69,89 6490 DATA 80,79,85,76,69 6500 DATA 82,65,84,79,78 6510 DATA 83,65,73,71,65 6520 DATA 83,69,82,73,78 6530 DATA 83,73,78,71,69 6540 DATA 84,65,80,73,82 6550 DATA 84,65,84,79,85 6560 DATA 84,65,85,80,69 6570 DATA 84,73,71,82,69 6580 DATA 84,82,85,73,69 6590 DATA 86,65,67,72,69 6600 DATA 86,73,83,79,78 6610 DATA 90,69,66,82,69 |