10 CLEAR 200,&"6FFF":DIM A(18,11)
20 INIT 0,0:GOSUB 1610
30 IF PEEK(&"7000")<>62 THEN CLOAD "CODE"
40 HI=0:KE=2:T=1
50 LE=1:V=3:S=0:GOSUB 860:INIT 0,0
60 TX 3,0,0:CURSORX 1:CURSORY 22:PRINT"SCORE";:CURSORX 12:PRINT"VIES";:ET 6,0,0
70 FOR I=1 TO 3:CURSORX 16+I:PRINT CHR$(52);:NEXT I:CURSORX 21:TX 3,0,0:PRINT"FRUITS";
80 CURSORX 31:PRINT"NIVEAU";
90 R=0:CH=0:STORE
100 LV=&"7005"+(T-1)*187
110 B=PEEK(LV):C=PEEK(LV+1):D=PEEK(LV+2):E=PEEK(LV+3):F=PEEK(LV+4)
120 G=PEEK(LV+5):P=PEEK(LV+6)
130 POKE &"7001",T:CALL &"7000"
140 GOSUB 1600:CURSORX 38:PRINT CHR$(64+T);
150 X=B:Y=C:CURSORX X*2:CURSORY Y*2-1:EG 6,0,0:PRINT A$
160 DISPLAY 2

rem
rem le papillon ecrase l'herbe sur sa position de depart
rem

170 A(X,Y)=A(X,Y) AND 1
180 A=STICKY(KE):IF A=255 THEN DY=-1:DX=0:IF Y>1 THEN 250
190 IF A=1 THEN DY=1:DX=0:IF Y<10 THEN 250
200 A=STICKX(KE):IF A=255 THEN DY=0:DX=-1:IF X>1 THEN 250
210 IF A=1 THEN DY=0:DX=1:IF X<18 THEN 250
220 A=KEY(0):IF A=115 THEN 560
230 IF A=97 THEN 50
240 GOTO 180
250 A=A(X+DX,Y+DY):IF A=4 OR A=6 THEN 180
260 IF A=5 THEN A(X+DX,Y+DY)=1:P=P-1:S=S+10:GOSUB 1600

rem
rem On se deplace vers un rocher
rem

270 IF (A=2 OR A=8) AND DY<>0 THEN 180
280 IF A=2 OR A=8 THEN 510

rem
rem Affichage du papillon
rem

290 IF A(X,Y)>0 THEN EG D,0,0
300 IF A(X,Y)=0 THEN EG 0,0,0
310 CURSORX X*2:CURSORY Y*2-1:PRINT F$;:X2=X:Y2=Y:X=X+DX:Y=Y+DY:A(X,Y)=A(X,Y) AND 1
320 EG 6,0,0:CURSORX X*2:CURSORY Y*2-1:PRINT A$;

rem
rem Si on a mange tout les fruits, on passe au niveau suivant
rem

330 IF P=0 THEN FOR I=1 TO 250:NEXT I:GOTO 640

rem
rem gestion de la chute du papillon (pas de rocher au dessus)
rem

340 IF A=0 THEN GOSUB 730:GOTO 400

rem
rem Gestion du rocher pousse. Si il est pousse sur une case noire
rem il tombe.

350 IF R=0 THEN 400
360 X1=X+DX:Y1=Y:A(X1,Y1)=B:GOSUB 760
370 IF A(X1,Y1)=0 THEN A(X1,Y1)=8:GOTO 390
380 A(X1,Y1)=2
390 R=0

rem
rem Les rochers tombent sur l'ancienne position du papillon ?
rem

400 X1=X2:IF Y2=1 THEN 180
410 I=1
420 Y1=Y2-I:C=A(X1,Y1):IF C=2 OR C=8 THEN 440
430 GOTO 500
440 IF C=8 THEN A(X1,Y1)=0:GOTO 460
450 A(X1,Y1)=1
460 GOSUB 760:IF K=1 THEN K=0:GOTO 600
470 IF A(X1,Y1)=0 THEN A(X1,Y1)=8:GOTO 490
480 A(X1,Y1)=2
490 I=I+1:GOTO 420

rem
rem Fin des tests, on revient au test du clavier
rem

500 GOTO 180

rem
rem Il y a un rocher a gauche ou a droite.
rem peut-on le deplacer ?
rem

510 X3=X+DX+DX:IF X3<1 OR X3>18 THEN 180
520 B=A(X3,Y):IF B>1 THEN 180
530 R=1:IF A(X+DX,Y)=8 THEN A(X+DX,Y)=0:GOTO 550
540 A(X+DX,Y)=1
550 CURSORX X3*2:CURSORY Y*2-1:EG F,0,0:PRINT C$;:GOTO 290

rem
rem Suicide
rem

560 EG 0,D,0:IF A(X,Y)=0 THEN EG 7,0,0
570 CURSORX X*2:CURSORY Y*2-1:PRINT D$;
580 FOR I=1 TO 200:NEXT I
590 PLAY "T70O2C5R2D+5R2D5R2A+5R2C"

rem
rem Boum, on est mort
rem

600 V=V-1:TX 7,0,0:CURSORX 17+V:CURSORY 22:PRINT" ";
610 FOR I=1 TO 1000:NEXT I
620 P=0:IF V=0 THEN 710
630 GOTO 90

rem
rem Changement de tableau et fin du jeu si gagne !
rem 

640 PLAY "T20O2CG6R2O3C6R2O2GR2FEDR2C20":T=T+1:IF T=17 THEN T=1
650 LE=LE+1:IF LE<17 THEN 90
660 GOTO 1510
670 IF HI<S THEN HI=S:CURSORX 0:CURSORY 12:DELIM 3,3,0:PRINT" Vous avez battu le meilleur score !!!";
680 FOR I=1 TO 500:NEXT I:IF HI>S THEN PLAY "T17O2CGEDEGO3CDEDCO2GC40"
690 IF HI=S THEN PLAY "T15O2CGO3CO2GO3DO2GO3E20C40"
700 FOR I=1 TO 3000:NEXT I:GOTO 50

rem
rem On a perdu !
rem 

710 CURSORX 0:CURSORY 11:DELIM 3,3,0:TX 0,0,0:PRINT" Vous avez perdu.. Ainsi va la vie !!!";
720 GOTO 670

rem
rem Affichage du papillon qui tombe dans un trou
rem

730 IF Y=10 OR A(X,Y+1)>0 THEN RETURN
740 EG 0,0,0:CURSORX X*2:CURSORY Y*2-1:PRINT F$;:Y=Y+1
750 EG 6,0,0:CURSORX X*2:CURSORY Y*2-1:PRINT A$;:SOUND 100+Y*10,1,1:GOTO 730

rem
rem Affichage d'une pierre qui tombe avec test chute sur papillon
rem

760 X3=X1*2
770 IF Y1=10 OR A(X1,Y1+1)>1 THEN 820
780 EG A(X1,Y1)*D,0,0:CURSORX X3:CURSORY Y1*2-1:PRINT F$;
790 Y1=Y1+1:EG F,0,0:CURSORX X3:CURSORY Y1*2-1:PRINT C$;
800 IF X1=X AND Y1=Y THEN K=1:FOR I=1 TO 10:SOUND 100-I*10,I/4,12:NEXT I:RETURN
810 GOTO 770
820 IF A(X1,Y1+1)=6 THEN IF Y1<10 THEN A(X1,Y1+1)=5:GOTO 840
830 RETURN
840 EG E,D,0:CURSORX X3:CURSORY Y1*2+1:PRINT B$;
850 SOUND 9,2,120:RETURN

rem
rem Menu general
rem

860 INIT 0,0:TX 1,3,0:CURSORX 13:CURSORY 2:PRINT"MMAACCHHAAOONN"
870 CURSORX 13:CURSORY 3:PRINT"MMAACCHHAAOONN"
880 TX 2,0,0:CURSORX 10:CURSORY 5:PRINT"Par Herv";CHR$(18);" Monchatre"
890 TX 2,0,0:CURSORX 6:CURSORY 6:PRINT"Version VG5000  GPA (c) 2012"
900 GOSUB 1090
910 TX 2,0,0:CURSORX 10:CURSORY 12:PRINT"Highscore"
920 TX 7,0,0:CURSORX 20:CURSORY 12:PRINT HI
930 TX 2,0,0:CURSORX 10:CURSORY 14:PRINT"Niveau de d";CHR$(18);"part"
940 TX 2,0,0:CURSORX 10:CURSORY 16:PRINT"Contr";CHR$(26);"les :";
950 IF KE=2 THEN PRINT "Clavier  "
960 IF KE=1 THEN PRINT "Manette 1"
970 TX 6,0,0:CURSORX 7:CURSORY 20:PRINT"<A> ";CHR$(23);" <P> Choix du niveau"
980 CURSORX 6:CURSORY 21:PRINT"<0> Clavier ou <1> Manette 1"
990 CURSORX 9:CURSORY 22:TX 3,0,0:PRINT"< = >";:TX 6,0,0:PRINT" Les explications"
1000 CURSORX 9:CURSORY 23:TX 6,0,0:PRINT"<Entr"+CHR$(18);"e> Lancer le jeu"
1010 TX 3,0,0:CURSORX 27:CURSORY 14:PRINT CHR$(64+T)
1020 A=ACTION(1):IF A=1 THEN RETURN
1025 A=KEY(0):IF A=13 THEN RETURN
1030 IF A=48 THEN KE=2:GOTO 940
1040 IF A=49 THEN KE=1:GOTO 940
1050 IF A=61 THEN 1110
1060 A=A AND 223:IF A>64 AND A<81 THEN GOSUB 1080:GOTO 1010
1070 GOTO 1020
1080 STORE:CURSORX 2+T*2:CURSORY 9:EG 0,0,0:PRINT F$;:T=A-64
1090 A=T AND 7:IF A=0 THEN A=A+1
1100 CURSORX 2+T*2:CURSORY 9:EG A,0,0:PRINT A$;:DISPLAY 2:RETURN

rem
rem page 1 notice
rem

1110 INIT 0,0:TX 2,0,0:STORE:CURSORX 1:CURSORY 3
1120 PRINT"Vous contr";CHR$(26);"lez un papillon dont la faim";
1130 PRINT"le pousse ";CHR$(23);" braver mille dangers pour"
1140 PRINT"se d";CHR$(18);"lecter de fruits m";CHR$(22);"rs. S'il n'est"
1150 PRINT"pas poursuivi par des pr";CHR$(18);"dateurs, il"
1160 PRINT"doit se m";CHR$(18);"fier des roches instables,"
1170 PRINT"trous et autres obstacles sur le sol"
1180 PRINT"o";CHR$(19);" se trouve son repas.":PRINT:TX 6,0,0
1190 PRINT TAB(3);"D";CHR$(18);"placement : touches fl";CHR$(25);"ch";CHR$(18);"es"
1200 PRINT TAB(17);"ou manette 0"
1210 PRINT TAB(3);"Suicide     : <S>":PRINT TAB(3);"Abandonner  : <A>"
1220 PRINT:TX 2,0,0
1230 PRINT"Tous les tableaux sont faisables, un"
1240 PRINT"peu de r";CHR$(18);"flexion et d'astuce vous"
1250 PRINT"permettront de battre le meilleur"
1260 PRINT"score et devenir ainsi le plus beau"
1270 PRINT"machaon du printemps !"
1280 PRINT:TX 6,0,0
1290 PRINT TAB(8);"<Espace> pour continuer.":DISPLAY 2
1300 A=KEY(0):IF A=32 THEN 1320
1310 GOTO 1300

rem
rem page 2 notice
rem

1320 INIT 0,0:EG 6,0,0:STORE:CURSORX 1:CURSORY 2:PRINT A$;
1330 EG 1,2,0:CURSORX 1:CURSORY 5:PRINT B$;:EG 0,0,0:CURSORX 3:CURSORY 5:PRINT F$;
1340 EG 7,0,0:CURSORX 1:CURSORY 8:PRINT C$;
1350 EG 1,2,0:CURSORX 1:CURSORY 11:PRINT E$;:EG 0,0,0:CURSORX 3:CURSORY 11:PRINT F$;
1360 EG 2,0,0:CURSORX 1:CURSORY 14:PRINT F$;
1370 EG 1,0,0:CURSORX 1:CURSORY 17:PRINT G$;
1380 TX 2,0,0:CURSORX 4:CURSORY 2:PRINT "- un papillon vorace"
1390 CURSORX 4:CURSORY 5:PRINT "- des fruits ";CHR$(23);" manger"
1400 CURSORX 4:CURSORY 8:PRINT "- des blocs de pierre : on peut"
1410 CURSORX 6:CURSORY 9:PRINT "parfois les bouger"
1420 CURSORX 4:CURSORY 11:PRINT "- l'herbe, maintient les blocs"
1430 CURSORX 6:CURSORY 12:PRINT "tant qu'elle n'est pas coup";CHR$(18);"e"
1440 CURSORX 4:CURSORY 14:PRINT "- l'herbe coup";CHR$(18);"e"
1450 CURSORX 4:CURSORY 17:PRINT "- des murs : ils ne peuvent pas"
1460 CURSORX 6:CURSORY 18:PRINT CHR$(27);"tre d";CHR$(18);"plac";CHR$(18);"s"
1470 PRINT:PRINT:TX 6,0,0
1480 PRINT TAB(5);"<Espace> pour revenir au menu":DISPLAY 2
1490 A=KEY(0):IF A=32 THEN 860
1500 GOTO 1490

rem
rem On a fait tous les niveaux !
rem

1510 INIT 0,0:TX 1,3,0:CURSORX 12:CURSORY 5:PRINT"BBRRAAVVOO!!!!"
1520 CURSORX 12:CURSORY 6:PRINT"BBRRAAVVOO!!!!":PRINT:PRINT
1530 TX 2,0,0:PRINT"Vous avez r";CHR$(18);"ssi ";CHR$(23);" finir tous les ta-"
1540 PRINT"bleaux du jeu, ce qui est une prouesse"
1550 PRINT"que seul un papillon d'";CHR$(18);"lite pouvait"
1560 PRINT"accomplir !":PLAY "T19O2CEGO3CO2GEO3DECO2GFGEDEGC4E4G4O3C60"
1570 CURSORX 8:CURSORY 16:PRINT"Votre score final : ";:TX 6,0,0:PRINT S
1580 A=KEY(0):IF A=32 THEN 50
1590 GOTO 1580

rem
rem Affichage score et niveau
rem

1600 TX 7,0,0:CURSORX 27:CURSORY 22:PRINT P;" ":CURSORX 6:CURSORY 22:PRINT S;:RETURN

rem
rem Redefinition des caracteres utilises par le jeu
rem

1610 SETEG 32,"00003854AAD6AAD56A3F"
1620 SETEG 33,"00001C2A556B55AB56FC"
1630 SETEG 34,"033F6BD5ABD5AB7D0000"
1640 SETEG 35,"C0FCF4ABD5ABD5BE0000"
1650 A$=CHR$(32)+CHR$(33)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(34)+CHR$(35)
1660 SETEG 36,"CC003300C71F3873F77F"
1670 SETEG 37,"CC003300E4F8FDFEFEFE"
1680 SETEG 38,"7F7FFF7F3F1FC7003300"
1690 SETEG 39,"FFFEFEFEFDF8E4003300"
1700 B$=CHR$(36)+CHR$(37)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(38)+CHR$(39)
1710 SETEG 40,"007F80BFB5AAB5AAB5AA"
1720 SETEG 41,"00FE01FD55AD55AD55AD"
1730 SETEG 42,"B5AAB5AAB5AABF807F00"
1740 SETEG 43,"55AD55AD55ADFD01FE00"
1750 C$=CHR$(40)+CHR$(41)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(42)+CHR$(43)
1760 SETEG 44,"000003021E10101E0202"
1770 SETEG 45,"0000C040780808784040"
1780 SETEG 46,"0202021F207F407F0000"
1790 SETEG 47,"404040F804FE02FE0000"
1800 D$=CHR$(44)+CHR$(45)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(46)+CHR$(47)
1810 SETEG 48,"CC003300CC003300CC00"
1820 SETEG 49,"3300CC003300CC003300"
1830 E$=CHR$(48)+CHR$(48)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(49)+CHR$(49)
1840 SETEG 50,"FFFFFFFFFFFFFFFFFFFF"
1850 F$=CHR$(50)+CHR$(50)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(50)+CHR$(50)
1860 SETEG 51,"00FBFBFBFB00DFDFDFDF"
1870 G$=CHR$(51)+CHR$(51)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(51)+CHR$(51)
1880 SETEG 52,"CC003300C7182340C340"
1890 SETEG 53,"CC003300E49805C202C2"
1900 SETEG 54,"4340C3402318C7003300"
1910 SETEG 55,"03C202C20598E4003300"
1920 H$=CHR$(52)+CHR$(53)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(54)+CHR$(55)
1930 SETET 52,"006CEE7C107CFE6C0000"
1940 RETURN
