Les Chevaliers de Malte/Développeur - BASICA/GWBASIC - L25


Voici un petit jeu que j'ai inventé lorsque j'étais enfant. Le but du jeu est de remplir 25 cases (5 x 5) en se déplaçant comme un cheval au échec sans jamais touchés deux fois la même case.

Le code source BASICA/GWBASIC du jeu:
10 DIM T(5,5)
20 SCREEN 0:WIDTH 40:CLS:KEY OFF:COLOR 7,0
30 PRINT "+=====================================+"
40 PRINT "|                                     |"
50 PRINT "|                                     |"
60 PRINT "|                                     |"
70 PRINT "|                                     |"
80 PRINT "|                                     |"
90 PRINT "|                                     |"
100 PRINT "|                                     |"
110 PRINT "|                                     |"
120 PRINT "|           SYLVAIN MALTAIS           |"
130 PRINT "|                                     |"
140 PRINT "|               PRESENTE              |"
150 PRINT "|                                     |"
160 PRINT "|";:COLOR 30,0:PRINT "           |     ---+  +--           ";:COLOR 7,0:PRINT "|"
170 PRINT "|";:COLOR 30,0:PRINT "           |     +--+  +-+           ";:COLOR 7,0:PRINT "|"
180 PRINT "|";:COLOR 30,0:PRINT "           |     |       |           ";:COLOR 7,0:PRINT "|"
190 PRINT "|";:COLOR 30,0:PRINT "           +--- ++--   --+           ";:COLOR 7,0:PRINT "|"
200 PRINT "|                                     |"
210 PRINT "|                                     |"
220 PRINT "|                                     |"
230 PRINT "|                                     |"
240 PRINT "+=====================================+"
250 FOR A=0 TO 3000:NEXT
320 GOTO 1020
460 IF A$=CHR$(27) THEN RUN"MAITRE"
470 A$=INKEY$:IF A$="" THEN 470
480 SCREEN 0,1,0:WIDTH 40:COLOR 7,0:CLS
490 PRINT TAB(9),"   L 2 5"
500 PRINT TAB(9),"+-+-+-+-+-+"
510 PRINT TAB(9),"| | | | | |5"
520 PRINT TAB(9),"+-+-+-+-+-´"
530 PRINT TAB(9),"| | | | | |4"
540 PRINT TAB(9),"+-+-+-+-+-´"
550 PRINT TAB(9),"| | | | | |3"
560 PRINT TAB(9),"+-+-+-+-+-´"
570 PRINT TAB(9),"| | | | | |2"
580 PRINT TAB(9),"+-+-+-+-+-´"
590 PRINT TAB(9),"| | | | | |1"
600 PRINT TAB(9),"+-+-+-+-+-+":PRINT TAB(9)," A B C D E":LOCATE 18,1:COLOR 6:PRINT "A1-":CP$="A1-"
610 XA=18:YA=4:NO=1:B$="A1":A=1:LOCATE 11,16:COLOR 6:PRINT "X":COLOR 7
620 FOR C=1 TO 5:FOR B=1 TO 5:T(C,B)=0:NEXT B,C:T(1,1)=1:B=1
630 A$="":COLOR 6,0:LOCATE 15,6:PRINT "VOTRE DERNIER COUP:"B$:PRINT SPACE$(40):PRINT SPACE$(40)
640 A$="":LOCATE 16,1:PRINT SPACE$(40):LOCATE 16,6:PRINT "VOTRE COUP(EX:C2) ?";:COLOR 22:PRINT "_";:COLOR 6
645 C$=INKEY$:IF C$="" THEN 645 ELSE IF C$=CHR$(13) THEN 630
646 PRINT CHR$(29)+C$;:COLOR 22:PRINT "_";:COLOR 6:A$=A$+C$:IF LEN(A$)=2 THEN 660 ELSE 645
660 X=ASC(LEFT$(A$,1))-64:Y=VAL(RIGHT$(A$,1))
670 IF X=1 AND Y=1 AND T(2,3)=1 AND T(3,2)=1 THEN 990
680 IF X=1 AND Y=2 AND T(3,1)=1 AND T(3,3)=1 AND T(2,4)=1 THEN 990
690 IF X=1 AND Y=3 AND T(2,1)=1 AND T(2,5)=1 AND T(3,2)=1 AND T(3,4)=1 THEN 990
700 IF X=1 AND Y=4 AND T(2,2)=1 AND T(3,3)=1 AND T(3,5)=1 THEN 990
705 IF X=1 AND Y=5 AND T(2,3)=1 AND T(3,4)=1 THEN 990
710 IF X=2 AND Y=1 AND T(1,3)=1 AND T(3,3)=1 AND T(4,2)=1 THEN 990
720 IF X=2 AND Y=2 AND T(1,4)=1 AND T(3,4)=1 AND T(4,1)=1 AND T(4,3)=1 THEN 990
730 IF X=2 AND Y=3 AND T(1,1)=1 AND T(1,5)=1 AND T(3,1)=1 AND T(3,5)=1 AND T(4,2)=1 AND T(4,4)=1 THEN 990
740 IF X=2 AND Y=4 AND T(1,2)=1 AND T(3,2)=1 AND T(4,3)=1 AND T(4,5)=1 THEN 990
750 IF X=2 AND Y=5 AND T(1,3)=1 AND T(3,3)=1 AND T(4,4)=1 THEN 990
760 IF X=3 AND Y=1 AND T(1,2)=1 AND T(2,3)=1 AND T(4,3)=1 AND T(5,2)=1 THEN 990
770 IF X=3 AND Y=2 AND T(1,1)=1 AND T(1,3)=1 AND T(2,4)=1 AND T(4,4)=1 AND T(5,1)=1 AND T(5,3)=1 THEN 990
780 IF X=3 AND Y=3 AND T(1,2)=1 AND T(1,4)=1 AND T(2,1)=1 AND T(2,5)=1 AND T(4,1)=1 AND T(4,5)=1 AND T(5,2)=1 AND T(5,4)=1 THEN 990
790 IF X=3 AND Y=4 AND T(1,3)=1 AND T(1,5)=1 AND T(2,2)=1 AND T(4,2)=1 AND T(5,3)=1 AND T(5,5)=1 THEN 990
800 IF X=3 AND Y=5 AND T(1,4)=1 AND T(2,3)=1 AND T(4,3)=1 AND T(5,4)=1 THEN 990
810 IF X=4 AND Y=1 AND T(2,2)=1 AND T(3,3)=1 AND T(5,3)=1 THEN 990
820 IF X=4 AND Y=2 AND T(2,1)=1 AND T(2,3)=1 AND T(3,4)=1 AND T(5,4)=1 THEN 990
830 IF X=4 AND Y=3 AND T(2,2)=1 AND T(2,4)=1 AND T(3,1)=1 AND T(3,5)=1 AND T(5,1)=1 AND T(5,5)=1 THEN 990
840 IF X=4 AND Y=4 AND T(2,3)=1 AND T(2,5)=1 AND T(3,2)=1 AND T(5,2)=1 THEN 990
850 IF X=4 AND Y=5 AND T(2,4)=1 AND T(3,3)=1 AND T(5,3)=1 THEN 990
860 IF X=5 AND Y=1 AND T(3,2)=1 AND T(4,3)=1 THEN 990
870 IF X=5 AND Y=2 AND T(3,1)=1 AND T(3,3)=1 AND T(4,4)=1 THEN 990
880 IF X=5 AND Y=3 AND T(3,2)=1 AND T(3,4)=1 AND T(4,1)=1 AND T(4,5)=1 THEN 990
890 IF X=5 AND Y=4 AND T(3,3)=1 AND T(3,5)=1 AND T(4,2)=1 THEN 990
900 IF X=5 AND Y=5 AND T(3,4)=1 AND T(4,3)=1 THEN 990
910 IF ((A=X-1 OR A=X+1) AND (B=Y-2 OR B=Y+2)) OR ((A=X-2 OR A=X+2) AND (B=Y-1 OR B=Y+1)) THEN 920 ELSE 980
920 IF X>5 OR Y>5 THEN 980
930 IF T(X,Y)=1 THEN 980
940 IF NO=24 THEN 1000
950 LOCATE XA,YA:PRINT MID$(A$,1,2)+"-":CP$=CP$+MID$(A$,1,2)+"-":YA=YA+3:NO=NO+1:LOCATE 13-2*Y,14+2*X:PRINT "X":T(X,Y)=1:A=X:B=Y:B$=A$
960 IF YA>39 THEN YA=1:XA=XA+1
970 GOTO 630
980 LOCATE 17,4:COLOR 28,0:PRINT "VOUS NE POUVEZ JOUEZ CE COUP.":COLOR 6,0:GOTO 640
990 SCREEN 0:WIDTH 40:COLOR 15,0:CLS:LOCATE 12,12:PRINT "VOUS AVEZ PERDUE.":GOTO 1010
1000 SCREEN 0:WIDTH 40:COLOR 15,0:CLS:LOCATE 12,12:PRINT "BRAVO! TU AS GAGNER!"
1010 FOR A=0 TO 3000:NEXT
1020 SCREEN 0,1,0:WIDTH 80:COLOR 15,0:CLS:R=7
1030 LOCATE 2,18:COLOR 30:PRINT "MENU":COLOR 7
1040 PRINT STRING$(80,"_"):LOCATE 25,1:COLOR 0,15:PRINT "PRESSE LES FLECHES("+CHR$(24)+" "+CHR$(25)+")POUR CHOISIR ET <ENTER> POUR EXECUTER . . .             ":COLOR 15,0
1050 COLOR 15,0:LOCATE 7,1:PRINT "  1-POUR IMPRIMER LES COUPS SUR L'IMPRIMENTE"
1060 LOCATE 8,1:PRINT "  2-POUR IMPRIMER LES COUPS SUR L'ECRAN"
1070 LOCATE 9,1:PRINT "  3-POUR JOUER UNE AUTRE PARTIE DE L25"
1080 LOCATE 10,1:PRINT "  4-POUR LES INSTRUCTIONS"
1090 LOCATE 11,1:PRINT "  5-POUR RETOURNER AU PRE-MENU"
1100 IF R=7 THEN B$="1-POUR IMPRIMER LES COUPS SUR L'IMPRIMENTE"
1110 IF R=8 THEN B$="2-POUR IMPRIMER LES COUPS SUR L'ECRAN"
1120 IF R=9 THEN B$="3-POUR JOUER UNE AUTRE PARTIE DE L25"
1130 IF R=10 THEN B$="4-POUR LES INSTRUCTIONS"
1140 IF R=11 THEN B$="5-POUR RETOURNER AU PRE-MENU"
1150 LOCATE R,1:COLOR 20,0:PRINT CHR$(16)" ";:COLOR 30,1:PRINT B$
1160 A$=INKEY$:IF A$="" THEN 1160
1170 K=VAL(A$):IF A$=CHR$(0)+"H" OR A$="8" THEN R=R-1
1180 IF A$=CHR$(0)+"P" THEN R=R+1 ELSE IF A$=CHR$(13) THEN K=R-6
1190 IF R=6 THEN R=11 ELSE IF R=12 THEN R=7
1200 ON K GOTO 2040,1210,480,3200,1400
1205 GOTO 1050
1210 SCREEN 0:WIDTH 40:CLS:LOCATE 10,1:PRINT "LA DERNIERE PARTIE"
1220 LOCATE 12,1:IF CP$="" THEN PRINT "VOUS N'AVEZ PAS ENCORS JOUER DE PARTIE" ELSE PRINT CP$
1230 LOCATE 15,1:PRINT "PRESSE UNE TOUCHE POUR CONTINUER . . .  "
1240 A$=INKEY$:IF A$="" THEN 1240 ELSE 1020
1400 RUN"MAITRE"
2040 LPRINT "                 L25                    ":LPRINT :LPRINT CP$
3200 SCREEN 0:WIDTH 40:CLS:LOCATE 3,14:COLOR 30,0:PRINT "INSTRUCTION":COLOR 7,0
3300 PRINT "_______________________________________"
3400 PRINT :PRINT " L25 est un jeux de logique qui consi-"
3500 PRINT "ste à jouer le plus de coup possible de"
3600 PRINT "la manière suivante:Il se déplace d'une"
3700 PRINT "case VERTICALEMENT  ou  HORIZONTALEMENT"
3800 PRINT "et puis d'une case en DIAGONALE ,lequel"
3900 PRINT "ne doit pas être ADJACENT a cel  quitté"
4000 PRINT "de tous les déplacements constitues  un"
4100 PRINT "seul déplacement ou en d'autres mots,il"
4200 PRINT "se déplace comme un cavalier au ECHEC."
4300 PRINT "_______________________________________"
4400 LOCATE 18,18:COLOR 1:PRINT "BONNE CHANCE!!":COLOR 7,0
4490 LOCATE 21,1:COLOR 0,7:PRINT "PRESSE UNE TOUCHE POUR CONTINUER...    "
4510 A$=INKEY$:IF A$="" THEN 4510 ELSE 1020

Solution

Voici une des solutions gagnant, la technique en losange:

1 14 9 20 3
24 19 2 15 10
13 8 25 4 21
18 23 6 11 16
7 12 17 22 5

Dernière mise à jour: Vendredi, le 10 novembre 2006