Tambien de quiero incluir otro listado, que espero te pueda ayudar algo.
El desplazamiento de la pelota esta basado en el modelo vectorial (módulo, argumento)
modificando V(velocidad) y A(angulo de tiro) en las líneas 280 y 300, puedes obtener diferentes rebotes. Es importante que introduzca los angulos en radianes (no en grados)
10 '
20 ' Otro programa de REBOTES
30 '
40 COLOR 2,1,1
50 Screen 2,2
60 '
70 ' Definiendo valor de pi
80 '
90 PI=22/7
100 '
110 ' Definiendo sprite
120 '
130 FOR i=1 TO 32
140 READ d
150 s$=s$+CHR$(d)
160 NEXT i
170 sprite$(0)=s$
180 '
190 ' Definiendo region de rebote
200 '
210 LINE (0,0)-(255,191),2,b
220 '
230 ' valores iniciales
240 '
250 x=50
260 y=50
270 ' Velocidad inicial y
280 v=8
290 ' Angulo inicial (en radianes 45º=pi/4)
300 a=pi/6
310 '
320 ' Bucle principal
330 '
340 IF INKEY$=CHR$(27) THEN END
350 '
360 vx=v*COS(a)
370 vy=v*SIN(a)
380 '
390 x=x+vx
400 y=y+vy
410 '
420 IF x<0 OR (x+16)>255 THEN a=pi-a:x=((x+16)>255)*(-239)
430 IF y<0 OR (y+16)>191 THEN a=-a:y=((y+16)>191)*(-175)
440 '
460 PUT sprite 0,(x,y),2,0
470 GOTO 340
480 '
490 ' Datas Sprite
500 '
510 DATA 15,48,64,70,128,128,144,144
520 DATA 144,144,136,136,70,64,48,15
530 DATA 240,12,2,2,1,1,1,1
540 DATA 1,1,1,1,2,2,12,240
En las líneas 420 y 430, habrás observado que hay expresiones de este tipo
x=((x+16)>255)*(-239) y y=((y+16)>191)*(-175)
Simplemente se esta operando con operadores lógicos. si la expresion es cierta en MSX-BASIC da como resultado -1, de ahí que haya que multiplicar por -239, o -175, para que el resultado sea positivo.
Estas expresiones evitan que la pelota se salga de los limites del rectangulo, pero no evitan un pequeño deslizamiento sobre los ejes debido a que solo se reajusta una sola coordenada. Para hacerlo mejor habría que modicar ambas coordenadas, lo que implicaría a su vez, más caluculos y por tanto más lentitud.
Pero como ejemplo creo que vale la pena. Espero que sirva de ayuda a tu Pong.
Un Saludo.