Lâcher la balle
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
Lorsqu'on laisse tomber une balle, elle prend de la vitesse en descendant, jusqu'à toucher le sol et, éventuellement, rebondir.
Nous négligerons ici la vitesse limite, car la balle (virtuelle) lâchée n'atteindra pas une hauteur (virtuelle) particulièrement importante.
En remontant, elle ralentit
jusqu'à atteindre une hauteur maximale.
Modéliser la physique du rebond
d'une balle est essentiel pour la conception de jeux et de simulations.
Le code suivant présente le strict
minimum nécessaire à cette modélisation, ainsi que plusieurs options permettant
à l'utilisateur de modifier les paramètres (notamment le point de lâcher de la
balle sur l'écran).
BALLDROP est un autre programme qui exploite le mode
graphique basse résolution de SCREEN 7.
Son principal atout réside dans
ses compteurs : la position verticale de la balle est incrémentée et décrémentée
par la variable Y, mais les unités d'incrémentation et de décrémentation varient
en fonction de la hauteur de la balle (plus la balle est haute, plus les unités
sont petites).
Une sous-routine, commençant à la ligne 200, permet à
l'utilisateur non seulement de positionner l'emplacement initial de la balle,
mais aussi d'effectuer un mouvement horizontal (en appuyant sur + ou —).
BALLDROP.BAS ne constitue que la première étape de la modélisation des phénomènes physiques de base pour les simulations.
Des algorithmes plus robustes permettraient de prendre en compte la gravité avec plus de précision (dans BALLDROP.BAS, chaque itération de la boucle augmente ou diminue le taux de variation de deux pour cent), à l'instar de PROD.BAS (Mouvement de projectile qui modélise le mouvement des projectiles).
BALLDROP.BAS
5 P=1:Y=80:HEIGHT=25
6 X=100
10 KEY OFF:SCREEN
7:COLOR 15,0
12 GOTO 200
15 FOR R=1 TO 3
20 WHILE Y<185
40 Y=Y+P
50 P=P*1.02
55 X=X+T
60 CIRCLE(X,Y),10
70 FOR PAUSE=1 TO 400:NEXT PAUSE
75 CLS
80 WEND
90 WHILE Y>HEIGHT
110 Y=Y-P
120 P=P*.98
125 X=X+T
130 CIRCLE(X,Y),10
140 FOR PAUSE=1 TO 400:NEXT PAUSE
150 CLS
160 WEND
170 NEXT R
200 'Subroutine: Pick a place to drop ball
205 T=0
210 CLS
220 PRINT"MOVE BALL USING A,S,W,Z"
230 PRINT"PRESS <SPACE> TO DROP THE BALL"
240 PRINT"PRESS <ESCAPE> TO EXIT"
245 PRINT"PRESS + FOR RIGHT MOVEMENT, - FOR
LEFT"
250 CIRCLE(X,Y),10
260 I$=INKEY$:IF I$="" THEN 260
265 IF
I$=CHR$(27) THEN END
270 IF I$="A" THEN X=X-1
280 IF I$="S" THEN X=X+1
290 IF I$="W" THEN Y=Y-1
300 IF I$="Z" THEN Y=Y+1
305 IF I$="+" THEN T=.3
306 IF I$="-" THEN T=-.3
310 IF X<20 THEN X=20
320 IF X>300 THEN X=300
330 IF Y<40 THEN Y=40
340 IF Y>130 THEN Y=130
345 HEIGHT=Y
350 IF I$="
" THEN P=1:GOTO 15
355 CLS
360 GOTO 210