10 ' **********************************
20 ' *                                *
30 ' *          CUBEMELEON            *
40 ' *                                *
50 ' *   Auteur   Georges  GOUMENT    *
60 ' *                                *
70 ' *       AMSTRAD  CPC 464         *
80 ' *                                *
90 ' **********************************
100 '
110 'redéfinition lettres accentuées
120 '
130 MODE 0:BORDER 13:FOR I=0 TO 15:INK I,13:NEXT:PRINT CHR$(22)+CHR$(1)
140 DIM E$(3)
150 SYMBOL AFTER 64
160 SYMBOL 64,&60,&10,&78,&8C,&7C,&CC,&76
170 KEY 129,CHR$(64)
180 SYMBOL 123,&6,&8,&3C,&66,&7E,&60,&3C
190 KEY 128,CHR$(123)
200 SYMBOL 125,&60,&10,&3C,&66,&7E,&60,&3C
210 KEY 132,CHR$(125)
220 SYMBOL 92,&0,&0,&3C,&66,&60,&3E,&8,&18
230 KEY 135,CHR$(92)
240 SYMBOL 94,&18,&24,&3C,&66,&7E,&60,&3C
250 KEY 134,CHR$(94)
260 '
270 'redéfinition caractères du titre et     des cubes du jeu
280 '
290 FOR I=144 TO 165
300 READ S1,S2,S3,S4,S5,S6,S7,S8
310 SYMBOL I,S1,S2,S3,S4,S5,S6,S7,S8
320 NEXT I
330 DATA &0,&0,&0,&0,&1F,&3F,&7F,&FF,&0,&0,&0,&0,&F0,&F0,&F0,&F0,&0,&0,&0,&0,&10,&20,&50,&A0,&F0,&F0,&F0,&F0,&E0,&C0,&80,&0,&50,&A0,&50,&A0,&50,&A0,&40,&80,&0,&0,&0,&0,&0,&15,&2A,&55
340 DATA &0,&0,&0,&0,&0,&50,&A0,&40,&0,&0,&0,&18,&18,&0,&0,&0,&C0,&C0,&C0,&C0,&C0,&C0,&FF,&FF,&0,&0,&C0,&C0,&C0,&C0,&C0,&C0,&0,&0,&FF,&FF,&C0,&C0,&C0,&C0,&0,&0,&0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0,&C0
350 DATA &0,&0,&C0,&C0,&C0,&C0,&C0,&0,&FF,&FF,&C0,&C0,&C0,&C0,&FF,&FF,&0,&0,&C0,&C0,&C0,&C0,&C0,&C0,&0,&0,&C0,&C0,&C0,&C0,&0,&0,&F8,&F8,&C0,&C0,&C0,&C0,&FF,&FF,&0,&0,&C0,&C0,&F3,&F3,&F3,&F3,&CC,&CC,&CC,&C0,&C0,&C0,&C0,&C0
360 DATA &0,&0,&C0,&C0,&F0,&F0,&F0,&F0,&CC,&CC,&C3,&C3,&C3,&C3,&C0,&C0
370 E$(1)=CHR$(144)+CHR$(145)+CHR$(10)+CHR$(8)+CHR$(147)+CHR$(11)
380 E$(2)=CHR$(9)+CHR$(146)+CHR$(10)+CHR$(8)+CHR$(8)+CHR$(143)+CHR$(148)+CHR$(11)
390 E$(3)=CHR$(9)+CHR$(149)+CHR$(150)
400 FOR I=176 TO 192
410 READ S1,S2,S3,S4,S5,S6,S7,S8
420 SYMBOL I,S1,S2,S3,S4,S5,S6,S7,S8 
430 NEXT I 
440 DATA &3F,&7F,&0,&0,&30,&30,&30,&30,&F0,&F0,&30,&30,&30,&20,&20,&0,&30,&30,&30,&30,&3F,&3F,&0,&0,&0,&30,&70,&30,&30,&30,&20,&0,&30,&70,&30,&30,&30,&30,&30,&30,&30,&30,&30,&30,&30,&30,&20,&0,&3F,&7F,&0,&0,&30,&30,&3C,&3C 
450 DATA &3F,&7F,&0,&0,&30,&30,&3F,&3F,&0,&0,&30,&30,&3F,&3F,&0,&0,&F0,&F0,&30,&30,&30,&30,&20,&0,&F0,&F0,&30,&30,&20,&0,&0,&0,&30,&70,&3C,&3C,&C,&C,&C,&C,&33,&32,&30,&30,&30,&30,&20,&0,&30,&70,&3C,&3C,&C,&C,&F,&F
460 DATA &33,&33,&30,&30,&30,&30,&20,&0,&F0,&F0,&30,&30,&30,&30,&30,&30,&4,&0,&30,&30,&3F,&3F,&0,&0      
470 '
480 ' présentation du jeu
490 '
500 POKE &B290,100:CLS
510 FOR Y=400 TO 374 STEP-1:PLOT 0,Y:DRAW 640,Y,7:NEXT
520 X=640
530 FOR Y=373 TO 368 STEP-1
540 X=X-1:PLOT 0,Y
550 DRAW X,Y,6:NEXT   
560 FOR I=1 TO 39
570 READ V,W,X,Y
580 PEN W
590 LOCATE X,Y
600 PRINT CHR$(V)
610 NEXT I
620 DATA 152,1,1,2,152,3,3,2,153,13,10,1,152,10,13,2,152,9,17,2,153,3,3,1,153,3,4,1,153,2,6,1,153,10,13,1,153,9,18,1,153,15,20,1,154,1,1,1,154,2,5,1,154,4,7,1,154,8,11,1,154,11,15,1,154,9,17,1,155,1,2,2                            
630 DATA 156,3,4,2,155,4,8,2,155,8,12,2,155,10,14,2,155,11,16,2,156,13,10,2,156,9,18,2,156,15,20,2,157,1,2,1,158,2,5,2,159,2,6,2,160,4,8,1,160,8,12,1,160,11,16,1,161,4,7,2,161,8,11,2,161,11,15,2,162,13,9,1,163,13,9,2,164,15,19,1,165,15,19,2
640 FOR I=1 TO 39
650 READ V,W,X,Y
660 PEN W  
670 LOCATE X,Y  
680 PRINT CHR$(V)
690 NEXT I 
700 DATA 176,10,1,1,177,10,2,1,178,10,1,2,179,10,2,2,180,11,3,1,180,11,4,1,178,11,3,2,181,11,4,2,183,9,5,1,177,9,6,1,184,9,5,2,185,9,6,2,182,15,7,1,186,15,8,1,192,15,7,2,179,15,8,2,187,5,9,1,180,5,10,1,188,5,9,2,181,5,10,2 
710 DATA 182,14,11,1,186,14,12,1,192,14,11,2,179,14,12,2,180,1,13,1,178,1,13,2,179,1,14,2,182,3,15,1,186,3,16,1,192,3,15,2,179,3,16,2,176,2,17,1,191,2,18,1,178,2,17,2,181,2,18,2,189,4,19,1,180,4,20,1,190,4,19,2,181,4,20,2 
720 PEN 6:LOCATE 3,7:PRINT "JEU DE REFLEXION":LOCATE 6,9:PRINT "2  niveaux":LOCATE 1,24:PRINT "(c)  Georges GOUMENT"
730 LOCATE 5,14:PEN 10:PRINT E$(1):LOCATE 5,14:PEN 1:PRINT E$(2)
740 LOCATE 7,14:PEN 11:PRINT E$(1):LOCATE 7,14:PEN 3:PRINT E$(2)
750 LOCATE 9,14:PEN 9:PRINT E$(1):LOCATE 9,14:PEN 2:PRINT E$(2)
760 LOCATE 11,14:PEN 15:PRINT E$(1):LOCATE 11,14:PEN 4:PRINT E$(2)
770 LOCATE 13,14:PEN 5:PRINT E$(1):LOCATE 13,14:PEN 13:PRINT E$(2)
780 LOCATE 15,14:PEN 14:PRINT E$(1):LOCATE 16,14:PEN 8:PRINT CHR$(146):LOCATE 15,15:PRINT CHR$(143)+CHR$(148)
790 BORDER 0:INK 1,2:INK 10,11:INK 3,3:INK 11,17:INK 2,6:INK 9,16:INK 4,9:INK 15,19:INK 13,12:INK 5,24:INK 8,15:INK 14,25:INK 6,26:INK 7,0
800 GOSUB 5440
810 '
820 'mode d'emploi et règles du jeu
830 '
840 MODE 1:BORDER 13:FOR I=0 TO 15:INK I,13:NEXT
850 ORIGIN 1,1:DRAW 1,399,1:DRAW 639,399,1:DRAW 639,1,1:DRAW 1,1,1
860 PLOT 5,5:DRAW 5,394,3:DRAW 634,394,3:DRAW 634,5,3:DRAW 5,5,3
870 PLOT 9,9:DRAW 9,390,2:DRAW 630,390,2:DRAW 630,9,2:DRAW 9,9,2
880 WINDOW #1,2,39,2,23:PAPER #1,0:CLS #1
890 PEN #1,1:PRINT #1:PRINT #1,"            MODE D'EMPLOI":PEN #1,2:PRINT #1,"            *************"
900 PRINT #1:PRINT #1:PEN #1,3:PRINT #1,"Vous choisirez votre niveau de jeu dèsque les règles du jeu seront terminées":PRINT #1:PEN #1,2:PRINT #1,"FORCE 1:":PEN #1,3:PRINT #1," débutant  15 cubes 4 couleurs":PRINT #1
910 PEN #1,2:PRINT #1,"FORCE 2:":PEN #1,3:PRINT #1," champion  25 cubes 6 couleurs":PRINT #1 
920 PRINT #1:PEN #1,2:PRINT #1,"   chaque niveau comporte 4 options":PRINT #1,"        de mélange des couleurs":PRINT #1:PEN #1,3:PRINT #1,"l'ordinateur en tire une au sort avant        de préparer la partie"
930 GOSUB 1100
940 PEN #1,1:PRINT #1:PRINT #1,"             PREPARATION":PEN #1,2:PRINT #1,"             ***********":PRINT #1:PRINT #1 
950 PEN #1,3:PRINT #1,"      L'ordinateur choisi un des cubesdisponibles l' affiche dans le bas de l'écran et prépare le jeu.":PRINT #1
960 PRINT #1,"Après avoir disposé ce cube sur 3 ou 5rangs il effectue un mélange.":PRINT #1:PRINT #1,"Le choix des cubes, la procédure et lenombre de brouillages sont aléatoires."
970 PRINT #1:PEN #1,2:PRINT #1,"  Vous ne pouvez pas intervenir durantla préparation de la partie."
980 GOSUB 1100
990 PEN #1,1:PRINT #1:PRINT #1,"            REGLES DU JEU":PEN #1,2:PRINT #1,"            *************":PRINT #1
1000 PEN #1,3:PRINT #1,"Vous commencez à jouer lorsqu'un pointblanc apparait sur la face avant  du  cube central.":PRINT #1
1010 PEN #1,2:PRINT #1,"   Ce point indique le cube servant debase à une permutation de couleurs.":PRINT #1:PEN #1,3:PRINT #1," Servez vous des touches fléchées pourpasser d'un cube à l'autre.":PRINT #1 
1020 PEN #1,2:PRINT #1,"TOUCHE COPY";:PEN #1,3:PRINT #1," Permute les couleurs":PEN #1,2:PRINT #1,"TOUCHE <A>";:PEN #1,3:PRINT #1,"  Annule la partie"
1030 PEN #1,2:PRINT #1:PRINT #1,"              TOUCHE  <V>";:PEN #1,3:PRINT #1,"L'ordinateur vérifie la couleur de voscubes avant de vous déclarer vainqueur"
1040 GOSUB 1100
1050 PEN #1,2:PRINT #1:PRINT #1,"  POUR GAGNER UNE PARTIE  VOUS DEVEZ":PRINT #1:PRINT #1,"   REDONNER A VOS CUBES UNE COULEUR":PRINT #1:PRINT #1," IDENTIQUE A CELLE QUE L'ORDINATEUR A" 
1060 PRINT #1:PRINT #1,"       CHOISIE AU DEBUT DU JEU":PRINT #1:PRINT #1:PRINT #1,"           BONNE CHANCE !":PRINT #1:PRINT #1:
1070 PEN #1,3:PRINT #1,"Quand les divers affichages clignotentil vous reste 20 coups a jouer.":PRINT #1:PRINT #1,"L'option de mélange des couleurs est  valable durant toute une partie,à vousde la trouver !"
1080 GOSUB 1100
1090 GOTO 1230
1100 INK 1,24:INK 2,3:INK 3,0
1110 LOCATE 2,24:PEN 1:PRINT "Appuyez sur une touche"
1120 WHILE INKEY$="":WEND
1130 CLS #1:INK 1,13:INK 2,13:INK 3,13
1140 RETURN
1150 '
1160 ' choix du niveau de jeu: F 1 ou 2
1170 '
1180 ' tirage option mélange: OP 1 à 4
1190 '
1200 ' dessin du jeu  
1210 '
1220 '
1230 RANDOMIZE TIME:MODE 0:INK 1,0:PEN 1:PRINT CHR$(22)+CHR$(1):OP=INT(RND*4)+1:PRINT "NIVEAU CHOISI ?"
1240 A$=INKEY$:IF A$="" THEN 1240
1250 IF A$="1" THEN F=1:GOTO 1270
1260 IF A$<>"2" THEN 1240 ELSE F=2
1270 CLS:FOR I=1 TO 15:INK I,13:NEXT:FOR Y=158 TO 174:PLOT 192,Y:DRAW 447,Y,12:NEXT:PLOT 192,156:DRAW 449,156,7:DRAW 449,174,7:PEN 7:LOCATE 7,15:PRINT "couleurs ":FOR Y=384 TO 400:PLOT 160,Y:DRAW 477,Y,12:NEXT:PLOT 160,382:DRAW 479,382,7:DRAW 479,400,7
1280 WINDOW #1,1,5,20,23:PAPER #1,10:CLS#1:WINDOW #2,16,20,20,23:PAPER #2,10:CLS#2:A$=STRING$(5,CHR$(143)):PEN 6:LOCATE 1,20:PRINT A$:LOCATE 16,20:PRINT A$
1290 LOCATE 1,20:PEN 1:PRINT "SCORE":LOCATE 16,20:PEN 1:PRINT "FORCE":PEN 12:LOCATE 2,22:PRINT "000":LOCATE 16,22:PRINT F:LOCATE 18,22:PRINT "-":LOCATE 18,22:PRINT OP 
1300 LOCATE 6,1:PEN 7:PRINT "cubeméléon":PLOT 0,32:DRAW 162,32,7:DRAW 162,94,7:PLOT 480,32:DRAW 639,32,7:DRAW 639,94,7
1310 '
1320 ' placement de 4 ou 6 cubes selon               niveau de jeu (F)
1330 '
1340 Y=16:IF F=1 THEN 1370
1350 X=5
1360 LOCATE X,Y:PEN 11:PRINT E$(1):LOCATE X,Y:PEN 3:PRINT E$(2):LOCATE X,Y+1:PEN 7:PRINT E$(3)
1370 LOCATE 7,Y:PEN 9:PRINT E$(1):PEN 2:LOCATE 7,Y:PRINT E$(2):LOCATE 7,Y+1:PEN 7:PRINT E$(3)
1380 LOCATE 9,Y:PEN 15:PRINT E$(1):LOCATE 9,Y:PEN 4:PRINT E$(2):LOCATE 9,Y+1:PEN 7:PRINT E$(3)
1390 LOCATE 11,Y:PEN 5:PRINT E$(1):LOCATE 11,Y:PEN 13:PRINT E$(2):LOCATE 11,Y+1:PEN 7:PRINT E$(3)
1400 LOCATE 13,Y:PEN 10:PRINT E$(1):LOCATE 13,Y:PEN 1:PRINT E$(2):LOCATE 13,Y+1:PEN 7:PRINT E$(3)
1410 IF F=1 THEN 1450 ELSE LOCATE 15,Y:PEN 14:PRINT CHR$(144)+CHR$(145):LOCATE 16,Y+1:PRINT CHR$(147):LOCATE 16,Y:PEN 8:PRINT CHR$(146):LOCATE 15,Y+1:PRINT CHR$(143)+CHR$(148):LOCATE 15,Y+1:PEN 7:PRINT E$(3)
1420 '
1430 '         appel couleur
1440 '
1450 A=0:INK 1,2:INK 2,6:INK 3,3:INK 4,9:INK 5,24:INK 6,26:INK 7,0:INK 8,15:INK 9,16:INK 10,11:INK 11,17:INK 12,7:INK 13,12:INK 14,25:INK 15,19
1460 ENV 1,1,15,1,1,0,110,15,-1,8
1470 ENT 1,15,-5,6,5,15,5
1480 SOUND 7,80,-1,0,1,1
1490 '
1500 'choix d'un cube par l'ordinateur
1510 '
1520 ' niveau 1 - 4 couleurs (F=1)
1530 '
1540 ' niveau 2 - 6 couleurs (F=2)
1550 '
1560 A=INT(RND*6)+1
1570 IF F=1 THEN 1590
1580 IF A=1 THEN A=3:B=11:GOTO 1690
1590 IF A=2 THEN A=4:B=15:GOTO 1690
1600 IF A=3 THEN A=2:B=9:GOTO 1690
1610 IF A=4 THEN A=13:B=5:GOTO 1690
1620 IF A=5 THEN A=1:B=10:GOTO 1690
1630 IF F=1 THEN 1560
1640 IF A=6 THEN A=8:B=14:GOTO 1690
1650 GOTO 1560
1660 '
1670 '    affichage du cube choisi
1680 '
1690 FOR Y=78 TO 96:PLOT 224,Y:DRAW 415,Y,12:NEXT:FOR Y=96 TO 112:PLOT 256,Y:DRAW 383,Y,12:NEXT:PLOT 224,76:DRAW 417,76,7:DRAW 417,96,7:PLOT 385,96:DRAW 385,112,7:PEN 7:LOCATE 9,19:PRINT"cube":LOCATE 8,20:PRINT "choisi"
1700 LOCATE 10,21:PEN B:PRINT E$(1):LOCATE 10,21:PEN A:PRINT E$(2)
1710 LOCATE 10,22:PEN 7:PRINT E$(3)
1720 '
1730 'mise en place de 15 ou 25 cubes               selon variable F
1740 '
1750 IF F=1 THEN 1860
1760 FOR X=10 TO 18 STEP 2
1770 LOCATE X,4:PEN A:PRINT CHR$(143)
1780 LOCATE X,3:PEN B:PRINT CHR$(144)
1790 LOCATE X+1,3:PRINT CHR$(145)
1800 LOCATE X+1,4:PRINT CHR$(147)
1810 LOCATE X+1,3:PEN A:PRINT CHR$(146)
1820 LOCATE X+1,4:PRINT CHR$(148)
1830 LOCATE X+1,4:PEN 7:PRINT CHR$(149)
1840 NEXT X
1850 LOCATE 20,4:PRINT CHR$(150)
1860 FOR X=8 TO 16 STEP 2
1870 LOCATE X,6:PEN A:PRINT CHR$(143)
1880 LOCATE X,5:PEN B:PRINT CHR$(144)
1890 LOCATE X+1,5:PRINT CHR$(145)
1900 LOCATE X+1,6:PRINT CHR$(147)
1910 LOCATE X+1,5:PEN A:PRINT CHR$(146)
1920 LOCATE X+1,6:PRINT CHR$(148)
1930 LOCATE X+1,6:PEN 7:PRINT CHR$(149)
1940 NEXT X
1950 LOCATE 18,6:PRINT CHR$(150)
1960 FOR X=6 TO 14 STEP 2
1970 LOCATE X,8:PEN A:PRINT CHR$(143) 
1980 LOCATE X,7:PEN B:PRINT CHR$(144)
1990 LOCATE X+1,7:PRINT CHR$(145)
2000 LOCATE X+1,8:PRINT CHR$(147)
2010 LOCATE X+1,7:PEN A:PRINT CHR$(146)
2020 LOCATE X+1,8:PRINT CHR$(148)
2030 LOCATE X+1,8:PEN 7:PRINT CHR$(149)
2040 NEXT X
2050 LOCATE 16,8:PRINT CHR$(150)
2060 FOR X=4 TO 12 STEP 2
2070 LOCATE X,10:PEN A:PRINT CHR$(143)
2080 LOCATE X,9:PEN B:PRINT CHR$(144)
2090 LOCATE X+1,9:PRINT CHR$(145)
2100 LOCATE X+1,10:PRINT CHR$(147)
2110 LOCATE X+1,9:PEN A:PRINT CHR$(146)
2120 LOCATE X+1,10:PRINT CHR$(148)
2130 LOCATE X+1,10:PEN 7:PRINT CHR$(149)
2140 NEXT X
2150 LOCATE 14,10:PRINT CHR$(150)
2160 IF F=1 THEN 2300
2170 FOR X=2 TO 10 STEP 2
2180 LOCATE X,12:PEN A:PRINT CHR$(143)
2190 LOCATE X,11:PEN B:PRINT CHR$(144)
2200 LOCATE X+1,11:PRINT CHR$(145)
2210 LOCATE X+1,12:PRINT CHR$(147)
2220 LOCATE X+1,11:PEN A:PRINT CHR$(146)
2230 LOCATE X+1,12:PRINT CHR$(148)
2240 LOCATE X+1,12:PEN 7:PRINT CHR$(149)
2250 NEXT X
2260 '
2270 '  nombre de mélanges (variable M)        selon niveau de jeu (variable F)
2280 '
2290 PEN 7:LOCATE 12,12:PRINT CHR$(150)
2300 WINDOW #3,7,14,23,24
2310 GOSUB 2320:GOTO 2350
2320 FOR J=1 TO 10:FOR I=1 TO 100 STEP 10
2330 SOUND 1,I,1,15
2340 NEXT I:NEXT J:RETURN
2350 IF F=2 THEN 2380
2360 M=INT(RND*10)+5
2370 GOTO 2420
2380 M=INT(RND*25)+10
2390 '
2400 ' début du brouillage variable (P)         tirage aléatoire selon F
2410 '
2420 FOR P=1 TO M
2430 IF F=2 THEN 2540
2440 '
2450 ' niveau 1 - 3 rangs de cubes
2460 '
2470 Y=INT(RND*3)+1
2480 IF Y=1 THEN Y=306:L=6:GOTO 2690
2490 IF Y=2 THEN Y=274:L=8:GOTO 2750
2500 IF Y=3 THEN Y=242:L=10:GOTO 2810
2510 '
2520 ' niveau 2 - 5 rangs de cubes
2530 '
2540 Y=INT(RND*5)+1
2550 IF Y=1 THEN Y=338:L=4:GOTO 2630
2560 IF Y=2 THEN Y=306:L=6:GOTO 2690
2570 IF Y=3 THEN Y=274:L=8:GOTO 2750
2580 IF Y=4 THEN Y=242:L=10:GOTO 2810
2590 IF Y=5 THEN Y=210:L=12:GOTO 2870
2600 '
2610 ' coordonnées colonnes des cubes          déterminées par la ligne choisie
2620 '
2630 X=INT(RND*5)+1
2640 IF X=1 THEN X=290:C=10:GOTO 3050
2650 IF X=2 THEN X=354:C=12:GOTO 3050
2660 IF X=3 THEN X=418:C=14:GOTO 3050
2670 IF X=4 THEN X=482:C=16:GOTO 3050
2680 IF X=5 THEN X=546:C=18:GOTO 3050
2690 X=INT(RND*5)+1
2700 IF X=1 THEN X=226:C=8:GOTO 3050
2710 IF X=2 THEN X=290:C=10:GOTO 3050
2720 IF X=3 THEN X=354:C=12:GOTO 3050
2730 IF X=4 THEN X=418:C=14:GOTO 3050
2740 IF X=5 THEN X=482:C=16:GOTO 3050
2750 X=INT(RND*5)+1
2760 IF X=1 THEN X=162:C=6:GOTO 3050
2770 IF X=2 THEN X=226:C=8:GOTO 3050
2780 IF X=3 THEN X=290:C=10:GOTO 3050
2790 IF X=4 THEN X=354:C=12:GOTO 3050
2800 IF X=5 THEN X=418:C=14:GOTO 3050
2810 X=INT(RND*5)+1
2820 IF X=1 THEN X=98:C=4:GOTO 3050
2830 IF X=2 THEN X=162:C=6:GOTO 3050
2840 IF X=3 THEN X=226:C=8:GOTO 3050
2850 IF X=4 THEN X=290:C=10:GOTO 3050
2860 IF X=5 THEN X=354:C=12:GOTO 3050
2870 X=INT(RND*5)+1
2880 IF X=1 THEN X=34:C=2:GOTO 3050
2890 IF X=2 THEN X=98:C=4:GOTO 3050
2900 IF X=3 THEN X=162:C=6:GOTO 3050
2910 IF X=4 THEN X=226:C=8:GOTO 3050
2920 IF X=5 THEN X=290:C=10:GOTO 3050
2930 NEXT P
2940 P=60:GOSUB 2320
2950 IF F=2 THEN CJ=M*6:GOTO 2970
2960 IF F=1 THEN CJ=M*4
2970 SC=0
2980 X=290:Y=274:L=8:C=10
2990 '
3000 '       test couleur:              variables A,B (pen) couleurs d'origines variables A1 et B1 (pen) modifications  selon variable OP
3010 '
3020 ' sous programme commun pour la    préparation du jeu et les déplacement du joueur
3030 '
3040 '
3050 MOVE X,Y
3060 IF F=1 THEN 3110
3070 IF TEST(X,Y)<>3 THEN 3110
3080 A=3:B=11
3090 IF OP=1 OR OP=2 THEN A1=8:B1=14:GOTO 3360
3100 IF OP=3 OR OP=4 THEN A1=2:B1=9:GOTO 3360
3110 IF TEST(X,Y)<>2 THEN 3180
3120 A=2:B=9
3130 IF F=2 THEN 3160
3140 IF OP=1 OR OP=2 THEN A1=1:B1=10:GOTO 3360
3150 GOTO 3170
3160 IF OP=1 OR OP=2 THEN  A1=3:B1=11:GOTO 3360
3170 IF OP=3 OR OP=4 THEN A1=4:B1=15:GOTO 3360
3180 IF TEST(X,Y)<>4 THEN 3220
3190 A=4:B=15
3200 IF OP=1 OR OP=2 THEN A1=2:B1=9:GOTO 3360
3210 IF OP=3 OR OP=4 THEN A1=13:B1=5:GOTO 3360
3220 IF TEST(X,Y)<>13 THEN 3260
3230 A=13:B=5
3240 IF OP=1 OR OP=2 THEN A1=4:B1=15:GOTO 3360
3250 IF OP=3 OR OP=4 THEN A1=1:B1=10:GOTO 3360
3260 IF TEST(X,Y)<>1 THEN 3320
3270 A=1:B=10
3280 IF OP=1 OR OP=2 THEN A1=13:B1=5:GOTO 3360
3290 IF F=2 THEN 3310
3300 IF OP=3 OR OP=4 THEN A1=2:B1=9:GOTO 3360
3310 IF OP=3 OR OP=4 THEN A1=8:B1=14:GOTO 3360
3320 IF TEST(X,Y)<>8 THEN 2980
3330 A=8:B=14
3340 IF OP=1 OR OP=2 THEN A1=1:B1=10:GOTO 3360
3350 IF OP=3 OR OP=4 THEN A1=3:B1=11
3360 IF P<=M THEN 4330
3370 GOTO 3460
3380 '
3390 ' top sonore déplacement impossible
3400 '
3410 SOUND 10,46,5,7
3420 SOUND 17,66,5,7
3430 '
3440 'affiche le point blanc sur un cube       après déplacement ou permutation
3450 '
3460 LOCATE C,L:PEN 6:PRINT CHR$(151)
3470 '
3480 '  déplacement du cube de base
3490 '
3500 IF INKEY(0)=0 THEN 3700
3510 IF INKEY(2)=0 THEN 3810
3520 IF INKEY(1)=0 THEN 3930
3530 IF INKEY(8)=0 THEN 4100
3540 '
3550 ' mise en route permutation
3560 '
3570 IF INKEY(9)=0 THEN 4330
3580 '
3590 ' annulation de la partie
3600 '
3610 IF INKEY(69)=0 THEN 6140
3620 '
3630 ' vérifie la couleur des cubes du        jeu avec le choix de l'ordinateur
3640 '
3650 IF INKEY(55)=0 THEN GOSUB 4250::GOTO 5620
3660 GOTO 3460
3670 '
3680 ' déplacement impossible en haut 
3690 '
3700 IF F=2 AND L=4 THEN 3410
3710 IF F=1 AND L=6 THEN 3410
3720 GOSUB 4250
3730 '
3740 ' remonte d'un cube 
3750 L=L-2:C=C+2
3760 X=X+64:Y=Y+32
3770 GOTO 3050
3780 '
3790 'déplacement impossible en bas
3800 '
3810 IF F=2 AND L=12 THEN 3410:GOTO 3830
3820 IF F=1 AND L=10 THEN 3410
3830 GOSUB 4250
3840 '
3850 ' descend d'un cube
3860 '
3870 L=L+2:C=C-2
3880 X=X-64:Y=Y-32
3890 GOTO 3050
3900 '
3910 ' déplacement impossible à droite
3920 '
3930 IF F=1 AND L=6 AND C=16 THEN 3410
3940 IF L=4 AND C=18 THEN 3410
3950 IF L=6 AND C=16 THEN 3410
3960 IF L=8 AND C=14 THEN 3410
3970 IF F=2 AND L=10 AND C=12 THEN 3410
3980 IF L=10 AND C=12 THEN 3410
3990 IF L=12 AND C=10 THEN 3410
4000 GOSUB 4250
4010 '
4020 ' déplacement d'un cube à droite
4030 '
4040 C=C+2
4050 X=X+64
4060 GOTO 3050
4070 '
4080 'déplacement impossible à gauche
4090 '
4100 IF F=1 THEN 4110 ELSE IF L=4 AND C=10 THEN 3410
4110 IF L=6 AND C=8 THEN 3410
4120 IF L=8 AND C=6 THEN 3410
4130 IF L=10 AND C=4 THEN 3410
4140 IF F=1 THEN 4150 ELSE IF L=12 AND C=2 THEN 3410
4150 GOSUB 4250
4160 '
4170 ' déplacement d'un cube à gauche
4180 '
4190 C=C-2
4200 X=X-64
4210 GOTO 3050
4220 '
4230 '   efface le point blanc avant      déplacement - retour au sous programme    pour de déplacement pour nouvelles       coordonnées et nouvel affichage
4240 '
4250 LOCATE C,L
4260 PEN A
4270 PRINT CHR$(143)
4280 FOR TP=1 TO 300:NEXT
4290 RETURN
4300 '
4310 'affichage du score (variable SC)
4320 '
4330 ENV 1,50,2,2:ENT 1,50,-2,2:SOUND 1,220,75,1,1,1
4340 IF P<>60 THEN 4490 'préparation non      terminée renvoi aux permutations
4350 SC=SC+1
4360 IF SC<=CJ-19 THEN 4390  ' reste 20 coups à jouer mise en route clignotement
4370 INK 12,7,26
4380 IF SC=CJ+1 THEN 5350 'partie perdue
4390 IF SC>9 THEN 4400 ELSE LOCATE 4,22:PEN 10:PRINT CHR$(143):LOCATE 3,22:PEN 12:PRINT SC:GOTO 4490
4400 IF SC>99 THEN 4410 ELSE LOCATE 3,22:PEN 10:PRINT CHR$(143)+CHR$(143):LOCATE 2,22:PEN 12:PRINT SC:GOTO 4490
4410 LOCATE 2,22:PEN 10:PRINT CHR$(143)+CHR$(143)+CHR$(143):LOCATE 1,22:PEN 12:PRINT SC
4420 '
4430 '  sous programme de permutation
4440 '
4450 '
4460 '
4470 '   modification du cube de base              pen = variables A1 et B1
4480 '
4490 PEN B1
4500 LOCATE C,L-1:PRINT CHR$(144)+CHR$(145)
4510 LOCATE C+1,L:PRINT CHR$(147)
4520 PEN A1
4530 LOCATE C+1,L-1:PRINT CHR$(146)
4540 LOCATE C,L:PRINT CHR$(143)+CHR$(148)
4550 '
4560 ' étudie position des cubes autour        du cube de base: variables U et V
4570 '
4580 ' détermine si une permutation de          couleur doit ^tre faite selon                valeur de L, C et F
4590 '
4600 IF F=2 AND L=4 THEN 4650
4610 IF F=1 AND L<=6 THEN 4650
4620 U=L-2:V=C+2
4630 YA=Y+32:XA=X+64
4640 GOSUB 4940
4650 IF F=2 AND L=4 AND C=18 THEN 4750
4660 IF F=1 AND L<=6 AND C=16 THEN 4750
4670 IF L=6 AND C=16 THEN 4750
4680 IF L=8 AND C=14 THEN 4750
4690 IF F=1 AND L>=10 AND C=12 THEN 4750
4700 IF L=10 AND C=12 THEN 4750
4710 IF L=12 AND C=10 THEN 4750
4720 U=L:V=C+2
4730 YA=Y:XA=X+64
4740 GOSUB 4940
4750 IF F=2 AND L=12 THEN 4800
4760 IF F=1 AND L>=10 THEN 4800
4770 U=L+2:V=C-2
4780 YA=Y-32:XA=X-64
4790 GOSUB 4940
4800 IF F=2 AND L=4 AND C=10 THEN 4900
4810 IF F=1 AND L<=6 AND C=8 THEN 4900
4820 IF L=6 AND C=8 THEN 4900
4830 IF L=8 AND C=6 THEN 4900
4840 IF F=1 AND L>=10 AND C=4 THEN 4900
4850 IF L=10 AND C=4 THEN 4900
4860 IF L=12 AND C=2 THEN 4900
4870 U=L:V=C-2
4880 YA=Y:XA=X-64
4890 GOSUB 4940
4900 IF P<60 THEN 4920
4910 GOTO 3050
4920 IF P=M THEN 2940
4930 GOTO 2930
4940 '
4950 ' test couleur des cubes entourant        le cube de base: variables XA,YA
4960 '
4970 IF F=1 THEN 5010
4980 IF TEST(XA,YA)<>3 THEN 5010
4990 IF OP=2 OR OP=3 THEN A1=2:B1=9:GOTO 5230
5000 IF OP=1 OR OP=4 THEN A1=8:B1=14:GOTO 5230
5010 IF TEST(XA,YA)<>2 THEN 5060
5020 IF F=2 THEN 5040
5030 IF OP=1 OR OP=4 THEN A1=1:B1=10:GOTO 5230
5040 IF OP=2 OR OP=3 THEN A1=4:B1=15:GOTO 5230
5050 IF OP=1 OR OP=4 THEN A1=3:B1=11:GOTO 5230
5060 IF TEST(XA,YA)<>4 THEN 5090
5070 IF OP=2 OR OP=3 THEN A1=13:B1=5:GOTO 5230
5080 IF OP=1 OR OP=4 THEN A1=2:B1=9:GOTO 5230
5090 IF TEST(XA,YA)<>13 THEN 5120
5100 IF OP=2 OR OP=3 THEN A1=1:B1=10:GOTO 5230
5110 IF OP=1 OR OP=4 THEN A1=4:B1=15:GOTO 5230
5120 IF TEST(XA,YA)<>1 THEN 5170
5130 IF F=2 THEN 5150
5140 IF OP=2 OR OP=3 THEN A1=2:B1=9:GOTO 5230
5150 IF OP=1 OR OP=4 THEN A1=13:B1=5:GOTO 5230
5160 IF OP=2 OR OP=3 THEN A1=8:B1=14:GOTO 5230
5170 IF F=1 THEN 5230 ELSE IF TEST(XA,YA)<>8 THEN 4900
5180 IF OP=2 OR OP=3 THEN A1=3:B1=11:GOTO 5230
5190 IF OP=1 OR OP=4 THEN A1=1:B1=10
5200 '
5210 'modifie la couleur cube par cube             selon variable OP
5220 '
5230 PEN B1
5240 LOCATE V,U-1:PRINT CHR$(144)
5250 LOCATE V+1,U-1:PRINT CHR$(145)
5260 LOCATE V+1,U:PRINT CHR$(147)
5270 PEN A1
5280 LOCATE V+1,U-1:PRINT CHR$(146)
5290 LOCATE V,U:PRINT CHR$(143)+CHR$(148)
5300 V=0:U=0:A1=0:B1=0
5310 RETURN
5320 '
5330 'la partie est perdue
5340 '
5350 G=40:FOR I=1 TO 26
5360 INK 0,I
5370 SOUND 10,G,10,15
5380 SOUND 17,G-20,10,15
5390 G=G+20
5400 PEN 12:LOCATE 8,24:PRINT "PERDU":NEXT I:GOSUB 2320:GOTO 6190 'affichage du résultat
5410 '
5420 ' accompagnement musical pour            présentation et partie gagnée
5430 '
5440 ENV 1,1,15,1,10,-3,20
5450 ENV 2,1,6,1,20,-2,0.5
5460 ENV 3,1,3,1,30,-2,0.5
5470 RESTORE 5540
5480 FOR I=1 TO 73
5490 READ D,P1,P2
5500 SOUND 49,P1,D*14,0,1
5510 SOUND 42,P2,D*14,0,2
5520 SOUND 28,P2/2,D*14,0,3
5530 NEXT I
5540 DATA 2,851,106,1,638,80,1,676,84,2,638,80,2,851,106,2,568,71,2,851,106,2,536,67,2,638,80,2,478,60,2,638,80,2,426,53,2,638,80,2,402,50,2,638,80,1,676,84,1,638,80,1,568,71,1,676,84,2,851,106,1,426,53,1,478,60
5550 DATA 1,506,63,1,478,60,1,426,53,1,506,63,1,638,80,1,568,71,1,506,63,1,638,80,2,716,89,1,804,100,1,851,106,2,804,100,1,478,60,1,536,67,1,568,71,1,536,67,1,478,60
5560 DATA 1,568,71,1,716,89,1,638,80,1,568,71,1,716,89,2,804,100,1,851,106,1,956,119,2,851,106,1,536,67,1,568,71,1,638,80,1,568,71,1,536,67,1,638,80,1,804,100,1,716,89,1,638,80,1,804,100,2,851,106,1,956,119
5570 DATA 1,1073,134,2,956,119,2,804,100,2,851,106,2,638,80,1,676,84,1,638,80,1,568,71,1,676,84,2,676,84,1,638,80,1,676,84,3,638,80,3
5580 RETURN
5590 '
5600 ' controle des couleurs et du choix   de l'ordinateur touche <V>:variable Z
5610 '
5620 X=290:Y=50:MOVE X,Y
5630 IF TEST(X,Y)=1 THEN Z=1
5640 IF TEST(X,Y)=2 THEN Z=2
5650 IF TEST(X,Y)=3 THEN Z=3
5660 IF TEST(X,Y)=4 THEN Z=4
5670 IF TEST(X,Y)=8 THEN Z=8
5680 IF TEST(X,Y)=13 THEN Z=13
5690 IF F=2 THEN 5730
5700 X1=228:X2=482
5710 Y=306:NL=3
5720 GOTO 5740
5730 Y=338:X1=290:X2=548:NL=5
5740 FOR I=1 TO NL
5750 FOR X=X1 TO X2 STEP 64
5760 MOVE X,Y
5770 IF TEST(X,Y)<>Z THEN 5850  ' un des cubes n'est pas de la bonne couleur
5780 NEXT X
5790 X1=X1-64:X2=X2-64:Y=Y-32
5800 NEXT I
5810 GOTO 5890    ' tous les cubes sont  corrects - partie gagnée
5820 '
5830 '  couleur des cubes incorrecte              la partie doit continuer
5840 '
5850 PEN 12:LOCATE 8,24:PRINT "REJOUEZ":GOSUB 2320:PEN 0:FOR X=8 TO 14:LOCATE X,24:PRINT CHR$(143):NEXT X:GOTO 3460   '  retour programme principal
5860 '
5870 ' couleur d'origine reconstituée                 partie gagnée
5880 '
5890 MODE 1:INK 1,7:INK O,19:FOR I=1 TO 10:ENT 1,30,30,5:SOUND 1,20,10,15,0,1:NEXT:PEN 1:LOCATE 5,2:PRINT "J'ai effectué ";M;" permutations":LOCATE 4,4:PRINT "Vous deviez réussir en ";CJ;" coups":LOCATE 10,7:PRINT "VOTRE SCORE EST DE";SC
5900 LOCATE 9,10:PRINT "TOUTES MES FELICITATIONS":IF F=2 THEN 5910 ELSE LOCATE 3,14:PRINT "Mais si vous voulez ^tre un Champion":LOCATE 11,16:PRINT "essayez le niveau 2":GOSUB 5440:GOTO 5940
5910 LOCATE 11,14:PRINT "C'est un vrai plaisir de jouer":LOCATE 6,16:PRINT "avec quelqu'un d'aussi fort":GOSUB 5440
5920 '
5930 '  attente d'une touche nouvelle                partie ou fin de jeu
5940 LOCATE 1,24:PRINT "Nouvelle partie   O/N"
5950 T$=UPPER$(INKEY$):IF T$="" THEN 5950
5960 IF T$="N" THEN 6030
5970 IF T$="O" THEN 5990
5980 GOTO 5950
5990 OP=0:P=0:M=0:SC=0:CJ=0:X=0:Y=0:L=0:C=0:NL=0:Z=0:F=0:A=0:B=0:A1=0:B1=0:ya=0:xa=0:BORDER 13:INK 0,13:OP=INT(RND*4)+1:GOTO 1230 'variables remises à 0 pour   nouvelle partie 
6000 '
6010 '      fin de partie
6020 '
6030 MODE 0:BORDER 13:INK 0,0:N=10:LOCATE 1,25
6040 FOR I=1 TO 255:SOUND 1,N,1,15:POKE &B28F,I:PRINT "     AU  REVOIR":IF I<=128 THEN 6070
6050 N=N-1
6060 GOTO 6080
6070 N=N+1
6080 NEXT
6090 INK 0,1:BORDER 1
6100 MODE 1:INK 1,24:PEN 1:END
6110 '
6120 '     annulation d'un jeu
6130 '
6140 MODE 1:BORDER 2:INK 0,2:INK 1,15:PEN 1:FOR I=1 TO 3:FOR N=1 TO 100 STEP 10:SOUND 1,N,2,15:NEXT:NEXT
6150 LOCATE 7,6:PRINT "Vous n'allez pas abandonner":LOCATE 5,10:PRINT "je commencais à bien m'amuser !":LOCATE 12,14:PRINT "ON EN REFAIT UNE ?":GOTO 5940
6160 '
6170 ' affichage résultat partie perdue
6180 '
6190 MODE 1:INK 0,7:BORDER 7:INK 1,25:LOCATE 1,4:PEN 1:PRINT " Désolé, je ne suis pas facile à battre":LOCATE 10,9:PRINT "Vous avez joué";SC;"fois":LOCATE 5,12:PRINT "Vous deviez réussir en";CJ;"coups"
6200 LOCATE 9,18:PRINT "PAS TERRIBLE LE RESULTAT":GOTO 5940