Karoshi MSX Community
05 de Julio de 2021, 08:20:12 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2 3 ... 5
  Imprimir  
Autor Tema: DESCUBRIENDO EL PONG  (Leído 23666 veces)
0 Usuarios y 1 Visitante están viendo este tema.
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« : 05 de Octubre de 2007, 05:39:05 pm »

Salud!
estoy empezando a montar un  pong en basic, bueno. digamos que estoy intentando empezarlo Cry
he estado haciendo pruebas y he decidido que primero voy a hacer uno para un solo jugador, tipo arkanoid pero sin ladrillos, algo muy sencillo a nivel gráfico (este creo que ya lo tengo resuelto, escenario y pala y su movimiento a izquierda y derecha con el mando) solo para aprender como programar el comportamiento de la pelota, estoy en casa de un amigo al que le gustan las mates y hemos estado debatiendo el como se haria,He visto en el foro que aqui hubo una especie de "certamen" sobre pong y la gente hizo programas, asi que me gustaria mucho si alguien pudiese explicarme cuales son los factores que intervendran en el movimiento de la bola, y como me recomendais hacerlo...
espero vuestra ayuda, una vez mas GRACIAS!
En línea
SapphiRe_MSX
Visitante
« Respuesta #1 : 05 de Octubre de 2007, 06:11:28 pm »

Salud!
estoy empezando a montar un  pong en basic, bueno. digamos que estoy intentando empezarlo Cry
he estado haciendo pruebas y he decidido que primero voy a hacer uno para un solo jugador, tipo arkanoid pero sin ladrillos, algo muy sencillo a nivel gráfico (este creo que ya lo tengo resuelto, escenario y pala y su movimiento a izquierda y derecha con el mando) solo para aprender como programar el comportamiento de la pelota, estoy en casa de un amigo al que le gustan las mates y hemos estado debatiendo el como se haria,He visto en el foro que aqui hubo una especie de "certamen" sobre pong y la gente hizo programas, asi que me gustaria mucho si alguien pudiese explicarme cuales son los factores que intervendran en el movimiento de la bola, y como me recomendais hacerlo...
espero vuestra ayuda, una vez mas GRACIAS!

Claro, con mucho gusto. Si quieres podemos quedar un día y me llevo el código de mi pong512 (1000 bytes) y lo vemos on the fly... A mí, por cierto, también me gustan "algo" las mates Cheesy

La idea fundamental de los rebotes es que el ángulo de entrada debe ser el mismo que el de salida, es decir, que sólo tendrás que cambiar el signo de una de las componentes de la velocidad (considerada como un vector por ser magnitud vectorial). El único problema es que pretendes hacer un pong para un único jugador, con lo que tendrás que tener en cuenta rebotes en dos direcciones (rebotes verticales y rebotes horizontales) eso complica un poquito más el tema ya que tienes que tener en cuenta también los rebotes en los ángulos.

En mi pong hay rebotes en esquinas, ángulos, paredes verticales y horizontales. La rutina de cálculo del rebote es bastante sencilla (comparada con las primeras versiones), pero merece una explicación bastante detallada y con papel y bolígrafo, así que reitero lo dicho, si quieres podemos quedar y ya lo vemos un día de éstos.

Saludos
--
SapphiRe
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #2 : 06 de Octubre de 2007, 01:00:53 am »

claro sapphire!
cuando quieras, nos vemos y yo encantado de escuchar y aprender!
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #3 : 07 de Octubre de 2007, 04:05:04 pm »

oye y mientras tanto no me podias dar algunas pistas...
por variar un poco que estoy que me salen los vpokes por las orejas... Cry
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #4 : 07 de Octubre de 2007, 09:02:52 pm »

No creo que te sirva de nada, pero aqui te pego un pedazin de codigo que he hecho en 10 minutos de una "pelota" rebotando en un cuadrado, supongo que viendo el codigo pillaras mas o menos la idea.

Código:
5 REM REBOTES
10 SCREEN 2
20 LINE (0,0)-(208,178),1,B
30 X=100:Y=100
40 VX=1:VY=-1
50 FOR N=BASE(14) TO BASE(14)+7:READ A:VPOKE N,A:NEXT N
60 PUT SPRITE 0,(X,Y),15,0
70 X=X+VX
80 Y=Y+VY
85 REM CONTROL DE REBOTES
90 IF X<1 OR X>200 THEN VX=-VX
100 IF Y<1 OR Y>170 THEN VY=-VY
110 GOTO 60
120 DATA &H18,&H24,&H42,&H81,&H81,&H42,&H24,&H18


espero que sirva de algo Tongue
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #5 : 07 de Octubre de 2007, 10:33:30 pm »

me vale! me vale!
estoy viendolo, hay que arreglar un poco las coordenadas de los limites para que quede bien... ahora te cuento y te planteo mis dudas vale?
gracias!
En línea
SapphiRe_MSX
Visitante
« Respuesta #6 : 08 de Octubre de 2007, 09:27:35 am »

El ejemplo es ilustrativo de lo que hay que hacer con los rebotes (cambiar el signo de la coordenada correspondiente de la velocidad), también tiene en cuenta que puede haber un doble rebote contra un rincón, momento en el que habría que cambiar los dos signos (las condiciones de los dos IF se hacen verdaderas).

Lo siguiente que tienes que hacer es que la pelota rebote contra las paredes que haya dibujadas (ojo, las paredes diagonales son más complicadas de calcular, usa sólo paredes horizontales y verticales. Para eso puedes hacer uso de la instrucción POINT. Deberías comprobar si está tocando con alguna pared y decidir en qué dirección (o direcciones) vas a cambiar la velocidad.

A ver si quedamos un día y te enseño el pong512 con su rutina de rebotes en ensamblador.

Saludos
--
Sph.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #7 : 08 de Octubre de 2007, 11:22:39 am »

a ver si quedamos, a ver si quedamos, que estoy ansioso y todo jejejejj

¿me podrias poner un ejemplo cortito sobre como utilizar la orden POINT? la he usado en algun juego copiado de algun libro o revista, pero no me queda claro...
Gracias otra vez Shappire! no se que haria sin tu ayuda  :god:
En línea
SapphiRe_MSX
Visitante
« Respuesta #8 : 08 de Octubre de 2007, 11:56:56 am »

¿me podrias poner un ejemplo cortito sobre como utilizar la orden POINT? la he usado en algun juego copiado de algun libro o revista, pero no me queda claro...

Claro!

Primero supongamos que la pantalla es negra (color 1) y que las paredes son de otro color. Luego la bola tiene que estar en las coordenadas X e Y y es de 8x8.

Lo primero que tienes que saber es que las coordenadas de los sprites no se corresponden exactamente con las de pantalla, por lo que tienes que hacer un ajuste previo que consiste en, simplemente, sumar 1 a la coordenada Y de la bola (esto es así, el VDP funciona así).

Ahora tendrías que ver si la bola toca por la parte de arriba con una pared, o por abajo, o por la derecha o por la izquierda...

Código:
U=POINT(X+3,Y+1)
D=POINT(X+3,Y+8)
R=POINT(X+7,Y+4)
L=POINT(X,Y+4)

Y ahora los rebotes:

Código:
IF U*D <> 1 THEN VY=-VY
IF R*L <> 1 THEN VX=-VX

Si U ó D son distintos de 1 (color de fondo) su producto será distinto de 1 y habrá que cambiar el sentido de la componente vertical de la velocidad. Lo mismo para derecha e izquierda.

Pruébalo y me comentas qué te parece.

Saludos
--
Sph.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #9 : 08 de Octubre de 2007, 01:07:46 pm »

gracias!!
cuando me dices sumar 1 a la coordenada y... ¿donde exactamente te refieres? en la coordenada y del sprite? me pierdo...
En línea
SapphiRe_MSX
Visitante
« Respuesta #10 : 08 de Octubre de 2007, 01:09:47 pm »

gracias!!
cuando me dices sumar 1 a la coordenada y... ¿donde exactamente te refieres? en la coordenada y del sprite? me pierdo...


Sí. Cuando tú pones un sprite en la coordenada vertical 49, realmente lo estás colocando en la 50 con respecto a la pantalla gráfica. Por eso cuando tienes que controlar las interacciones entre sprites y gráficos hay que hacer ese ajuste.

Saludos
--
Sph.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #11 : 08 de Octubre de 2007, 01:39:59 pm »

pero donde se hace ese ajuste? en point?
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #12 : 08 de Octubre de 2007, 01:44:49 pm »

pero donde se hace ese ajuste? en point?
sip, en el point.
En línea
msx dummie
Karoshi Lover
***
Mensajes: 162



Email
« Respuesta #13 : 09 de Octubre de 2007, 11:51:44 am »

bueno shappire tengo una duda sobre el codigo sobre point que me has explicado (lo siento, se ve que soy un poco negao Undecided...

primero no entiendo porque asignas esos valores a x y a y aqui:

U=POINT(X+3,Y+1)
D=POINT(X+3,Y+8)
R=POINT(X+7,Y+4)
L=POINT(X,Y+4)

quiero decir que porque 3 o 1 o 8 o7...

me puedes ayudar?



En línea
SapphiRe_MSX
Visitante
« Respuesta #14 : 09 de Octubre de 2007, 12:03:23 pm »

primero no entiendo porque asignas esos valores a x y a y aqui:

U=POINT(X+3,Y+1)
D=POINT(X+3,Y+8)
R=POINT(X+7,Y+4)
L=POINT(X,Y+4)

quiero decir que porque 3 o 1 o 8 o7...

Porque son los puntos de la bola que (suponiendo que tiene forma redondeada) tocan antes con las paredes: el centro de cada una de las caras del cuadrado que encierra la bola.
En línea
Páginas: [1] 2 3 ... 5
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!