Tennis de table
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
On ignore souvent que l'entrepreneur Nolan Bushnell et le brillant ingénieur Al Alcorn, les co-créateurs de Pong – ce jeu d'arcade culte du début des années 1970, un jeu de tennis de table virtuel dont les instructions, concises et imprimées sur la borne, disaient :
« Évitez de rater la balle pour obtenir le meilleur score »
se sont inspirés du jeu de raquettes et de balles « Tennis » de l'Odyssey Home Entertainment System de Magnavox.
Bushnell avait d'ailleurs pu observer un prototype de ce dernier avant de concevoir Pong.
Dès 1975, Pong débarque dans les foyers américains grâce au système Home Pong, commercialisé par Atari, la société de Bushnell, et non par Magnavox.
Atari dominera ensuite le marché
des jeux vidéo domestiques pendant le reste de la décennie (après avoir réglé un
procès contre Magnavox pour violation de droits d'auteur).
TENNIS.BAS,
dont le code est présenté ci-dessous, n'est pas un clone de Pong à proprement
parler, mais il vise à illustrer comment créer sa propre version en GW-BASIC.
Les raquettes et la balle sont d'abord dessinées et stockées en mémoire via des requêtes GET.
Ensuite, des requêtes PUT
permettent de les afficher à leur emplacement respectif à l'écran.
La
raquette située à droite de l'écran se déplace verticalement en fonction de la
coordonnée y de la balle, de sorte qu'elle est toujours synchronisée avec elle.
À chaque fois que la balle touche les bords de
l'écran (lignes 260 à 280) ou la raquette du joueur (ligne 400), sa direction
est instantanément inversée et sa vitesse dans cette nouvelle direction est
aléatoire.
Enfin, observez comment le « filet » à l'écran est dessiné en
pointillés grâce à l'opérateur modulo (lignes 211 à 213).
TENNIS.BAS présente trois problèmes majeurs :
(1) il est impossible pour le joueur de marquer le moindre point contre l’ordinateur,
(2) le manque de finesse des graphismes, du son et du gameplay le rend totalement inintéressant (et provoque des scintillements désagréables), et
(3) il manque de variété : pas de niveaux différents, pas de défis variés, etc.
Trouver des solutions satisfaisantes à ces problèmes permettra non seulement d’améliorer le jeu, mais constituera également un exercice de programmation extrêmement enrichissant.
TENNIS.BAS
10 KEY OFF:SCREEN 7:COLOR 15,0:CLS:RANDOMIZE TIMER:C=0
20 DIM PADDLE(100):DIM BALL(100)
25 PSET(2,2),15:LINE -(2,34),15:LINE
-(16,34),15:LINE -(10,2),15:LINE -(2,2),15
30 PAINT(3,3),15,15
40
GET(2,2)-(10,34),PADDLE
50 CLS
60 PSET(2,2),15:LINE -(2,10),15:LINE
-(10,10),15:LINE -(10,2),15:LINE -(2,2),15
70 PAINT(3,3),15,15
80
GET(2,2)-(10,10),BALL
90 CLS
100 PRINT ,"--- TENNIS ---"
110
PRINT:PRINT"TO MOVE THE PADDLE UP/DOWN, PRESS W/Z"
120 PRINT"TO EXIT AT ANY
TIME, PRESS <ESC>"
130 PRINT"PRESS ANY OTHER KEY TO START..."
140
Y$=INKEY$
150 IF Y$="" THEN 140
160 IF Y$=CHR$(27) THEN END ELSE 200
170 GOTO 140
200 X=150:Y=100:PY=Y:A=INT(1+3*RND(1))-2:B=INT(1+3*RND(1))-2:YY=100
205 IF A=0 THEN A=1
210 CLS
211 FOR LOOP=1 TO 200
212 IF LOOP MOD
3=0 THEN PSET(160,LOOP),15 'Creates the "net"
213 NEXT LOOP
214 LOCATE
1,16:PRINT"0":LOCATE 1,24:PRINT C
215 I$=INKEY$
216 IF I$=CHR$(27) THEN
CLS:END
217 IF I$="W" OR I$="w" THEN YY=YY-5
218 IF I$="Z" OR I$="z" THEN
YY=YY+5
220 IF YY<10 THEN YY=10
222 IF YY>160 THEN YY=160
240 PUT(X,Y),BALL,XOR:PUT(300,PY),PADDLE:PUT(5,
YY),PADDLE
242 FOR PAUSE=1 TO 160:NEXT PAUSE
245 PUT(X,Y),BALL:PUT(300,PY),PADDLE:PUT(5,YY),
PADDLE
250 IF (X<14) THEN GOSUB 400
260 IF (X>290) THEN A=-(A+INT(1+3*RND(1))-2)
270 IF (Y<20) THEN B=-(B+INT(1+3*RND(1))-2)
280 IF (Y>170) THEN B=-(B+INT(1+3*RND(1))-2)
281 IF A<-3 THEN A=-3
282 IF A>3 THEN A=3
283 IF B>3 THEN B=3
284 IF
B<-3 THEN B=-3
285 PY=Y:IF PY>150 THEN PY=150
290 X=X+A
300 Y=Y+B
310 GOTO 215
400 IF YY<=Y AND (YY+40)>=Y THEN A=-(A+INT(1+3*RND(1))-2):RETURN
410 C=C+1
420 GOTO 200