10 '         =-=-=-=-=-=-=-=-=-=-=-=-=
20 '         =   A   pi   D          =
30 '         =-----------------------=
40 '         = auteur: Andre DAUMAIL =  
50 '         -------------------------
60 '
70 '   (C) 1985  AMSTRAD Magazine et l'auteur
80 '
90 KEY DEF 0,1,43:KEY DEF 2,1,45:KEY 139,"C"+CHR$(13):KEY 138,"S"+CHR$(13)
100 '
110 '====> le son <====
120 '
130 ENV 1,1,15,1,1,0,1,1,0,1,12,-1,8,2,-1,20
140 ENT -1,1,1,3,1,-1,3,1,0,1,1,1,3,1,-1,3
150 DATA 478,30,0,5,358,30,0,5,358,35,319,10,358,10,379,10,358,10,319,30,0,5,426,30,319,60
160 DATA 358,15,0,5,379,30,0,5,379,15,0,5,213,15,0,5,239,60
170 DATA 379,15,0,5,358,30,0,5,358,15,0,5,213,15,0,5,239,60
180 DATA 478,30,0,5,358,30,0,5,358,35,319,10,358,10,379,10,358,10,319,30,0,5,426,30,319,60
190 DATA 358,15,0,5,379,30,0,5,379,15,0,5,213,15,0,5,239,60,379,15,0,5,358,30,0,5,284,30,0,5,358,100,-1,-1
200 '
210 '====> presentation <====
220 '
230 GOSUB 2590
240 MODE 0
250 PEN 1:LOCATE 8,3:PRINT "avec"
260 PEN 3:LOCATE 1,6:PRINT"A":LOCATE 4,12:PRINT"t":LOCATE 7,18:PRINT"D":PEN 2:LOCATE 2,8:PRINT"m":LOCATE 5,14:PRINT"r":PEN 4:LOCATE 3,10:PRINT"s":LOCATE 6,16:PRINT"a"
270 FOR I=1 TO 13:READ VOL,PER:SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1:NEXT
280 LOCATE 8,3:PRINT SPACE$(4):FOR I=8 TO 16 STEP 2:LOCATE 1,I:PRINT SPACE$(7)
290 READ VOL,PER:SOUND 2,VOL*2,PER,0,1,1:SOUND 1,0,PER,0,1,1:SOUND 4,0,PER,0,1,1
300 NEXT
310 FOR I=5 TO 158 STEP 5:TAG:MOVE I,318:PRINT" A";:MOVE 190,I+116:PRINT"D";:MOVE 190,I+100:PRINT" ";
320 IF I>138 THEN GOTO 340
330 IF I<50 AND I/10=INT(I/10) THEN READ VOL,PER:SOUND 2,VOL*2,PER,0,1,1:SOUND 1,0,PER,0,1,1:SOUND 4,0,PER,0,1,1 ELSE IF I/10=INT(I/10) THEN READ VOL,PER:SOUND 2,0,PER,0,1,1:SOUND 1,VOL/2,PER,0,1,1:SOUND 4,0,PER,0,1,1
340 NEXT:TAGOFF
350 PEN 2:LOCATE 8,6:PRINT"ndre":LOCATE 8,9:PRINT"aumail"
360 LOCATE 8,19:PRINT"propose"
370 FOR I=1 TO 6:READ VOL,PER:SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1:NEXT
380 GOTO 430
390 '
400 ' ====> le menu <====
410 '
420 RESTORE 180
430 CLS:INK 2,9:PEN 2:LOCATE 3,9:PRINT"CALCULETTRE"
440 LOCATE 7,12:PRINT"et":LOCATE 12,15:PRINT"PYRAMIDE"
450 FOR I=1 TO 7:READ VOL,PER:SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1:NEXT
460 INK 3,3:PEN 3:LOCATE 3,9:PRINT"C":LOCATE 7,12:PRINT"et":LOCATE 12,15:PRINT"P"
470 FOR I=1 TO 5:READ VOL,PER:SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1:NEXT
480 PEN 2:LOCATE 3,9:PRINT"C":LOCATE 7,12:PRINT"  ":LOCATE 12,15:PRINT"P"
490 TAG:PEN 3
500 FOR I=242 TO 48 STEP -6:MOVE 64,I:PRINT" ";:MOVE 64,I-6:PRINT"C";
510 IF I/10=INT(I/10) THEN READ VOL,PER:SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1
520 IF I<162 THEN MOVE 352,I:PRINT" ";:MOVE 352,I-6:PRINT"P";
530 NEXT
540 TAGOFF
550 LOCATE 3,23:PRINT"C   ou   P"
560 READ VOL,PER
570 IF VOL<>-1 THEN SOUND 1,VOL,PER,0,1,1:SOUND 2,VOL/2,PER,0,1,1:SOUND 4,VOL/4,PER,0,1,1:GOTO 560
580 PEN 2:LOCATE 2,25:PRINT"VOTRE  CHOIX"
590 A$=" ":WHILE A$<>"C" AND A$<>"P":A$=UPPER$(INKEY$):WEND
600 IF A$="C" THEN GOTO 640 ELSE 1510
610 '
620 ' --------------------------> C A L C U L E T T R E 
630 '
640 CLEAR:MODE 0
650 INK 0,4:INK 1,26:BORDER 8:PAPER 0:PEN 1
660 LOCATE 4,3:PRINT"* CALCULETTRE *"
670 LOCATE 2,12:PRINT"NOMBRE DE CHIFFRES"
680 PRINT:PRINT TAB(2)"     de 2 a 5"
690 LOCATE 2,24:PRINT"6 = retour au menu"
700 R$=" ":WHILE R$<"2" OR R$>"6":R$=INKEY$:WEND:RCH=VAL(R$)
710 IF RCH=6 THEN GOSUB 2590:GOTO 420
720 FOR G=0 TO 9
730 K(G)=INT(RND(1)*26)+1
740 FOR I=0 TO G-1
750 IF K(I)=K(G) THEN I=G-1:G=G-1
760 NEXT I
770 C(G)=INT(K(G)/2)+2
780 INK C(G),G+16
790 NEXT G
800 X=1
810 O(RCH)=INT(RND(1)*10):IF O(RCH)=0 THEN 810
820 FOR I=1 TO RCH-1
830 O(I)=INT(RND(1)*10)
840 Q=(O(I)*X):O=O+Q:X=X*10
850 NEXT
860 O=O+O(RCH)*10^(RCH-1)
870 P(RCH)=INT(RND(1)*10):IF P(RCH)=0 THEN 870
880 X=1
890 FOR I=1 TO RCH-1
900 P(I)=INT(RND(1)*10)
910 Q=(P(I)*X):P=P+Q:X=X*10
920 NEXT
930 P=P+P(RCH)*10^(RCH-1)
940 S=INT(RND(1)*2)+1
950 IF S=2 AND O<P THEN N=O:O=P:P=N:PE=2 ELSE PE=0
960 IF S=1 THEN R=P+O ELSE R=O-P
970 IF S=1 THEN S$="+ " ELSE S$="- "
980 CLS
990 LOCATE 2,2:PEN 1:PRINT"OPERATION"
1000 LOCATE 8-RCH,5+PE:FOR I=RCH TO 1 STEP -1:PEN C(O(I)):PRINT CHR$(64+K(O(I)));:NEXT
1010 LOCATE 6-RCH,7:PEN 1:PRINT S$:LOCATE 8-RCH,7-PE:FOR I=RCH TO 1 STEP -1:PEN C(P(I)):PRINT CHR$(64+K(P(I)));:NEXT
1020 LOCATE 3,9:PEN 1:PRINT "------"
1030 R$=STR$(R):LOCATE 9-LEN(R$),11:FOR I=2 TO LEN(R$):R1(I)=VAL(MID$(R$,I,1)):PEN C(R1(I)):PRINT CHR$(64+K(R1(I)));:NEXT
1040 GOSUB 1190
1050 LOCATE 1,2:PEN 1:PRINT TAB(12)"SOLUTION"
1060 LOCATE 14,5:PEN 2:PRINT USING "#####";O
1070 LOCATE 12,7:PEN 1:PRINT S$;:PEN 3:PRINT USING "#####";P
1080 LOCATE 14,9:PEN 1:PRINT "------"
1090 LOCATE 13,11:PEN 6:PRINT USING "######";R
1100 RO$=STR$(RO):RO=VAL(RO$):RP$=STR$(RP):RP=VAL(RP$)
1110 IF S=2 AND RO<RP THEN RN=RO:RO=RP:RP=RN
1120 IF RO=O AND RP=P AND RR=R THEN GOTO 1160
1130 FOR I=1 TO 8:PLOT 1+I,1:DRAW 640+I,208:NEXT
1140 FOR I=1 TO 8:PLOT 640-I,1:DRAW 8-I,208:NEXT
1150 FOR I=50 TO 500 STEP 10:SOUND 1,I,5,7:SOUND 2,I*1.5,5,7:SOUND 4,I*0.5,5,7:NEXT:GOTO 1170
1160 INK 1,4,26:FOR J=1 TO 5:FOR I=500 TO 45 STEP -15:SOUND 1,I,5,7:SOUND 2,I*1.5,5,7:SOUND 4,I*0.5,5,7:NEXT I,J
1170 IF INKEY$<>CHR$(13) THEN 1170
1180 INK 1,26:GOTO 640
1190 LOCATE 1,12:PEN 2:PRINT STRING$(20,"_")
1200 LOCATE 4,14:PEN 1:PRINT"VOTRE  REPONSE"
1210 ML=10^(LEN(R$)-2):X=16:PEN 1:FOR JK=0 TO 9
1220 H(JK)=INT(RND(1)*10)
1230 FOR WJ=0 TO JK-1:IF H(JK)=H(WJ) THEN JK=JK-1:GOTO 1480
1240 NEXT WJ
1250 J=H(JK)
1260 Q(J)=0
1270 FOR I=RCH TO 1 STEP -1
1280 IF J=O(I) AND Q(J)=0 THEN LOCATE 1,X:PRINT CHR$(64+K(O(I)));:INPUT RD:Q(J)=1:X=X+1
1290 IF J=O(I) THEN LOCATE 18-I,17+PE:PRINT USING "#";RD;
1300 IF J=O(I) THEN RD(I)=RD:RO=RO+(RD(I)/10)*10^I
1310 NEXT I
1320 LOCATE 16-RCH,19:PRINT S$;
1330 FOR I=RCH TO 1 STEP -1
1340 IF J=P(I) AND Q(J)=0 THEN LOCATE 1,X:PRINT CHR$(64+K(P(I)));:INPUT RD:Q(J)=1:X=X+1
1350 IF J=P(I) THEN LOCATE 18-I,19-PE:PRINT USING "#";RD;
1360 IF J=P(I) THEN RD(I)=RD:RP=RP+(RD(I)/10)*10^I
1370 NEXT I
1380 LOCATE 13,21:PRINT "------"
1390 LR=LEN(R$)-1
1400 FOR E=2 TO LEN(R$)
1410 R1(E-1)=VAL(MID$(R$,E,1))
1420 NEXT E
1430 FOR I=1 TO LEN(R$)-1
1440 IF J=R1(I) AND Q(J)=0 THEN LOCATE 1,X:PRINT CHR$(64+K(R1(I)));:INPUT RD:Q(J)=1:X=X+1
1450 IF J=R1(I) THEN LOCATE 18-LEN(R$)+I,23:PRINT USING "#";RD;
1460 IF J=R1(I) THEN RD(I)=RD:RR=RR+((RD(I)*10^(LR-I)))
1470 NEXT I
1480 NEXT JK
1490 RETURN
1500 '
1510 ' --------------------------> P Y R A M I D E
1520 '
1530 MODE 1:CLS
1540 INK 0,9:INK 1,3:INK 2,24:INK 3,15:PEN 1:PAPER 0:BORDER 15
1550 TQ=0:FOR J=1 TO 6:FOR I=1 TO 6:TF(J,I)=0:NEXT I,J:FOR I=2 TO 6:W(I)=H(I):H(I)=0:NEXT
1560 RANDOMIZE TIME
1570 GOSUB 2360
1580 XY=2:A=F(2,1)+F(2,2)
1590 MODE 0:LOCATE 4,3:PRINT"*  PYRAMIDE  *"
1600 LOCATE 2,12:PRINT"COMBIEN DE NOMBRES"
1610 PRINT:PRINT TAB(2)"     de 4 a 6"
1620 LOCATE 2,24:PRINT"7 = retour au menu"
1630 R$=" ":WHILE R$<"4" OR R$>"7":R$=INKEY$:WEND:R=(VAL(R$))
1640 IF R=7 THEN GOSUB 2590:GOTO 420
1650 MODE 1:CLS
1660 LOCATE 27,6:PRINT USING "###";A
1670 FOR I=2 TO 6:H(I)=INT(RND(1)*I)+1
1680 IF I>2 AND H(I)=W(I) THEN I=I-1
1690 NEXT
1700 X=23:Y=6:FOR J=2 TO 6:X=X-2:Y=Y+2
1710 IF J<8-R THEN 1770
1720 FOR I=1 TO 6
1730 IF (J=5 AND I>5) OR (J=4 AND I>4) OR (J=3 AND I>3) OR (J=2 AND I>2) GOTO 1760
1740 IF I<>H(J) THEN 1760
1750 LOCATE X+I*4,Y:PRINT USING"###";F(J,I)
1760 NEXT I
1770 NEXT J
1780 PEN 3:W=17:X=25:Y=6:FOR P=1 TO 6:LOCATE X,Y:PRINT CHR$(P+64):LOCATE W,18:PRINT P;:W=W+4:X=X-2:Y=Y+2:NEXT
1790 PEN 1
1800 PLOT 408,328:DRAWR 64,0,3:DRAWR 0,-32,3:FOR D=1 TO 5:DRAWR 32,0,3:DRAWR 0,-32,3:NEXT
1810 DRAWR -384,0,3:FOR D=1 TO 5:DRAWR 0,32,3:DRAWR 32,0,3:NEXT:DRAWR 0,32,3
1820 X=384:B=136:FOR D=248 TO 408 STEP 32:PLOT D,B:DRAWR X,0,3:X=X-64:B=B+32:NEXT
1830 PLOT 440,296:DRAWR 0,-32,3:FOR D=1 TO 4:DRAWR 32,0,3:DRAWR 0,-32,3:NEXT
1840 PLOT 440,264:FOR D=1 TO 4:DRAWR -32,0,3:DRAWR 0,-32,3:NEXT
1850 PLOT 440,232:DRAWR 0,-32,3:FOR D=1 TO 2:DRAWR 32,0,3:DRAWR 0,-32,3:NEXT
1860 PLOT 440,200:FOR D=1 TO 2:DRAWR -32,0,3:DRAWR 0,-32,3:NEXT
1870 PLOT 440,168:DRAWR 0,-32,3
1880 GOSUB 2050:GOSUB 2240
1890 FOR I=1 TO 1000:NEXT
1900 IF RF=0 THEN GOTO 2550
1910 '---> RESULTAT
1920 LOCATE 25,2:PRINT"SOLUTION":PRINT TAB(24)"=========="
1930 LOCATE 27,6:PRINT USING "###";A
1940 PEN 2
1950 X=23:Y=6:FOR J=2 TO 6:X=X-2:Y=Y+2
1960 FOR I=1 TO 6
1970 IF J<8-R THEN 1990
1980 IF I=H(J) THEN 2020
1990 IF TF(J,I)=1 THEN 2020
2000 IF (J=5 AND I>5) OR (J=4 AND I>4) OR (J=3 AND I>3) OR (J=2 AND I>2) GOTO 2020
2010 LOCATE X+I*4,Y:PRINT USING"###";F(J,I)
2020 NEXT I,J
2030 IF INKEY$<>CHR$(13) THEN 2030
2040 GOTO 1530
2050 '-----> DEMANDE REPONSES
2060 LOCATE 5,25:PRINT"VOTRE REPONSE EN"
2070 X=23:Y=6
2080 FOR J=2 TO 6:X=X-2:Y=Y+2
2090 FOR I=1 TO 6
2100 IF J<8-R THEN 2120
2110 IF I=H(J) THEN 2200
2120 IF TF(J,I)>0 THEN 2200
2130 IF (J=5 AND I>5) OR (J=4 AND I>4) OR (J=3 AND I>3) OR (J=2 AND I>2) GOTO 2200
2140 LOCATE 22,25:PRINT CHR$(J+64);I;:INPUT R$
2150 IF R$="C" THEN SI=I:GOSUB 2430:I=SI:GOTO 2140 
2160 R(J,I)=VAL(R$)
2170 IF R(J,I)>0 THEN TQ=TQ+1:TF(J,I)=2:LOCATE X+I*4,Y:PEN 3:PRINT USING"###";R(J,I):PEN 1
2180 IF R(J,I)=F(J,I) THEN TF(J,I)=1
2190 LOCATE 26,25:PRINT"       "
2200 NEXT I,J
2210 WH=21-TQ-R:IF WH>0 THEN LOCATE 2,25:PRINT"VOULEZ-VOUS ENCORE UNE CHANCE (O ou N)" ELSE GOTO 2230
2220 R$=" ":WHILE R$<"N" OR R$>"O":R$=INKEY$:WEND:IF R$="O" THEN LOCATE 1,25:PRINT SPACE$(39):GOTO 2060
2230 RETURN
2240 ' -----> COMPARAISONS DES REPONSES
2250 LOCATE 1,25:PRINT SPACE$(39)
2260 LOCATE 1,2:PRINT"VOS RESULTATS"
2270 X=3:PRINT"----ù---ù----"
2280 FOR J=2 TO 6:PRINT"    ù   ù":X=X+1
2290 FOR I=1 TO 6
2300 IF I=H(J) THEN 2340
2310 IF (J=5 AND I>5) OR (J=4 AND I>4) OR (J=3 AND I>3) OR (J=2 AND I>2) GOTO 2340
2320 LOCATE 1,X:PRINT CHR$(J+64)I;USING "ù###ù";R(J,I);:IF F(J,I)=R(J,I) THEN PEN 2:PRINT"Vrai" ELSE PEN 3:RF=RF+1:PRINT"Faux"
2330 PEN 1:X=X+1
2340 NEXT I,J
2350 RETURN
2360 FOR J=6 TO 2 STEP -1
2370 FOR I=6 TO 1 STEP -1
2380 IF (J=5 AND I>5) OR (J=4 AND I>4) OR (J=3 AND I>3) OR (J=2 AND I>2) GOTO 2410
2390 IF J=6 THEN F(J,I)=INT(RND(1)*33)+1:GOTO 2410
2400 F(J,I)=F(J+1,I)+F(J+1,I+1)
2410 NEXT I,J
2420 RETURN
2430 LOCATE 1,25:PRINTSPACE$(28)
2440 LOCATE 5,25:INPUT "operation :";R$
2450 IF R$="S" THEN LOCATE 5,25:PRINT"VOTRE REPONSE EN":RETURN
2460 FOR I=1 TO LEN(R$)
2470 IF MID$(R$,I,1)="-" THEN 2500
2480 IF MID$(R$,I,1)="+" THEN 2510
2490 NEXT
2500 K$=MID$(R$,1,I-1):K=VAL(K$):L$=MID$(R$,I+1):L=VAL(L$):H=K-L:GOTO 2530
2510 K$=MID$(R$,1,I-1):K=VAL(K$):L$=MID$(R$,I+1):L=VAL(L$):H=K+L:GOTO 2530
2520 NEXT
2530 LOCATE 1,XY:PRINT H:XY=XY+1:IF XY=25 THEN XY=2
2540 GOTO 2430
2550 LOCATE 20,2:PRINT"PYRAMIDE EXACTE":PRINTTAB(19)"================="
2560 FOR J=1 TO 5
2570 FOR I=150 TO 45 STEP -15:SOUND 1,I,7,7:SOUND 2,I*1,7,7:SOUND 4,I*0.5,7,7:NEXT I,J
2580 IF INKEY$<>CHR$(13) THEN 2580 ELSE GOTO 1530
2590 INK 0,21:INK 1,0:INK 2,9:INK 3,3:INK 4,11:BORDER 19
2600 RETURN