La balle nerveuse
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
Maintenant que nous avons maîtrise les bases de PSET, PAINT, DRAW et CIRCLE, il nous reste une instruction graphique GW-BASIC importante à introduire : l'instruction POINT.
POINT renvoie la couleur du pixel à une paire de coordonnées donnée. Par exemple, si, dans SCREEN 7, nous saisissons cette commande en mode direct :
PSET(100,100),15
puis la suivons avec cette commande :
? POINT(100,100)
La sortie sera 15, la couleur du pixel à ces coordonnées. POINT transmettant des informations à un niveau aussi granulaire, il est idéal pour gérer la détection des impacts, un composant essentiel de nombreux jeux vidéo.
Le programme « balle nerveuse », illustré ci-dessous, démarre avec un écran vide qui se remplit rapidement de caractères blancs aléatoires, grâce à CHR$.
Puis, une petite balle bleue apparaît. La balle manifeste rapidement sa « nervosité » en rebondissant sur tous les caractères à l'écran. Il arrive souvent que la balle reste coincée entre deux personnages, indéfiniment. Lorsque vous en avez assez vu, appuyez sur la touche Échap pour quitter le programme.
Il est recommandé de récupérer et d'adapter ce moteur rudimentaire de détection de hits pour vos propres projets de programmation graphique.
NBALL.BAS
100 KEY OFF:SCREEN
7:CLS:RANDOMIZE TIMER
105 FOR A=1 TO 75
110
X=INT(1+22*RND(1)):Y=INT(1+40*RND(1)):C=INT(1+50*RND(1))+170
120 LOCATE
X,Y:PRINT CHR$(C)
130 NEXT A
200
X=70+INT(1+150*RND(1)):Y=70+INT(1+100*RND(1))
205 IF INT(1+2*RND(1))=1 THEN
A=1 ELSE A=-1
206 IF INT(1+2*RND(1))=1 THEN B=1 ELSE B=-1
210 CIRCLE(X,Y),2,1:PAINT(X,Y),1,1
215 FOR PAUSE=1 TO 150:NEXT PAUSE
216 CIRCLE(X,Y),2,0:PAINT(X,Y),0,0
220
X=X+A
230 Y=Y+B
232 C=INT(1+3*RND(1))
235 IF POINT(X,Y-C)=15 THEN
B=B*(-1)
240 IF POINT(X+C,Y-C)=15 THEN B=B*(-1):A=A*(-1)
245 IF POINT(X+C,Y)=15
THEN A=A*(-1)
250 IF POINT(X+C,Y+C)=15 THEN B=B*(-1):A=A*(-1)
255 IF
POINT(X,Y+C)=15 THEN B=B*(-1)
260 IF POINT(X-C,Y+C)=15 THEN B=B*(-1):A=A*(-1)
265 IF POINT(X-C,Y)=15 THEN A=A*(-1)
270 IF POINT(X-C,Y-C)=15 THEN
B=B*(-1):A=A*(-1)
280 IF INKEY$=CHR$(27) THEN CLS:END
282 IF X<10 THEN
A=A*(-1)
284 IF X>290 THEN A=A*(-1)
286 IF Y<10 THEN B=B*(-1)
288 IF
Y>180 THEN B=B*(-1)
300 GOTO 210