10 REM  ****************************
20 REM  *                          *
30 REM  *  G R A P H O F R A N C E *
40 REM  *                          *
50 REM  *            par           *
60 REM  *                          *
70 REM  *      Patrick LEFEVRE     *
80 REM  *                          *
90 REM  *      Copyright 1986      *
100 REM *                          *
110 REM ****************************
120 '
130 REM ****************
140 REM  initialisation
150 REM ****************
160 '
170 SPEED KEY 10,0.5
180 CLEAR
190 'SYMBOL AFTER &F0
200 SYMBOL &FF,&3C,&66,&C3,&99,&99,&C3,&66,&3C
210 nq=10:' Nb de quesions posees. Peut-etre modifie jusqu'a 87 
220 DIM nv$(87),xv(87),yv(87),ess(nq)
230 INK 2,16,11
240 PAPER 0:BORDER 4
250 PEN 1
260 '
270 REM **************
280 REM  presentation
290 REM **************
300 '
310 GOSUB 2350
320 CALL &A000
330 LOCATE 17,4:PRINT"presente"
340 FOR I=0 TO 60:PLOT 260+I,210-j,3
350    DRAWR i-(1*i),60+(2*j):j=j+0.6
360 NEXT
370 j=0
380 FOR I=60 TO 0 STEP -1:PLOT 320+I,210-j
390    DRAWR i-(1*i),60+(2*j):j=j+0.6
400 NEXT
410 PEN 2:LOCATE 15,17:PRINT"GRAPHOFRANCE"
420 PEN 1:LOCATE 20,19:PRINT"OU"
430 LOCATE 5,21:PRINT"comment apprendre la geographie"
440 LOCATE 15,22:PRINT"en s'amusant."   
450 GOSUB 2560
460 LOCATE 8,25:PAPER 1:PEN 3:PRINT CHR$(24)"J"CHR$(24)"=>Jeu   "CHR$(24)"I"CHR$(24)"=>Instructions"
470 PAPER 0:PEN 1
480 x$=UPPER$(INKEY$):IF x$="" THEN 480 
490 IF x$="J" THEN GOSUB 810
500 IF x$="I" THEN GOSUB 540:GOTO 810
510 GOTO 480
520 '
530 REM ***************
540 REM  INSTRUCTIONS
550 REM ***************
560 '
570 MODE 2
580 LOCATE 34,5:PRINT"INSTRUCTIONS"
590 LOCATE 34,6:PRINT"============"
600 LOCATE 1,10:PRINT"  Ce jeu consiste a retrouver la position geographique d'une ville sur la carte"
610 PRINT"de  FRANCE.  Pour cela il suffit  de  deplacer un point a l'aide des fleches du"
620 PRINT"curseur ou du joystick  et  de  le positionner sur l'endroit presume. Confirmez"
630 PRINT"votre position en appuyant sur 'COPY' ou sur 'FEU'."
640 PRINT"Vous avez droit a un essai par question."
650 PRINT"Si vous tombez sur la ville ou en etes tres proche vous aurez 20/20." 
660 PRINT"Plus vous tomberez loin moins vous marquerez de points."
670 PRINT"Vous serez  questionne  sur";nq;"villes. Votre moyenne  s'affichera  au fur et a"
680 PRINT"mesure de vos reponses."  
690 PRINT"Et maintenant regardez bien la carte. Essayez d'identifier le maximum de villes"
700 PRINT"Lorsque vous en aurez assez appuyez sur une touche et  BONNE  CHANCE."
710 LOCATE 28,24:PRINT"< Appuyer sur une touche >"
720 CALL &BB18
730 MODE 2
740 orx=140:ory=10
750 GOSUB 1670
760 enc=1:GOSUB 1930
770 CALL &BB18
780 RETURN
790 '
800 REM *****
810 REM  jeu
820 REM *****
830 '
840 orx=270:ory=10:ques=1:nota=0
850 enc=0:GOSUB 1930:MODE 2
860 ' dessin des fenetres
870 ORIGIN 0,0
880 PLOT 0,0,1:DRAW 0,48
890 PLOT 0,53:DRAW 0,268
900 PLOT 0,272:DRAW 0,350
910 PLOT 0,355:DRAW 0,399
920 PLOT 252,0:DRAW 252,48
930 PLOT 252,53:DRAW 252,268
940 PLOT 252,272:DRAW 252,350
950 PLOT 252,355:DRAW 252,399
960 PLOT 257,0:DRAW 257,399
970 PLOT 639,0:DRAW 639,399
980 PLOT 0,0:DRAW 252,0
990 PLOT 0,48:DRAW 252,48
1000 PLOT 0,53:DRAW 252,53
1010 PLOT 257,0:DRAW 639,0
1020 PLOT 0,399:DRAW 252,399
1030 PLOT 257,399:DRAW 639,399
1040 PLOT 0,355:DRAW 252,355
1050 PLOT 0,350:DRAW 252,350
1060 PLOT 0,272:DRAW 252,272
1070 PLOT 0,268:DRAW 252,268
1080 GOSUB 1670
1090 ' presentation
1100 WINDOW #1,34,79,2,24:WINDOW #0,2,31,2,24:WINDOW #2,2,31,10,21
1110 LOCATE 8,1:PRINT CHR$(24)" GRAPHOFRANCE "CHR$(24)
1120 LOCATE 5,4:PRINT "Pouvez vous situer...."
1130 LOCATE 4,23:PRINT CHR$(24)" Q U E S T I O N     1 "CHR$(24)
1140 ' tirage au sort ville
1150 RANDOMIZE TIME:sort=INT(RND*87)
1160 ess(ques)=sort
1170 FOR i=1 TO ques-1
1180    IF sort=ess(i) THEN 1150
1190 NEXT
1200 ' pose question
1210 CLS #2
1220 LOCATE 1,6:PRINT STRING$(27,32)
1230 LOCATE INT(27-LEN(nv$(sort)))/2,6:PRINT nv$(sort);" ?"
1240 GOSUB 2170
1250 PEN #1,0:PRINT #1,REMAIN(1)
1260 ' traitement reponse
1270 ORIGIN 0+orx,0+ory
1280 xt=xv(sort)*3:yt=yv(sort)*3
1290 dis=SQR((xt-xcur)^2+(yt-ycur)^2)*2.73
1300 LOCATE #2,1,3
1310 IF dis<6 THEN PRINT#2,"          EXCELLENT":GOTO 1440
1320 IF dis<11 THEN PRINT#2,"          TRES BIEN":GOTO 1440
1330 IF dis<21 THEN PRINT #2,"            BRAVO":GOTO 1440
1340 IF dis<30 THEN PRINT #2,"             BIEN":GOTO 1440
1350 IF dis<40 THEN PRINT #2,"           PAS MAL":GOTO 1440
1360 IF dis<50 THEN PRINT #2,"          JUSTE BON":GOTO 1440
1370 IF dis<60 THEN PRINT #2,"UN PEU DE CONCENTRATION QUOI !":GOTO 1440
1380 IF dis<80 THEN PRINT #2,"    CE POURRAIT ETRE MIEUX":GOTO 1440
1390 IF dis<120 THEN PRINT #2,"       PLUTOT MOYEN NON !":GOTO 1440
1400 IF dis<160 THEN PRINT #2,"     VOUS DEVEZ CONFONDRE":GOTO 1440
1410 IF dis<240 THEN PRINT #2,"NE REPONDEZ PAS N'IMPORTE QUOI":GOTO 1440
1420 IF dis<320 THEN PRINT #2,"SI  VOUS VOUS  MOQUEZ  DE  MOI        J'ARRETE TOUT":GOTO 1440
1430 PRINT#2,"VOUS  ETES  SUR  QUE  C'EST EN           FRANCE"
1440 LOCATE #2,7-LEN(STR$(INT(dis))),6:PRINT#2,"Vous etes a";INT(dis);"kilometres"
1450 IF dis>400 THEN dis=400
1460 note=CINT((400-dis)/20)
1470 LOCATE #2,8,8:PRINT #2,"Votre note ";:PRINT #2,USING"##";note;:PRINT #2,"/20"
1480 nota=nota+note:moy=nota/ques 
1490 LOCATE 6,1:PRINT "Votre moyenne ";:PRINT USING"##";moy;:PRINT "/20"
1500 ques=ques+1
1510 PLOT xt-1,yt:DRAW xt+1,yt:PLOT xt,yt-2:DRAW xt,yt+2
1520 LOCATE #2,5,12:PRINT #2,"< Appuyer sur espace >"
1530 IF INKEY(47)=0 THEN 1550
1540 GOTO 1530
1550 LOCATE 1,6:PRINT STRING$(27,32):CLS #2
1560 IF ques<nq+1 THEN LOCATE 24,23:PRINT CHR$(24);USING"##";ques;:PRINT CHR$(24);:CLS #1:GOSUB 1670:GOTO 1150
1570 LOCATE 1,4:PRINT STRING$(27,32)
1580 LOCATE 1,6:PRINT STRING$(27,32)
1590 LOCATE 10,4:PRINT"C'est fini"
1600 LOCATE 7,6:PRINT"Une autre (O/N) ?"
1610 rep$=UPPER$(INKEY$):IF rep$="" THEN 1610
1620 IF rep$="O" THEN GOTO 820
1630 IF rep$="N" THEN INK 1,24:PEN 1:MODE 2:END
1640 GOTO 1610
1650 '
1660 REM *******************
1670 REM  trace de la carte
1680 REM *******************
1690 '
1700 '  pourtour
1710 '
1720 RESTORE 2720:z=0
1730 READ a,b
1740 IF a=&FF THEN 1800
1750 a=a*3:b=b*3
1760 IF z=0 THEN ORIGIN a+orx,b+ory:z=1:GOTO 1730
1770 DRAWR a,b
1780 GOTO 1730
1790 '
1800 '  fleuves
1810 '
1820 RESTORE 2940:z=0
1830 READ a,b
1840 IF a=&FF AND b=&FF THEN 1900
1850 IF a=&FF THEN z=0:GOTO 1830
1860 a=a*3:b=b*3
1870 IF z=0 THEN MOVE a,b:z=1: GOTO 1830
1880 DRAWR a,b
1890 GOTO 1830
1900 RETURN
1910 '
1920 REM ********************
1930 REM  dessins des villes
1940 REM ********************
1950 '
1960 IF enc=1 THEN 2050
1970 MODE 2:LOCATE 24,12:PRINT"QUELQUES SECONDES DE PATIENCE...." 
1980 TAG
1990 MOVE 0,64:DRAW 639,64
2000 FOR i=0 TO 650 STEP 2
2010    MOVE i,80
2020    PRINT " "CHR$(250);
2030 NEXT
2040 TAGOFF
2050 ORIGIN 0+orx,0+ory
2060 RESTORE 3060
2070 FOR i=0 TO 86
2080    READ xv(i),yv(i),nv$(i)
2090    x=xv(i)*3:y=yv(i)*3
2100    IF enc=0 THEN 2130
2110    PLOT x-1,y,enc:DRAW x+1,y
2120    PLOT x,y-2:DRAW x,y+2
2130 NEXT
2140 RETURN
2150 '
2160 REM **********************
2170 REM  deplacement du point    
2180 REM **********************
2190 '
2200 EVERY 50,1 GOSUB 2520
2210 EVERY 50,1 GOSUB 2530
2220 ORIGIN 0+orx,0+ory:xcur=200:ycur=200
2230 IF INKEY(8)=0 OR INKEY(74)=0 THEN xcur=xcur-1
2240 IF INKEY(1)=0 OR INKEY(75)=0 THEN xcur=xcur+1
2250 IF INKEY(2)=0 OR INKEY(73)=0 THEN ycur=ycur-1
2260 IF INKEY(0)=0 OR INKEY(72)=0 THEN ycur=ycur+1
2270 IF INKEY(9)=0 OR INKEY(76)=0 THEN 2320
2280 PLOT xcur-2,ycur-1,0:DRAW xcur+2,ycur-1
2290 PLOT xcur+2,ycur+1,0:DRAW xcur-2,ycur+1
2300 PLOT xcur-1,ycur,1:DRAW xcur+1,ycur
2310 GOTO 2230
2320 PRINT CHR$(7):RETURN
2330 '
2340 REM ******************
2350 REM  ecriture message
2360 REM ******************
2370 '
2380 RESTORE 3290
2390 FOR i=&A000 TO &A033
2400    READ a$
2410    a=VAL("&"+a$)
2420    tot=tot+a
2430    POKE i,a
2440 NEXT i
2450 IF tot<>&1178 THEN MODE 2:LOCATE 1,10:PRINT "Verifiez les DATAs de la routine L.M. Il y a une erreur.":PRINT:LIST 3250-3350
2460 RETURN
2470 '
2480 REM *********
2490 REM  tic-tac
2500 REM *********
2510 '
2520 SOUND 1,500,2,15:RETURN
2530 SOUND 1,2000,2,15:RETURN
2540 '
2550 REM *********
2560 REM  musique
2570 REM *********
2580 '
2590 RESTORE 3410
2600 READ r,s
2610 IF r=-1 THEN RETURN
2620 SOUND 1,r,s*0.5
2630 SOUND 2,0.5*r,s*0.5
2640 SOUND 4,0.25*r,s*0.5
2650 GOTO 2600
2660 '
2670 REM ***********************
2680 REM  DATAs pourtour FRANCE
2690 REM ***********************
2700 '
2710 '                          PRADES-MONACO
2720 DATA 66,0,2,0,3,1,1.5,-0.5,0,2,-1,1.5,1,1.5,-1,2,1,2,1,1.5,2,1.5,1,0,4,2.5,2,1.5,1,-1,4,0,1.5,-1.5,3,0,1,.5,1,-0.5,2,0,0,-1,2,-1,0,1,1.5,-1,1.5,0,0.5,1,1,0,0,-1,1.5,1,0,1,2.5,1.5,1,2,0,1,2,2.5,1.5,0,1.5,2,0,1,1,0,0,0.5,2,1
2730 '                          MONACO-BESANCON
2740 DATA 0,2,-6,-0.5,-1,1.5,-1,1,0,3,0.5,1,0.5,0.5,-1,2,-2,0.5,-0.5,3,1,2,1.5,0.5,0.5,-0.5,1,1,0,1.5,-1,2,-0.5,0,-0.5,2,-1.5,0,1.5,3,0,1,-1.5,0.5,-0.5,4.5,-2,0.5,-3,-1.5,0,-1,-1,-1,-1,-0.5,-1,0.5,0,1,1.5,0.5,0,3.5,3,3,0,2,1,0,2.5,2,1.5,2  
2750 '                          BESANCON-VERVINS
2760 DATA 0,1,-0.5,1,2,2,1,-1,1,1,1.5,0.5,1,1.5,-1,2,0.5,1,-0.5,2,0.5,4.5,1,1.5,0,1.5,2,2.5,2,3,0,3,-3,-1,-1,0.5,-2,-0.5,-2,1,-1,-1,-1,0,-2.5,2,-1.5,-1,-2,2,0,1.5,-1,0.5,-4,0,-1,1,-4,-1,-4.5,3,0,1,0.5,0.5,-2,1.5,1,2,-0.5,0.5,-2.5,-2.5,-4,0 
2770 '                          VERVINS-LE HAVRE
2780 DATA 0.5,1.5,-0.5,0.5,0,1,-1,1.5,-0.5,-0.5,-1,0.5,-1,-0.5,0,2,-2,1.5,-1,-0.5,-1,1.5,0,2.5,-1,0,-1,-1,-1.5,0,-0.5,1,-1,0,0.5,1.5,-2,2,-5,-1.5,-3,-1.5,-0.5,-7.5,0.5,-1,-1.5,-0.5,-1.5,-2.5,-5,-1.5,-5,-2.5,-1,-2,0,-0.5,1.5,0,0.5,-0.5
2790 '                          LE HAVRE-MORLAIX
2800 DATA -4.5,-3,-2,0,-2,0.5,-1,-0.5,-3,1,-1,-1,-1,2,-0.5,0.5,0.5,0.5,0,1,-1,1,-2,-0.5,-2,0.5,-1,0,1,-1,0,-2,2,-4,0,-6.5,1.5,-1.5,-2.5,0,-1,-0.5,-1,1,-1,0,-1.5,-1,-0.5,1,-4,-2,-3,5,-2,0,-1.5,-0.5,-1,0.5,-0.5,-0.5,0,-1.5,-0.5,0.5,-0.5,0.5,-1.5,-0.5
2810 '                          MORLAIX-LORIENT
2820 DATA -0.5,-0.5,-1,1,-1.5,0,-0.5,-0.5,-0.5,0.5,-4,-2,0,-2,1,-0.5,2.5,0.5,1,-0.5,1,-1,-3,0,0,0.5,0,-0.5,-0.5,0,0.5,0,0,-1.5,0.5,0.5,1.5,-0.5,-0.5,-0.5,-3.5,0,0,-0.5,2,-0.5,1,-2,-0.5,-1,1.5,0,0.5,1,0.5,0,1,-0.5,1,0.5,0.5,-1,3.5,-1,3,-2,1,-2
2830 '                          LORIENT-ROCHEFORT
2840 DATA 0.5,1.5,1.5,0.5,0.5,-0.5,-0.5,-0.5,-0.5,0,0.5,-0.5,2.5,0,1,-0.5,-0.5,-0.5,0,-2,2,-0.5,1,0.5,3,-1,-1.5,0.5,-1.5,-1.5,1.5,-0.5,0,-0.5,-1,-2,3,-3,0,-2,0.5,-0.5,2,-1,0,-0.5,2,0,1,-1,0,-2,1,-0.5,0,-1.5,-0.5,0,0,-1,-0.5,-0.5,0,-0.75,-1,0.25,0,-1.5
2850 '                          ROCHEFORT-ARGELES
2860 DATA 2,0,3,-4,1,-6,-1,4,-1,2,-1.5,1,-0.5,1,-1,-1,0,-2,-1,-2,0,-5,-0.5,-2,1.5,1,1,-1,-1,-1,-0.5,0.5,-1,-0.5,-0.5,-1,-1,-5,-0.5,-4,-1,-4,-1,-2,-1,-1,-1.5,-0.5,1.5,-2,3,0,0,-1.5,-1,-0.5,1,-1,1,0.5,0.5,-0.5,2,0,1,-1,2,0,0,-1,2,-1,1,0.5,2,-0.5
2870 '                          ARGELES-PRADES
2880 DATA 0,-1,1,0,2,-0.5,1.5,0.5,0.5,-0.5,4,0,0,2,2,-0.5,0,-0.5,5,-1,0,-1,3,0,2,-2,0,-0.5,2,0,2,0.5,2,-1.5,&ff
2890 '
2900 REM ***************
2910 REM  DATAs fleuves
2920 REM ***************
2930 '                               SEINE
2940 DATA -19.5,101.5,1,0,1,0.5,0,-0.5,1,1,0,0.5,0.5,0,0,-2.5,1,1,1,0,0,-1,1.5,-1.5,0,0.5,0.5,0,0,-1,1,0,1,0.5,-0.5,-1,3,-2.5,1,0.5,0.5,-0.5,2,0.5,0,-2,1,1,-1,-2,2,0.33,0,-3,2.5,-1,0,-1,1,0,0,0.5,3,0,5,1.5,2,0,0.5,-2,4,-4,3,-7,0.5,-4,&ff,0 
2950 '                               LOIRE
2960 DATA -41,69,4,-1.5,4,2,5,0,2,0.5,2,-2.3,1.5,-0.3,3,0.3,2,1,2,0,6,2,5,4,8,-5,0,-2,1,-2,0,-3.5,2,-0.5,2.5,-1,1.5,-2,0.5,-1,2,0,2,-6,-1,-1,0,-2.5,2,-3,0,-4,-1,-1,-1,0,0,-4,2,-1,1,1,&ff,0
2970 '                              GARONNE
2980 DATA -29.5,37.5,0.5,-2,1,-1,1,-2,2,0,1,-2,1,0,1,-2,2,-1,1,-1,4,-1,3,-6,0,-3,-2,-3,-3,-1,-3,-1,1,-2.5,0,-1,1,-0.5,&ff,0
2990 '                               RHONE
3000 DATA 32,55.5,-1.3,-1.5,0,-5,-2,-2,-2,2.5,-2.5,-1,-0.5,-4,0,-4,1,-4,-1.5,-10,0.5,-1.5,1,-.5,0,-2,-2,-0.5,0,-3,3,-4,-2,0,1,2,&FF,&FF
3010 '
3020 REM **************
3030 REM  DATAs villes
3040 REM **************
3050 '
3060 DATA 65,93,PARIS,41,97.5,CAEN,92.5,54,BOURG-EN-BRESSE,116,92,STRASBOURG,36,37,BORDEAUX
3070 DATA 96,15.5,MARSEILLE,80,17.5,MONPELLIER,18,86,SAINT-BRIEUC,88,56,MACON,32.5,95.5,SAINT-LO
3080 DATA 25,70,NANTES,96,62,LONS-LE-SAUNIER,32.5,54,LA ROCHELLE,99,70,BESANCON,90,70,DIJON
3090 DATA 36,22,MONT-DE-MARSAN,37,14,PAU,43,12.5,TARBES,47,18,AUCH,58,7.5,FOIX
3100 DATA 66,11.5,CARCASSONNE,70.5,4,PERPIGNAN,67.5,112.5,ARRAS,75.5,104,LAON,71,118.5,LILLE
3110 DATA 53,102,ROUEN,61.5,101,BEAUVAIS,53.5,94.5,EVREUX,44,48.5,ANGOULEME,82.5,94.5,CHALON SUR MARNE
3120 DATA 100,97,METZ,99.5,91.5,NANCY,111,84,COLMAR,5,81,QUIMPER,28,81.5,RENNES
3130 DATA 36,81,LAVAL,45.5,80,LE MANS,44,86,ALENCON,68,87.5,MELUN,38,72.5,ANGERS
3140 DATA 48.5,68,TOURS,100,76.5,VESOUL,56.5,86,CHARTRES,90.5,91.5,BAR-LE-DUC,17,76,VANNES
3150 DATA 76.5,76.5,AUXERRE,90.5,82,CHAUMONT,112,22.5,NICE,38,57,NIORT,45.5,60,POITIERS
3160 DATA 29,60,LA ROCHE SUR YON,65,63,BOURGES,72,62.5,NEVERS,73.5,57,MOULINS,58.5,59.5,CHATEAUROUX
3170 DATA 61,76,ORLEANS,55,71.5,BLOIS,46.5,28,AGEN,56,29.5,CAHORS,64,21.5,ALBI
3180 DATA 68,28,RODEZ,66,37,AURILLAC,59.5,41,TULLE,54,49.5,LIMOGES,49,40,PERIGUEUX
3190 DATA 71.5,46.5,CLERMONT-FERRAND,84,42,SAINT-ETIENNE,89,48,LYON,101,50,ANNECY,99.5,46,CHAMBERY
3200 DATA 98,40.5,GRENOBLE,102,31,GAP,104,26,DIGNE,86,21,NIMES,91,22.5,AVIGNON  
3210 DATA 77,31,MENDE,80,38,LE PUY,87,34,PRIVAS,92,36,VALENCE,102,14,TOULON
3220 DATA 55,18.5,TOULOUSE,86,105,CHARLEVILLE-MEZIERES,63,107,AMIENS,60,53,GUERET,80,86,TROYES
3230 DATA 107,76,BELFORT,102,84,EPINAL
3240 '
3250 REM *************************
3260 REM  DATAs pour routine L.M.
3270 REM *************************
3280 '
3290 DATA 3E,01,CD,0E,BC,CD,14,BC
3300 DATA 21,15,A0,06,1F,7E,CD,5A
3310 DATA BB,23,10,F9,C9,20,20,20
3320 DATA 20,20,20,20,20,20,FF,20
3330 DATA 20,50,61,74,72,69,63,6B
3340 DATA 20,20,4C,45,46,45,56,52
3350 DATA 45,20,20,FF
3360 '
3370 REM ***************
3380 REM  DATAs musique
3390 REM ***************
3400 '
3410 DATA 478,050,379,050,358,050,319,200,000,005,319,050
3420 DATA 478,050,379,050,358,050,319,200,000,005,319,100
3430 DATA 478,050,379,050,358,050,319,100,379,100,478,100
3440 DATA 379,100,426,200,000,005,426,050,379,050,000,005
3450 DATA 379,050,426,050,478,150,000,005,478,050,379,100
3460 DATA 319,100,000,005,319,050,358,150,000,005,358,100
3470 DATA 379,050,358,050,319,100,379,100,478,100,426,100
3480 DATA 478,200,000,005,478,050,000,005,000,005,-01,001