10 '-----V O C A B U S C O R E-----
20 '   
30 '--------JEU DE REFLEXION-------
40 CLEAR:MODE 1
50 DIM vl(26),f(26),fl(200)
60 js=1:ts=1
70 INK 0,1:INK 1,24:INK 2,20:INK 3,11,26:SPEED INK 25,25:PAPER 0:BORDER 0
80 '-----ECRAN 1
90 RESTORE 100:GOSUB 2090
100 DATA 12,1,2,FAISONS CONNAISSANCE,5,7,2,"A COMBIEN JOUEZ-VOUS?",9,9,2,"(MAXI 8)"
110 DATA 9,17,2,"PRENOM   :",16,17,1,"1",0,0,0,z
120 DATA 1,23,2,"ENTREZ REPONSES, PUIS PRESSEZ",31,23,1,ENTER,37,23,2,POUR,6,25,2,VALIDER OU,17,25,1,DEL,21,25,2,"EN CAS D'ERREUR",0,0,0,z
130 RESTORE 120:GOSUB 2090
140 '-----ENTREE NOMBRE DE JOUEURS
150 DATA 20,13,1,0,1,1,8
160 PEN 1:RESTORE 150:GOSUB 2580
170 nj=VAL(s$)
180 'ENTREE PRENOMS
190 DATA 20,17,20,0,0
200 FOR pr=1 TO nj
210 LOCATE 15,17:PRINT pr:LOCATE 20,17:PRINT STRING$(20," ")
220 RESTORE 190:GOSUB 2580
230 p$(pr)=s$:NEXT
240 '-----ECRAN 2
250 RESTORE 270:CLS:GOSUB 2090
260 RESTORE 120:GOSUB 2090
270 DATA 10,1,2,V O C A B U,22,1,3,S C O R E,6,7,2,"QUEL NIVEAU ?",12,9,2,"(DE 1 a 5)",14,15,2,"CHRONO",12,17,2,"(MAXI 15 MINUTES)",18,20,2,"MINUTES",0
280 '-----ENTREE NIVEAU
290 DATA 19,12,1,0,1,1,5
300 PEN 1:RESTORE 290:GOSUB 2580
310 j=VAL(s$)
320 '-----ENTREE DUREE
330 DATA 14,20,2,0,1,1,15
340 RESTORE 330:GOSUB 2580
350 mn=VAL(s$)
360 GOSUB 1240
370 'ECRAN 3 AFFICHE PARMS SELON NIVEAU
380 CLS:RESTORE 390:GOSUB 2090
390 DATA 13,1,2,NIVEAU,7,5,2,VOTRE SCORE MAXIMUN POURRA,5,7,2,ATTEINDRE,20,7,2,"POINTS PAR MOT.",8,10,2,"LE MOT DOIT COMPORTER :"
400 DATA 5,21,2,"JOUEUR SUIVANT :",2,23,2,PRESSEZ,10,23,1,ESPACE,17,23,2,POUR JOUER OU LETTRE,38,23,1,N,4,25,2,SI VOUS DESIREZ UN AUTRE NIVEAU,0,0,0,z
410 mp=(100*ms)
420 IF mp=1000 THEN w=14 ELSE w=15
430 LOCATE w,7:PEN 1:PRINT mp
440 IF mp<1000 THEN LOCATE 15,7:PEN 1:PRINT"0" 
450 LOCATE 26,1:PRINT j
460 IF j>3 THEN 520
470 mic=(6-b):mac=(6+b)
480 LOCATE 11,12:PEN 2:PRINT"MINIMUM";:PEN 1:PRINT mic
490 LOCATE 21,13:PEN 2:PRINT"LETTRES"
500 LOCATE 11,14:PRINT"MAXIMUM";:PEN 1:PRINT mac
510 GOTO 560
520 IF j=4 THEN y=15 ELSE y=13
530 LOCATE 7,y:PEN 1:PRINT"OBLIGATOIREMENT 6 LETTRES !"
540 IF j=4 THEN 560
550 LOCATE 7,16:PEN 3:PRINT"CHAQUE LETTRE NE PEUT ETRE":LOCATE 6,18:PRINT"UTILISEE QU'UNE SEULE FOIS !"
560 rp$=LEFT$(p$(js),17)
570 LOCATE 22,21:PEN 1:PRINT UPPER$(rp$)
580 GOSUB 2270
590 tj=0
600 CLEAR INPUT
610 an$=INKEY$
620 tj=tj+1:IF tj=10000 THEN tj=0
630 IF an$="" THEN 610
640 IF UPPER$(an$)="N" THEN 250
650 IF ASC(an$)<>32 THEN 600
660 GOSUB 1300
670 '-----ECRAN JEU
680 CLS:RESTORE 690
690 DATA 8,396,632,396,328,184,632,184,8,152,632,152,8,120,632,120,8,88,632,88,8,56,632,56,8,24,632,24,1,1,1,1
700 DATA 8,396,8,24,166,152,166,120,184,88,184,56,328,184,328,152,560,184,560,152,536,88,536,56,632,396,632,24,0,0,0,0
710 '-----DESSIN DU CADRE
720 READ xp,yp,xd,yd
730 IF xp=1 AND xd=1 THEN RESTORE 700:GOTO 760
740 PLOT xp,yp,2:DRAW xd,yd,2
750 GOTO 720
760 READ xp,yp,xd,yd
770 IF xp=0 THEN 830
780 FOR lv=0 TO 3
790 PLOT xp,yp,2:DRAW xd,yd,2
800 xp=(xp+lv):xd=(xd+lv)
810 NEXT
820 GOTO 760
830 GOSUB 2350
840 LOCATE 3,17:PEN 2:PRINT"TOUR";:PEN 1:PRINT ts
850 rp$=LEFT$(p$(js),12):LOCATE 23,15:PEN 1:PRINT UPPER$(rp$)
860 IF jk=2 THEN LOCATE 38,15:PEN 3:PRINT CHR$(224)
870 IF jk=5 THEN LOCATE 37,15:PEN 3:PRINT CHR$(224);" ";CHR$(224)
880 LOCATE 14,17:PEN 2:PRINT"TOTAL A ATTEINDRE :";:PEN 1:PRINT no
890 LOCATE 4,19:PEN 2:PRINT"ENTREZ VOTRE MOT, PUIS FAITES":LOCATE 34,19:PEN 1:PRINT"ENTER"
900 LOCATE 3,21:PEN 2:PRINT"NIVEAU";:PEN 1:PRINT j
910 '-----AFFICHAGE VALEURS LETTRES
920 x=3:y=2
930 FOR avl=1 TO 26
940 LOCATE x,y:PEN 2:PRINT CHR$(avl+64);" :";:PEN 1:PRINT vl(avl)
950 x=x+10
960 IF j>2 THEN IF x=33 THEN x=32
970 IF x>33 THEN x=3:y=y+2
980 NEXT
990 DATA 14,21,19,1,0
1000 RESTORE 990:GOSUB 2580
1010 IF te<1 THEN vm=0:GOTO 1040
1020 GOSUB 1500
1030 IF e>0 THEN 1000
1040 DI:z=REMAIN(0)
1050 CLS:GOSUB 1750
1060 tj=0
1070 CLEAR INPUT
1080 ps$=INKEY$
1090 tj=tj+1:IF tj=10000 THEN tj=0
1100 IF ps$="" THEN 1080
1110 IF ps$=CHR$(252) THEN 1070
1120 IF UPPER$(ps$)="F" THEN 1140
1130 IF ASC(ps$)=32 THEN 660 ELSE 1070
1140 '-----FIN DU JEU
1150 CLS:PEN 1:LOCATE 6,10:PRINT"ETES-VOUS CERTAIN(E) DE VOULOIR"
1160 LOCATE 13,15:PRINT"TERMINER LE JEU ?"
1170 LOCATE 17,20:PRINT"( O - N )"
1180 CLEAR INPUT
1190 f$=INKEY$:IF f$="" THEN 1190
1200 fin=ASC(UPPER$(f$))
1210 IF fin<78 OR fin>79 THEN 1190
1220 IF fin=78 THEN 660
1230 CLS:PEN 2:LOCATE 8,13:PRINT"... ALORS A BIENTOT !":END
1240 '-----INITIALISATION
1250 DATA 1,40,80,160,3,1,2,80,160,320,2,2,3,120,240,480,1,3,4,160,320,640,0,5,5,200,400,800,0,10
1260 RESTORE 1250
1270 READ n,mal,mir,mar,b,ms
1280 IF n=j THEN RETURN
1290 GOTO 1270
1300 '---TIRAGE LETTRES-CHIFFRE-JOKER
1310 te=60*mn:'--INITIALISATION CHRONO
1320 '-----LETTRES
1330 FOR z=1 TO j*40:fl(z)=0:NEXT
1340 FOR va=1 TO 26
1350 RANDOMIZE TIME
1360 vl(va)=INT(RND*(j*60))
1370 IF vl(va)<1 OR vl(va)>mal THEN 1360
1380 IF fl(vl(va))=1 THEN 1360
1390 fl(vl(va))=fl(vl(va))+1
1400 NEXT
1410 '-----CHIFFRE ALEATOIRE
1420 RANDOMIZE TIME
1430 no=INT(RND*1000)
1440 IF no<mir OR no>mar THEN 1420
1450 '-----JOKER
1460 jk=0
1470 IF tj/9=tjē 9 THEN jk=2
1480 IF tj/45=tjē 45 THEN jk=5
1490 RETURN
1500 '-----EXAMEN ET DECOMPTE DU MOT
1510 '--INIT.VALEUR DU MOT,TYPE D'ERREUR,FLAGS LETTRES DEJA UTILISEES.
1520 vm=0:e=0
1530 FOR zf=1 TO 26:f(zf)=0:NEXT
1540 mb$=UPPER$(s$)
1550 IF LEN(mb$)>15 THEN e=1:GOTO 1640
1560 IF ABS(LEN(mb$)-6)>b THEN e=2:GOTO 1640
1570 FOR dm=1 TO LEN(mb$)
1580 rc=(ASC(MID$(mb$,dm,1))-64)
1590 IF rc<1 OR rc>26 THEN e=3:GOTO 1640
1600 IF j<5 THEN 1620
1610 IF r(rc)=1 THEN e=4:GOTO 1640
1620 vm=vm+vl(rc):f(rc)=1
1630 NEXT
1640 IF e=0 THEN RETURN ELSE GOSUB 2220
1650 '--EFFACEMENT MOT EN CAS D'ERREUR
1660 LOCATE 14,21:PRINT STRING$(20," ")
1670 LOCATE 3,23:PRINT STRING$(37," ")
1680 ON e GOSUB 1710,1720,1730,1740 
1690 RETURN
1700 '-----MESSAGES D'ERREUR
1710 LOCATE 6,23:PRINT"VOUS ECRIVEZ VOS MEMOIRES ???":RETURN
1720 LOCATE 6,23:PRINT"NOMBRE DE LETTRES INCORRECT !":RETURN
1730 LOCATE 4,23:PRINT"SEULES LES LETTRES SONT AUTORISEES !":RETURN
1740 LOCATE 4,23:PRINT"PAS DE DOUBLES LETTRES AU NIVEAU 5 !":RETURN
1750 'TABLEAU SCORES
1760 '-----CALCULS
1770 d=(ABS(vm-no))-jk
1780 IF d<0 THEN d=0
1790 DATA 0,100,1,50,2,20,3,10,4,5,5,2,6,1
1800 IF d>6 THEN ds(js)=0:GOTO 1860
1810 RESTORE 1790
1820 READ dd,sd
1830 IF dd=d THEN s=sd:GOTO 1850
1840 GOTO 1820
1850 ds(js)=(s*ms)
1860 t(js)=t(js)+ds(js)
1870 '   ...ENFIN LES RESULTATS !
1880 LOCATE 2,10-nj:PEN 2:PRINT"J O U E U R"
1890 LOCATE 16,10-nj:PRINT"DERNIER SCORE"
1900 LOCATE 33,10-nj:PRINT"TOTAL"
1910 y=12-nj
1920 FOR rj=1 TO nj
1930 IF rj=js THEN PEN 3 ELSE PEN 2
1940 pp$=(LEFT$(p$(rj),11))
1950 LOCATE 2,y:PRINT UPPER$(pp$)
1960 LOCATE 19,y:PRINT ds(rj):LOCATE 33,y:PRINT t(rj)
1970 y=y+2
1980 NEXT
1990 IF ds(js)=0 THEN GOSUB 2550 ELSE GOSUB 2460
2000 js=js+1
2010 IF js>nj THEN js=1:ts=ts+1
2020 rp$=LEFT$(p$(js),17)
2030 LOCATE 5,y:PEN 2:PRINT"JOUEUR SUIVANT : ";:PEN 1:PRINT UPPER$(rp$)
2040 y=y+2
2050 LOCATE 2,y:PEN 2:PRINT"PRESSEZ";:PEN 1:LOCATE 10,y:PRINT"ESPACE";:LOCATE 17,y:PEN 2:PRINT"POUR JOUER OU LETTRE";:PEN 1:LOCATE 38,y:PRINT"F"
2060 y=y+2
2070 LOCATE 7,y:PEN 2:PRINT"SI VOUS DESIREZ FINIR LE JEU"
2080 RETURN
2090 '-----ECRANS
2100 READ x,y,k,tx$
2110 IF x=0 THEN RETURN
2120 LOCATE x,y:PEN k:PRINT tx$
2130 GOTO 2100
2140 'SON
2150 '-----INITIALISATION NOTES
2160 RESTORE 2170
2170 DATA 239,213,190,179,159,142,127,119,1
2180 FOR in=1 TO 9
2190 READ pe
2200 note(in)=pe
2210 NEXT
2220 '-----BRUITAGE refus mot
2230 FOR z=300 TO 1 STEP -5
2240 SOUND 1,z,1,15
2250 NEXT
2260 RETURN
2270 '-----PARAMETRES NIVEAU
2280 DATA 5,4,3,2,1,2,3,4,5,7,8
2290 RESTORE 2280
2300 FOR ln=1 TO 11
2310 READ in
2320 IF ln>8 THEN du=36 ELSE du=18
2330 SOUND 1,note(in),du,15
2340 NEXT:RETURN
2350 '-----ecran jeu
2360 DATA 5,3,2,1
2370 RESTORE 2360
2380 du=40
2390 FOR ln=1 TO 4
2400 READ in
2410 SOUND 1,note(in),du,15
2420 du=du+15
2430 NEXT
2440 RETURN
2450 '-----MUSIQUE SCORE
2460 DATA 1,2,3,5,8
2470 RESTORE 2460
2480 du=40
2490 FOR ln=1 TO 5
2500 READ in
2510 SOUND 1,note(in),du,15
2520 du=du+8
2530 NEXT:RETURN
2540 '-----BRUITAGE SCORE NUL
2550 FOR d=150 TO 400 STEP 2
2560 SOUND 1,d,1,15
2570 NEXT:RETURN
2580 '---SAISIE CLAVIER
2590 READ x,y,nc,cro,g:IF g=1 THEN READ vmi,vma
2600 xa=x:s$="":EI:LOCATE xa,y:PRINT CHR$(143)
2610 IF cro=1 THEN EVERY 50 GOSUB 2810
2620 '
2630 CLEAR INPUT
2640 c$=INKEY$
2650 IF cro=1 THEN IF te<1 THEN RETURN
2660 IF c$="" THEN 2640
2670 '
2680 IF ASC(c$)=16 OR ASC(c$)<13 OR ASC(c$)>127 THEN 2630
2690 IF c$=CHR$(13) THEN 2760
2700 IF c$=CHR$(127) THEN 2790
2710 IF g=1 THEN IF ASC(c$)<48 OR ASC(c$)>57 THEN 2630
2720 IF (LEN(s$)+1)>nc THEN 2630
2730 LOCATE xa,y:PRINT c$;CHR$(143)
2740 s$=s$+c$:xa=xa+1:GOTO 2630
2750 '
2760 IF s$="" THEN 2630
2770 IF g=1 THEN IF VAL(s$)<vmi OR VAL(s$)>vma THEN 2790
2780 LOCATE xa,y:PRINT" ":RETURN
2790 LOCATE x,y:PRINT STRING$((nc+1)," "):GOTO 2600
2800 'ROUTINE CHRONO
2810 te=te-1:IF te<1 THEN RETURN
2820 IF te=99 OR te=9 THEN LOCATE 35,21:PRINT"   "
2830 LOCATE 35,21:PRINT te;CHR$(7)
2840 RETURN
2850 cl$=CLS+CHR$(13)
2860 PRINT CL$
2870 END