Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: msx dummie en 05 de Octubre de 2007, 05:39:05 pm



Título: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 05 de Octubre de 2007, 05:39:05 pm
Salud!
estoy empezando a montar un  pong en basic, bueno. digamos que estoy intentando empezarlo :'(
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!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 05 de Octubre de 2007, 06:11:28 pm
Salud!
estoy empezando a montar un  pong en basic, bueno. digamos que estoy intentando empezarlo :'(
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 :D

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


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 06 de Octubre de 2007, 01:00:53 am
claro sapphire!
cuando quieras, nos vemos y yo encantado de escuchar y aprender!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 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... :'(


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 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 :P


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 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!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 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.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 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:


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 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.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 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...


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 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.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 08 de Octubre de 2007, 01:39:59 pm
pero donde se hace ese ajuste? en point?


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 08 de Octubre de 2007, 01:44:49 pm
pero donde se hace ese ajuste? en point?
sip, en el point.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 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 :-\...

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?





Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 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.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 10 de Octubre de 2007, 08:58:27 pm
ok, ok, lo tengo.
Sapphire, una vez más! grácias!
ahora que ya esta funcionando, me asaltan nuevas dudas:

La primera, de paquete total es: ¿que tengo que hacer en el portatil para pulsar "control+stop" e interrumpir el programa con blue msx?

La segunda: He introducido la pala, y la muevo desde los cursores, pero no consigo que la pelota rebote al tocarla, he estado probando pero parece ser que el point este, no vale... asi que he probado activando la colisión de sprites con SPRITE ON pero basta con tocar las teclas, solo, para que la pelota cambie de dirección...
Asi que ¿Que metodo deberia utilizar?

y la tercera y ultima: me gustaria que la bola fuese cada vez mas rapido, habia pensado en hacer algo asi:

T=INT(TIME/50)+1

Y Despues sumarle en cada vuelta el valor de t a X o a Y, pero se ve que no funciona... ¿como se debe hacer esto?


Título: Re: DESCUBRIENDO EL PONG
Publicado por: pitpan en 11 de Octubre de 2007, 07:16:32 am
Si no has cambiado la configuración por defecto, creo que el equivalente en BlueMSX de CTRL+STOP es CTRL+RetrocederPágina.

En cuanto a tu otra pregunta, efectivamente, POINT no te vale. POINT lee el color del fondo, pero nunca leerá los sprites porque estos quedan por encima del fondo gráfico. Podrías hacerlo con SPRITE ON:ON SPRITE GOSUB XXX, pero tampoco me parece una buena solución. Te recomendaría que comprobases coordenadas, simplemente. Es decir, si la pelota está horizontalmente al lado de la pala y la coordenada vertical no es superior a la parte alta de la pala, ni inferior a la baja, entonces ejecuta el rebote.

Esta técnica viene a llamarse "dirty rectangles". Asegúrate de que haces los ajustes correspondientes a la anchura y altura de la pala y de la pelota para que funcione correctamente.

Y sigue probando :)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 11 de Octubre de 2007, 11:38:47 am
gracias robsy! me pongo con ello...
aunque  mi pala está formada por 3 sprites de 8*8, asi que me imagino que tendre que tener en cuenta la distancia total de los 3 sprites (px,py)(px,py+8)(px,py-8)

lo que dudo es como programar esa condición, como seria?

imaagino que algo asi:

IF X=PX AND...

¿Como seria para decirle que no es mayor? DIOSSSS QUE PAQUETE!!!!!!!

MUCHAS GRACIAS!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 11 de Octubre de 2007, 11:53:46 am
¿Como seria para decirle que no es mayor? DIOSSSS QUE PAQUETE!!!!!!!

NOT (A>B) equivale a (A<=B)

:P


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 11 de Octubre de 2007, 12:16:17 pm
Shappire! eres el amo de la sintesis, jejej, mil gracias!

entonces si lo he entendido seria algo asi como:

IF X=PX AND Y<=PY+8 AND Y>=PY-8 THEN VX=-VX

Si??????

no tengo aqui ningun emulador funcionando para probarlo... y lo quiero saber.
poooooorrrr faaaavoooooorrr!!!! :god:


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 12 de Octubre de 2007, 05:43:59 pm
bueno, despues de unas cuantas pruebas he dado con ello, gracias a todos otra vez!
ya tengo la pelota rebotando en el recinto y también cuando se encuentra con la pala, que bieeeeeeeeennn!!!!!!!!!
ahora mi siguiente duda es como conseguir que la pelota vaya cada vez mas rapido segun pase el tiempo, no consigo hacerlo...
¿alguna pista? muchas gracias!
Salud!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 13 de Octubre de 2007, 10:29:48 am
bueno, despues de unas cuantas pruebas he dado con ello, gracias a todos otra vez!
ya tengo la pelota rebotando en el recinto y también cuando se encuentra con la pala, que bieeeeeeeeennn!!!!!!!!!
ahora mi siguiente duda es como conseguir que la pelota vaya cada vez mas rapido segun pase el tiempo, no consigo hacerlo...
¿alguna pista? muchas gracias!
Salud!

solo tienes de ir incrementando una variable contador y cuando llege a cierto numero incrementas la velocidad de la bola y pones esa variable contador a cera

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar


espero que te sirva.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 13 de Octubre de 2007, 10:40:14 am
C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar

Realmente lo ideal sería trabajar con vectores e ir aumentando la velocidad lineal de forma constante, no las componentes individuales. Es decir aumentar el módulo del vector, no sus componentes. De momento creo que no tienes ningún código que cambie los ángulos de la bola, ¿verdad? Si es así esta solución es más que suficiente... prueba...


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 13 de Octubre de 2007, 12:24:49 pm
C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar

Realmente lo ideal sería trabajar con vectores e ir aumentando la velocidad lineal de forma constante, no las componentes individuales. Es decir aumentar el módulo del vector, no sus componentes. De momento creo que no tienes ningún código que cambie los ángulos de la bola, ¿verdad? Si es así esta solución es más que suficiente... prueba...


Shapp, si puedes expandir un poco mas las explicación te lo agradeceria mucho, ya que yo de mates ando muy cojo y me vendria muy bien :)
(con seudo codigo me apañaria bien)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 13 de Octubre de 2007, 07:48:23 pm
solo tienes de ir incrementando una variable contador y cuando llege a cierto numero incrementas la velocidad de la bola y pones esa variable contador a cera

C=C+1
IF C=100 THEN C=0:VX=VX+1:VY=VY+1

tendras de comprobar si los valores son negativos o positivos antes de incrementar


como compruebo si los valores son positivos o negativos robsy?
por cierto ayer estuve jugando al pong que convertiste a msx, esta muy guapo tio, muy rapido!
gracias otra vez!
saludos.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 14 de Octubre de 2007, 01:33:20 am
Shapp, si puedes expandir un poco mas las explicación te lo agradeceria mucho, ya que yo de mates ando muy cojo y me vendria muy bien :)
(con seudo codigo me apañaria bien)

Con una condición: ESCRIBID BIEN MI NICK!!!  ;D ;D ;D ;D ;D

Veamos, la idea es tener por separado M el módulo del vector velocidad y A el ángulo en el que se mueve y a partir de ahí calcular VX y VY. M siempre va a ser positivo y A valdrá entre 0 y 2*PI (en radianes).

Las fórmulas para pasar del par módulo, ángulo al par VX, VY serían:

Código:
VX=COS(A)*M
VY=-SIN(A)*M

En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))

Después la idea es que según en qué parte del bate golpee la bola se tendría que variar el ángulo (sin cambiar el módulo) para que haya un cambio de dirección en los rebotes. De esta forma se puede obtener una mayor precisión a la hora de ir moviendo la bola e incrementando la velocidad.

Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima :D

Saludos
--
Sph.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: Jos'b en 14 de Octubre de 2007, 08:02:22 am
En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))


Saphh, creo que para un rebote con pared horizontal, bastaría ( A=-A ), y para el rebote con pared vertical, bastaria también ( A=PI-A ), por supuesto sin tocar Vx ni Vy, se trabajaría con ángulos negativos pero no influiría en el resultado. Y luego aplicar directamente las formulas
Vx=M*cos(A) y Vy=M*sin(A). Donde M sería la velocidad real de la pelota.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 14 de Octubre de 2007, 08:45:11 am
En los choques con las paredes no habría que cambiar el módulo, pero sí el ángulo de acuerdo a lo siguiente:

  • Si tenemos que hacer VY=-VY también haremos A=2*PI-A
  • Si tenemos que hacer VX=-VX también haremos A=PI-A-(2*pi*(A>PI))


Saphh, creo que para un rebote con pared horizontal, bastaría ( A=-A ), y para el rebote con pared vertical, bastaria también ( A=PI-A ), por supuesto sin tocar Vx ni Vy, se trabajaría con ángulos negativos pero no influiría en el resultado. Y luego aplicar directamente las formulas
Vx=M*cos(A) y Vy=M*sin(A). Donde M sería la velocidad real de la pelota.


En efecto, son cálculos equivalentes. Yo normalizaba A de forma que siempre esté entre 0 y 2*PI (perfeccionista que es uno). El motivo de hacer el cálculo con VX y VY era por no utilizar las fórmulas de SIN y COS más de lo necesario... aunque sólo va en los rebotes, igual no es mucho cálculo... Probad, yo es que ya pienso en ensamblador y claro... ;D ;D ;D

Lo que no incluí es la fórmula para calcular PI, ahí os va:

Código:
PI=ATN(1)*4

¡¡Se me olvidaba!! Si aumentamos la velocidad de la bola tenemos que asegurarnos de que las paredes son lo suficientemente gruesas como para que no se puedan atravesar. Lo ideal es tener un tope de velocidad (pongamos 4, por ejemplo) y que el grosor de las paredes sea dicho límite.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 14 de Octubre de 2007, 04:59:30 pm

Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima

YO ME ANIMO, ME ANIMO!
Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde...
mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa.... >:(


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 15 de Octubre de 2007, 12:12:40 pm

Por mi parte quizá podría quedar hoy domingo un ratillo por la tarde, lo suelto por si borjazoo se anima

YO ME ANIMO, ME ANIMO!
Lo que pasa es que acabo de ver el mensaje, y son ya las 6 de la tarde...
mieeeeeeeeeeerrrrrrrrrrdaaaaaaaaaaaaaaaa.... >:(

A las 3 dejé de mirar internet ya que me fui a comer con mis padres... y como no había noticias tuyas a las 7 y pico quedé con un colega... En otra ocasión será...


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 15 de Octubre de 2007, 12:28:08 pm
claro, no te preocupes, me dio rabia porque tengo ganas de que me expliques muchas cosas... pero en otra ocasión sera...

ayer estuve mirando todo lo que habeis comentado sobre la velocidad y los angulos, estuve pasando la lista de variables y condiciones al cuaderno para empezar otra vez el programa asi.
también me gustaria que dependiendo del lugar de la pala que toque la bola, también varie el sentido de "y" creo que podria hacerlo programando el resto de condiciones para calcular en cual de los sprites esta rebotando y alterar en base a eso.

y despues ya solo me faltaria la rutina de puntuación y todo eso, ante esto tengo una duda, bueno, no es sobre esto sino sobre como puedo utilizar textos en screen 2 para que sean distintos de los standart, en el listado de JLturstan del Maze Chase, observe que con "open" hacia que se escribiesen textos en pantalla, pero no eran los textos normales, tenian un formato mas chulo, por eso me estaba preguntando:

 ¿de que manera se hace esto?

¿hay que definir primero los sprites de los textos y asignarlos a cada letra o algo así?

gracias otra vez!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 15 de Octubre de 2007, 01:39:36 pm
también me gustaria que dependiendo del lugar de la pala que toque la bola, también varie el sentido de "y" creo que podria hacerlo programando el resto de condiciones para calcular en cual de los sprites esta rebotando y alterar en base a eso.

En lugar de calcular con qué sprite rebota mejor calcula la distancia de la bola al centro de la paleta, tienes las coordenadas Y de cada elemento, así que no tendrías ningún problema.

Saludos
--
Sph.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: jltursan en 15 de Octubre de 2007, 02:08:04 pm
Citar
como puedo utilizar textos en screen 2 para que sean distintos de los standart, en el listado de JLturstan del Maze Chase, observe que con "open" hacia que se escribiesen textos en pantalla, pero no eran los textos normales, tenian un formato mas chulo, por eso me estaba preguntando

Nope, te debes estar confundiendo de listado ;). En el caso del chase empleé screen 1; así que la salida se hace con simples PRINT. Para conseguir carácteres diferentes a los de la BIOS sólo tienes que redefinirlos, ya sabes, más caña a esas famosas direcciones de memoria VRAM. En este caso el mapa de la memoria es diferente al de screen 2:

Código:
SCREEN 1
----------------------
0000-07FF   Definición de carácteres
1800-1AFF   Mapa de carácteres
1B00-1B7F   Atributos de sprites
2000-201F   Colores de los caracteres
3800-3FFF   Definición de sprites

Tienes todos los modos de video desglosados aquí (http://nocash.emubase.de/portar.htm#videomodesscreens)

Para definir un carácter sólo tienes que "vpokear" su nuevo aspecto en las direcciones correspondientes de la tabla de definición de carácteres. En el modo screen 1 ocupa las direcciones 0000-07FF; así que con un poco de matemática simple podrás ver que esos 2048 bytes salen de multiplicar 256 carácteres posibles por 8 bytes por carácter. Si queremos cambiar la letra A mayúscula, por ejemplo, lo haremos así:

Código ASCII de la "A": 65 * 8 = &H208 (aquí comienzan los 8 bytes que determinan la forma de la A)

VPOKE &H208,255
VPOKE &H209,129
VPOKE &H20A,129
VPOKE &H20B,129
VPOKE &H20C,255
VPOKE &H20D,129
VPOKE &H20E,129
VPOKE &H20F,129

Teclea alguna A mayúscula y verás el cambio. ¿Lo has pillado? ;)

Y antes de que te lances ya te contesto yo. No, en screen 2 no se puede hacer lo mismo (sin utilizar trucos sucios o muy sucios ;D). Si quieres imprimir un caracter en SC2 tienes que usar ese "open" que decias y usar "print#" para obtener los carácteres estandar. Si estás muy interesado en continuar usando SC2 ya te explicamos como seguir por la via sucia o incluso por la muy sucia ;)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 15 de Octubre de 2007, 05:31:43 pm
ok. ok.
estoy con ello, pensaba que screen 1 limitaba el  tema del espacio del campo... y que no se podia dibujar con "line, draw, etc..."
gracias JL!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 15 de Octubre de 2007, 05:55:13 pm
estoy con ello, pensaba que screen 1 limitaba el  tema del espacio del campo... y que no se podia dibujar con "line, draw, etc..."

Es que no se puede dibujar en SC1... al menos no con esas instrucciones. Sólo redefiniendo caracteres, nada más.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: jltursan en 15 de Octubre de 2007, 08:37:35 pm
Citar
... y que no se podia dibujar con "line, draw, etc...

Y como dice Sapphire no se puede; además, ¡que no me entere yo que usas lines, circles y psets (el draw te lo perdono)!, que eso es sólo para hacer casitas :D

La clave está en redefinir los caracteres y usar bien los sprites, con eso ya te puedes montar unos jueguecillos muy chulos. ¿Por qué no te vas planteando ya una meta?, el pong está bien para hacer los primeros experimentos; pero igual empiezas a ver ya un poco más allá... ;)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: nerlaska en 15 de Octubre de 2007, 09:42:58 pm
Yo creo que igual tendrias que hacer el "Penguin Adventure 2" que tiene pinta de ser facilongo en BASIC :D


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 16 de Octubre de 2007, 10:01:17 am
Yo creo que igual tendrias que hacer el "Penguin Adventure 2" que tiene pinta de ser facilongo en BASIC :D


he oido metal gear solid BASIC operations ?   ;)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 16 de Octubre de 2007, 10:50:54 am
Yo quiero un Nemesis BASIC al que poder meterle mano :D (o sea, código abierto)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 16 de Octubre de 2007, 11:50:05 am
JAJAJAJJ
oye no me vacileis... :D

lo del nemesis esta hecho! jajajj lo tengo casi terminado, pero tengo un problemilla cuando se abren las bocas de las cabezas de Pascua, me va un pelin lento con tanto sprite... ;)

no, en serio, lo del pong me ha venido muy, muy bien, con vuestra ayuda he comprendido muchas cosas basicas, pero la verdad es que me veo muy pez todavia, he construido pequeños juegos y chapucillas varias, pero no sabria que hacer en basic, todavia me faltan por comprender muchisimas cosas,m quiza me podais decir que hariais vosotros en mi lugar, no se...
proponedme un reto!! pero no os paseis ;D

un abrazo chicos, gracias, de corazon.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 16 de Octubre de 2007, 12:05:33 pm
proponedme un reto!! pero no os paseis ;D

Aprovecha el engine del PONG para hacer un arkanoid o un krakout... :P


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 16 de Octubre de 2007, 12:24:50 pm
yo creo que debes centrarte en terminar el pong, TERMINALOOOO antes de que tu carpeta de proyectos noterminados supere a la de los terminados....  o te pasara como a mi,he tenido tantos proyectos inacabados que me volvia loco (de esto ya hace mucho tiempo, aun vendian juegos de msx en las tiendas xD)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 16 de Octubre de 2007, 01:12:41 pm
voy a terminarlo, seguro, lo que estoy pensando es en añadirle cositas segun este terminado, algun ladrillo tipo arkanoid que aparezca por el medio y alguna otra tonteria mas que tengo pensada, pero lo voy a terminar, y cuando esté terminado ya me lanzo a por el salamander2007 (integramente en basic) jejejej
no, de verdad, cuando lo termine pasare a otra cosa, pero quiero acabarlo...


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 16 de Octubre de 2007, 01:46:05 pm
antes de que tu carpeta de proyectos noterminados supere a la de los terminados....
Es cierto. Pongamos, por ejemplo, mi caso:

Proyectos terminados: 3
Proyectos no terminados pero de los que algo hay : 10
Proyectos que terminaré para el año que viene: 1 ó 2
Ideas: nan (not a number ;D ;D ;D )


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 16 de Octubre de 2007, 03:17:44 pm
bueno, vamos ya con la chapa del dia, os cuento por donde voy:

tengo la pelota rebotendo en un recinto cerrado, con mi pala a la derecha, la pelota rebota con las paredes a traves del mandato point, tal y como SapphiRe me enseño, y los rebotes con la pala los he calculado asi: (teniendo en x e y las coordenadas de la bola y en px y py las de el sprite central de la pala)(la pala esta formada por 3 sprites:

IF X=PX-5 AND Y<=PY+16 AND Y>=PY-16 THEN VX=-VX

Asi la pelota rebota, pero siempre de la misma manera, quiero decir si viene de arriba rebota hacia abajo y viceversa, pero a mi me gustaria que dependiendo de la zona de la pala donde rebote, pues el rebote sea de una manera u otra... me esta costando, estoy haciendo pruebas yno doy con ello...

¿como lo hariais? porque el problema que me encuentro no es dividir la pala, sino comprobar que valor tiene "y" cuando llega a la pala, positivo o negativo, y no se como se hace...

ademas segun Jlturstan, no se suelen usar el comando line y todo esto, y mi campo esta hecho asi, ademas también la programación de los rebotes del campo, que esta ejecutada con point... asi que,,,

¿como se programaria entonces, si hago las paredes con sprites en vez de con line?


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 16 de Octubre de 2007, 03:37:16 pm
hola,

una forma sencilla de saber si el numero es positivo o negativo es asi

if x>0 then positivo else negativo

lo de screen 1 y las colisiones mejor se lo dejo a otro, a mi se me ocurre una cosa(vpeek), pero me parece que no seria la mejor solucion para un juego tipo pong



Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 16 de Octubre de 2007, 03:50:41 pm
ademas segun Jlturstan, no se suelen usar el comando line y todo esto, y mi campo esta hecho asi, ademas también la programación de los rebotes del campo, que esta ejecutada con point... asi que,,,

¿como se programaria entonces, si hago las paredes con sprites en vez de con line?

Con caracteres redefinidos, no con sprites.

Tendrías que mirar cuál es el carácter que hay bajo la pelota y obrar en consecuencia. Es más rápido que una instrucción point gracias a la estructura de la memoria de vídeo de los MSX. Pero olvídalo de momento... termina el pong tal y como lo tienes :D


Título: Re: DESCUBRIENDO EL PONG
Publicado por: SapphiRe_MSX en 16 de Octubre de 2007, 03:51:21 pm
lo de screen 1 y las colisiones mejor se lo dejo a otro, a mi se me ocurre una cosa (vpeek), pero me parece que no seria la mejor solucion para un juego tipo pong

Es, de hecho, la solución :D


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 16 de Octubre de 2007, 03:58:33 pm
lo de screen 1 y las colisiones mejor se lo dejo a otro, a mi se me ocurre una cosa (vpeek), pero me parece que no seria la mejor solucion para un juego tipo pong

Es, de hecho, la solución :D


abs, yo pensaba que habria una solucion mas Pixel a pixel, ya que trabajando con vpeek solo podra comprobar de 8 en 8 pixels
¿nop?


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 16 de Octubre de 2007, 04:11:28 pm
bueno, teniendo en cuenta que estoy en screen 2, mantendre este modo de pantalla de momento, a ver si lo puedo acabar aqui...

porque con los vpeek y vpoke ando bastante perdido todavia.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: jltursan en 16 de Octubre de 2007, 04:27:19 pm
Si, si, haces bien. En screen 2 de momento es más fácil dibujar el campo con lines y los objetos móviles con sprites. ¿Tienes marcador?, para eso el draw te podría venir bien... :)

Tal como lo tienes las colisiones las tienes que controlar comparando coordenadas o utilizando las colisiones de sprites (aunque creo que no conseguiste hacerlo funcionar así, ¿verdad?).


Título: Re: DESCUBRIENDO EL PONG
Publicado por: jltursan en 16 de Octubre de 2007, 04:41:40 pm
Citar
abs, yo pensaba que habria una solucion mas Pixel a pixel, ya que trabajando con vpeek solo podra comprobar de 8 en 8 pixels

Para chequear las paredes puede venir muy bien en caso de usar screen 1. Con un solo vpeek testeas los muros y así te ahorras 2 comparaciones sobre la Y, de todas formas no se que sería más rapido, hay que tener en cuenta que el vpeek necesitaría calcular la posición de memoria sobre la que se encuentra la bola. Todo es cuestión de probar a ver que es más rápido.

Citar
proponedme un reto!! pero no os paseis

En BASIC quedan fenomenal los puzzles, las aventuras conversacionales, los juegos de estrategia (simple), juegos de mesa y pequeños arcades, como el pong, en los que no se mueven muchos objetos. La cuestión es hacerlo lo mejor que uno pueda, no conformarse con cualquier cosa ;)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 16 de Octubre de 2007, 04:55:04 pm
Claro, claro JL yo quiero hacer un pong, que sea algo mas que eso, de hecho tengo pensadas algunas ideas que creo que podrian estar muy bien, pero tengo que ir poco a poco...
quien sabe... a lo mejor me puedo presentar al msxdev 2070 ;)
estoy dandole mucha caña, pero fui un renegado por asi decirlo en el colegio y el instituto y las mates sieeeemmpre me quedaban, asi que me cuesta, pero dia a dia avanzo, ya sabes lo que dice uno de los grandes de por aqui:
 
¿que es lo que has aprendido hoy? :) (me encanta)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 20 de Octubre de 2007, 08:56:41 pm
saludos de nuevo chicos!
a ver, necesito de nuevo que alguien me salve porque me va a estallar la cabeza...

he estado probando aplicando las formulas que me daba Sapphire y he montado un caos de escandalo, no me funciona nada bien, tengo varias dudas:
lo que sucede es que la bola se sale del campo, como si no respetase el point, tampoco me respeta la programación de los rebotes en la pala, ni aumenta la velocidad ni cambia el angulo de nada... :'(

no entiendo lo que pasa, tenemos a M como modulo vector de velocidad, pero que valor inicial tiene?
y A?? tampoco tiene ningun valor inicial?

ademas no comprendo esta formula:

a=pi-a-(2*pi*(a>pi))

como se despeja (a>pi)??? quiero decir que que significa esta expresión???

también he probado del otro modo, con la variable contador c, haciendo lo de:

c=c+1:if c>100 then c=0...

y todo esto que me comentabais como primera opcion, y de este modo tampoco me funciona, llega un momento en el que la bola va mas lenta, deja de rebotar y cambia el angulo!!!!

no se, debo de ser un tarugo, pero no entiendo nada, os agradeceria mucho que recapitulasemos a ver donde lo estoy haciendo mal...
gracias de nuevo gente, un saludo!




Título: Re: DESCUBRIENDO EL PONG
Publicado por: pitpan en 22 de Octubre de 2007, 07:37:00 am
Es muy posible que no te funcione el POINT porque te suceda algo así:

- Momento 1: X=99
- Momento 2: si la velocidad es 1.6, entonces X=X+1.6=100.6

Por lo tanto, al hacer un POINT con la X o utilizarla en un IF, X<>100 porque ha pasado directamente de 99 a 101 debido al efecto de usar velocidades no enteras. No sé si te ha quedado claro, pero es un error bastante habitual cuando algo deja de moverse a velocidad 1.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 22 de Octubre de 2007, 10:48:07 am
Gracias Robsy!
pero yo solo estoy utilizando enteros...(que yo sepa)
x=x+vx   cuando vx es siempre igual a 5... entonces...
no se, lo de point en un momento dado, podria hurgarlo y ver, pero me interesaba mucho lo de la velocidad y los angulos, y eso es lo que no funciona ni de coña.
un saludo!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 22 de Octubre de 2007, 11:10:50 am
Gracias Robsy!
pero yo solo estoy utilizando enteros...(que yo sepa)
x=x+vx   cuando vx es siempre igual a 5... entonces...
no se, lo de point en un momento dado, podria hurgarlo y ver, pero me interesaba mucho lo de la velocidad y los angulos, y eso es lo que no funciona ni de coña.
un saludo!

sin ver el código fuente creo que poco se puede hacer por el tema de la velocidad y los ángulos...

veo que al final te has decantado por el sistema "complejo" es una buena elección, pero te costara mas sacarlo.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 22 de Octubre de 2007, 11:13:09 am
bueno, basicamente me he decantado por cualquiera que funcione, pero es que ninguno lo hace...
probe a utilizar una variable contador y que cuando llegase a cierto punto aumentase la velocidad, pero como ya escribí no me funciona tampoco.


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 22 de Octubre de 2007, 11:56:35 am
bueno, basicamente me he decantado por cualquiera que funcione, pero es que ninguno lo hace...
probe a utilizar una variable contador y que cuando llegase a cierto punto aumentase la velocidad, pero como ya escribí no me funciona tampoco.

pues lo de la variable contador te tiene de chutar por narices!

INICIALIZO VARIABLES (C=0)
EMPIEZA EL JUEGO
MUEVO PELOTA
ACTUALIZO CONTADOR (C=C+1)
SI C>10 ENTONCES  VX=VX+1:VY=VY+1:C=0
GOTO MUEVO PELOTA

tienes aun el codigo donde hiciste lo del contador?

postealo y te hecho un cable.



Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 22 de Octubre de 2007, 12:01:18 pm
Hola otra vez,

mira, te he actualizado el código de programa "rebotes" añadiendole el tema del contador (varible C)

Código:
5 REM REBOTES
10 SCREEN 2
20 LINE (0,0)-(208,178),1,B
30 X=100:Y=100:C=0
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
81 C=C+1
82 IF C>100 THEN C=0: VX=VX+1:VY=VY+1
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


no lo he probado por que estoy en el curro, pero supongo que funcionara sin problemas, los cambios son pequeños (minusculos)


Título: Re: DESCUBRIENDO EL PONG
Publicado por: Jos'b en 23 de Octubre de 2007, 04:52:58 pm
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)

Código:
     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.



Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 24 de Octubre de 2007, 10:49:02 am
mu majo el código, ^_^ como sigamos asi tendremos BASIC PONG OPEN SOURCE



Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 24 de Octubre de 2007, 11:19:28 am
Gracias Gobblin!

estoy hasta arriba de curro y no he podido mirarlo y probarlo...
espero poder hacerlo esta tarde, PONG OPEN SOURCE YA! ;D

¿no creeis que estaria bien una sección para patanes como yo, en la que destripar cosas sencillas?
lo cierto es que en la mayoria de articulos de revistas y libros de la epoca, la información es dificil de pillar, o bien se complican mucho para hacer cosas que vosotros sabeis hacer con muy poco.
creo que para "newbies" como yo estaria bién tener una especie de "tutorial" con las tecnicas y factores basicos para empezar a hacer cositas en basic...
no se, es una idea, igual os parece una gilipollez, pero yo creo que daria opción a que se uniese mas gente a este mundo tan flipante del msx, gente a quien le guste pero que en principio no tengan muchos conocimientos...
porque os aseguro que a veces cuando ojeo los temas aqui en el foro, se me queda una cara :-\ ¡¡no entiendo nada! quiero decir que teneis mucho nivel y se hace dificil saber por donde tirar al principio.
Y despues de esta chapa, me despido, espero que no os parezca una tonteria esto que comento.
GRACIAS A TODOS!
Un Saludo!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: cybernoid en 24 de Octubre de 2007, 02:27:02 pm
Gracias Gobblin!

estoy hasta arriba de curro y no he podido mirarlo y probarlo...
espero poder hacerlo esta tarde, PONG OPEN SOURCE YA! ;D

¿no creeis que estaria bien una sección para patanes como yo, en la que destripar cosas sencillas?
lo cierto es que en la mayoria de articulos de revistas y libros de la epoca, la información es dificil de pillar, o bien se complican mucho para hacer cosas que vosotros sabeis hacer con muy poco.
creo que para "newbies" como yo estaria bién tener una especie de "tutorial" con las tecnicas y factores basicos para empezar a hacer cositas en basic...
no se, es una idea, igual os parece una gilipollez, pero yo creo que daria opción a que se uniese mas gente a este mundo tan flipante del msx, gente a quien le guste pero que en principio no tengan muchos conocimientos...
porque os aseguro que a veces cuando ojeo los temas aqui en el foro, se me queda una cara :-\ ¡¡no entiendo nada! quiero decir que teneis mucho nivel y se hace dificil saber por donde tirar al principio.
Y despues de esta chapa, me despido, espero que no os parezca una tonteria esto que comento.
GRACIAS A TODOS!
Un Saludo!

bueno, mientras esa sección no exista aquí estamos unos cuantos para echarte una mano en lo que necesites :)  yo por lo menos me lo paso bien leyendo y contestando tus post's.

ANIMO!!!


Título: Re: DESCUBRIENDO EL PONG
Publicado por: msx dummie en 24 de Octubre de 2007, 06:13:27 pm
muchas Gracias! :)
me alegra saber eso porque a veces puede ser una chapa y también lo entiendo...
asi que se agradece saberlo, de verdad!
muchas Gracias! :)