Salut la compagnie
Je suis en train de recopier le code BASIC d'un manuel qui sera très prochainement téléchargeable (avec les codes sources en fichiers txt corrigés et amélioré et une disquette fd pour les TO8) de "Boite à outils pour MO5 et TO7/70" sur le site de DCMoto.
J'en suis au 10ème programme qui est un jeu de Simon sensé se jouer au crayon optique.
Le programme basic est
Code:
1000 ' ******************************
1001 ' Simon
1002 ' ******************************
1003 defint C-j:CLEAR,,4
1004 CLS:GOSUB 1010 ' Présentation et initialisation
1005 GOSUB 2000 ' Jeu
1006 GOTO 3000 ' Fin du jeu
1007 END
1010' *** Présentation et initialistion ***
1020 gosub 1100 'Présentation
1030 gosub 1700 'Initialisation
1040 return
1090 '*** Présentation du jeu ***
1100 Screen 6,0,0: Locate 14,1,0 : attrb 1,1
1170 print "SIMON"
1180 ATTRB 0,0:print:print SPC(18)"Objet"
1190 print "Jeu de mémoire."
1200 ' Job
1220 ' COLOR 5,0
1230 print:print SPC(18)"JOB"
1240 'color 5,0
1250 print "MOTO va afficher une suite"
1260 print "de symboles lumineux. Grâce au stylo"
1270 print "optique, vous devrez les restituer dans"
1280 print "le bon ordre."
1310 'Début
1320 Print:print
1330 ' Color 3,0
1340 Print spc(17)"DEBUT"
1350 'color 6,0
1360 print "Pour commencer, appuyez sur une touche"
1370 print "quelconque."
1380 B=RND: if inkey$ ="" THEN 1380 'Attente
1390 return
1690 '*** Initialisation des variables de jeu ***
1700 dim lo(16),t(100):restore
1710 for i=1 to 4
1720 READ co(i) 'couleurs des rectangles
1730 next I
1740 for i=1 to 16
1750 read lo(i) 'Coordonnées des rectangles
1760 next i
1770 for i=1 to 4
1780 read no$(i) 'Notes
1790 next i
1800 data 5,4,3,2
1810 data 125,15,175,50,240,50,290,85
1820 data 125,85,175,120,10,50,60,85
1830 data DO,RE,MI,FA
1840 CLS
1850 ATTRB 1,1 : locate 14,18: print "SIMON": attrb 0,0
1860 for I=1 to 4
1870 A=(I-1)*4+1 'On peut remplacer par 4*I-3
1880 color co(i)
1900 BOXF(lo(a),lo(a+1))-(lo(a+2),lo(a+3))
1910 next I
1920 color 6 : locate 0,22,0
1930 print "Appuyez sur une touche pour commencer"
1940 b=rnd : if inkey$="" then 1940
1950 return
1990 '*** Jeu ***
2000 ok=0:locate 0,22:print chr$(24): locate 0,23 : print chr$(24) 'Effacement de message
2010 N=N+1 : A = INT(rnd*4)+1:T(n)=a
2020 for I=1 to N
2030 A=(t(i)-1)*4+1
2040 X1=lo(a):y1=lo(a+1):x2=lo(a+2):y2=lo(a+3)
2050 gosub 2300 'affichage de la case sélectionnée
2060 next i
2070 for i=1 to n
2080 input pen X,Y 'Saisie crayon optique
2085 locate 0,22: print X,Y CHR$(24)
2090 gosub 2500 'Test si réponse OK
2095 if p=0 then 2080 'Ajout sur le programme original
2100 a=(p-1)*4+1
2110 X1=lo(a):y1=lo(a+1):x2=lo(a+2):y2=lo(a+3)
2120 gosub 2300 'Affichage
2130 next i
2140 if ok=-1 then 2010
2150 return
2290'*** Affichage d'une case sélectionnée ***
2295'** Réponse correcte OK=-1 sinon OK=1 ***
2300 color 1
2310 boxf(X1,Y1)-(X2,Y2)
2320 if ok=1 then I=n:play "SISISISISI": color co(P) ELSE play no$(t(i)) : color co(t(i))
2350 'color co(t(i)) 'Couleur d'origine
2360 boxf(X1,Y1)-(X2,Y2)
2370 return
2490 '*** Test si réponse correcte ***
2500 P=0
2510 if Y<lo(4)+1 and y>lo(2)-1 and X<lo(3)+1 and X>lo(1)-1 then P=1 'Haut
2520 if Y<lo(8)+1 and y>lo(6)-1 and X<lo(7)+1 and X>lo(5)-1 then P=2 'Droite
2530 if Y<lo(12)+1 and y>lo(10)-1 and X<lo(11)+1 and X>lo(9)-1 then P=3 'Bas
2540 if Y<lo(16)+1 and y>lo(14)-1 and X<lo(15)+1 and X>lo(13)-1 then P=4 'Gauche
2550 if t(i)=P then ok=-1 else if p<>0 then ok=1
2560 return
2999 '*** Fin de partie ***
3000 COLOR 6,0 ': cls
3010 locate 0,22 : print "Perdu au bout de "N" notes."
3050 Locate 0,23 : print "Une autre partie ?"
3060 r$=inkey$ : if r$="" then 3060
3070 if r$="O" then N=0: locate 0,22 : print chr$(24):locate 0,23 : print chr$(24): goto 1005
3080 'LOAD "AUTO.BAT",R
3100 '*******************************
Quand on lance ce programme sous DC Moto (mode TO8D et 1 au lancement) le jeu fonctionne bien sauf quand il s'agit de cliquer avec le crayon optique sur le rectangle bleu!
J'ai ajouté une instruction pour afficher les coordonnées du light pen quand on clique dessus, et dans la zone bleue (comme dans les zones noires d'ailleurs), ça met "-1 ,-1" en coordonnées X et Y... alors qu'avec les couleurs plus claires (Jaune, Magenta etc) ça donne les bonnes coordonnées. Et à cause de ça, le jeu ne peut se jouer. Est ce dû à une erreur de DC Moto ? ou est ce que le lighpen dans la réalité est incapable de visualiser ce qui est en bleu (et autre couleur sombre) ?
Il y a pas mal d'erreur ou de manques d'optimisation dans les programmes basic de l'auteur mais je ne pense pas que ceci en sot une. Je ne sais pas comment fonctionne le lighpen, je pensais que quelle que soit l'endroit où on clique, ça donnait les bonne coordonnées ?
D'autre part, il y a aussi un problème récurrent si je choisi le mode 2 du TO8 et que je recopie le code via l'outil dédié sur DCMoto (copier coller)., le recopiage s'arrête toujours à un certain endroit et DC Moto plante (faites le test avec ce code basic et vous comprendrez), c'est pourquoi je n'utilise que me mode 1 (Basic 512).
ADDENTUM : en mettant la couleur du 2ème rectangle en cyan (indice 6) le crayon optique fonctionne cette fois, mais pas avec la couleur 4.