Traducción de macros en los demas días y revisiones del Día 6
This commit is contained in:
parent
804a750d8b
commit
22323c4ab5
|
@ -1018,32 +1018,32 @@ por ejemplo, lo siguiente dividirá el ancho de la pantalla en dos, utilizando e
|
||||||
#01 SFT2
|
#01 SFT2
|
||||||
```
|
```
|
||||||
|
|
||||||
### macros HALF
|
### macros MITAD
|
||||||
|
|
||||||
para seguir ilustrando el uso de las macros, podríamos definir unas macros HALF y HALF2, utilizando DIV o SFT.
|
para seguir ilustrando el uso de las macros, podríamos definir unas macros MITAD y MITAD2, utilizando DIV o SFT.
|
||||||
|
|
||||||
usando DIV:
|
usando DIV:
|
||||||
|
|
||||||
```
|
```
|
||||||
%HALF { #02 DIV } ( numero -- numero/2 )
|
%MITAD { #02 DIV } ( numero -- numero/2 )
|
||||||
%HALF2 { #0002 DIV2 } ( numero -- numero/2 )
|
%MITAD2 { #0002 DIV2 } ( numero -- numero/2 )
|
||||||
```
|
```
|
||||||
|
|
||||||
usando SFT:
|
usando SFT:
|
||||||
|
|
||||||
```
|
```
|
||||||
%HALF { #01 SFT } ( numero -- numero/2 )
|
%MITAD { #01 SFT } ( numero -- numero/2 )
|
||||||
%HALF2 { #01 SFT2 } ( numero -- numero/2 )
|
%MITAD2 { #01 SFT2 } ( numero -- numero/2 )
|
||||||
```
|
```
|
||||||
|
|
||||||
and use any of them to calculate the center:
|
and use any of them to calculate the center:
|
||||||
|
|
||||||
```
|
```
|
||||||
.Pantalla/ancho DEI2 HALF2 .Pantalla/x DEO2
|
.Pantalla/ancho DEI2 MITAD2 .Pantalla/x DEO2
|
||||||
.Pantalla/alto DEI2 HALF2 .Pantalla/y DEO2
|
.Pantalla/alto DEI2 MITAD2 .Pantalla/y DEO2
|
||||||
```
|
```
|
||||||
|
|
||||||
notemos que la macro HALF2 que utiliza SFT2 necesitará un byte menos que la que utiliza DIV2. esto puede o no ser importante dependiendo de tus prioridades :)
|
notemos que la macro MITAD2 que utiliza SFT2 necesitará un byte menos que la que utiliza DIV2. esto puede o no ser importante dependiendo de tus prioridades :)
|
||||||
|
|
||||||
## dibujando sprites en posiciones específicas
|
## dibujando sprites en posiciones específicas
|
||||||
|
|
||||||
|
|
|
@ -286,7 +286,7 @@ una posible desventaja es que podría ser menos legible. pero una posible ventaj
|
||||||
|
|
||||||
```
|
```
|
||||||
( incrementar un short desde la página cero )
|
( incrementar un short desde la página cero )
|
||||||
%ZP-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( zp-dirección -- )
|
%PC-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( pc-dirección -- )
|
||||||
```
|
```
|
||||||
|
|
||||||
## variables en direcciones relativas
|
## variables en direcciones relativas
|
||||||
|
@ -402,7 +402,7 @@ el siguiente programa ilustra los puntos anteriores, haciendo que nuestro cuadra
|
||||||
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
||||||
|
|
||||||
( macros/constantes )
|
( macros/constantes )
|
||||||
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
||||||
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
|
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
|
||||||
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
|
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ el siguiente programa ilustra los puntos anteriores, haciendo que nuestro cuadra
|
||||||
#2ce5 .Sistema/b DEO2
|
#2ce5 .Sistema/b DEO2
|
||||||
|
|
||||||
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
|
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
|
||||||
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
|
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
|
||||||
|
|
||||||
( fijar la dirección del sprite )
|
( fijar la dirección del sprite )
|
||||||
;cuadrado .Pantalla/direc DEO2
|
;cuadrado .Pantalla/direc DEO2
|
||||||
|
@ -503,7 +503,7 @@ el siguiente programa nos permite controlar la posición horizontal de nuestro c
|
||||||
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||||
|
|
||||||
( macros/constantes )
|
( macros/constantes )
|
||||||
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
||||||
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
|
%color-borrar { #40 } ( borrar 1bpp sprite del primer plano )
|
||||||
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
|
%color-2 { #4a } ( dibujar sprite de 1bpp con color 2 y transparencia )
|
||||||
|
|
||||||
|
@ -519,7 +519,7 @@ el siguiente programa nos permite controlar la posición horizontal de nuestro c
|
||||||
#2ce5 .Sistema/b DEO2
|
#2ce5 .Sistema/b DEO2
|
||||||
|
|
||||||
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
|
( fijar la Pantalla/y a la mitad de la pantalla, menos 4 )
|
||||||
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
|
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
|
||||||
|
|
||||||
( fijar la dirección del sprite )
|
( fijar la dirección del sprite )
|
||||||
;cuadrado .Pantalla/direc DEO2
|
;cuadrado .Pantalla/direc DEO2
|
||||||
|
@ -826,7 +826,7 @@ la sección "borrar el sprite" no es realmente necesaria en este caso debido a l
|
||||||
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &pad $2 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
||||||
|
|
||||||
( macros/constantes )
|
( macros/constantes )
|
||||||
%HALF2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
%MITAD2 { #01 SFT2 } ( desplazar un bit a la derecha ) ( corto -- corto/2 )
|
||||||
%8MOD { #07 AND } ( byte -- byte%8 )
|
%8MOD { #07 AND } ( byte -- byte%8 )
|
||||||
%A-CORTO { #00 SWP } ( byte -- corto )
|
%A-CORTO { #00 SWP } ( byte -- corto )
|
||||||
|
|
||||||
|
@ -845,8 +845,8 @@ la sección "borrar el sprite" no es realmente necesaria en este caso debido a l
|
||||||
#2ce5 .Sistema/b DEO2
|
#2ce5 .Sistema/b DEO2
|
||||||
|
|
||||||
( fijar Pantalla/x y y a la mitad de la pantalla menos 4 )
|
( fijar Pantalla/x y y a la mitad de la pantalla menos 4 )
|
||||||
.Pantalla/ancho DEI2 HALF2 #0004 SUB2 .Pantalla/x DEO2
|
.Pantalla/ancho DEI2 MITAD2 #0004 SUB2 .Pantalla/x DEO2
|
||||||
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
|
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
|
||||||
|
|
||||||
( establecer la dirección del sprite )
|
( establecer la dirección del sprite )
|
||||||
;animación .Pantalla/direc DEO2
|
;animación .Pantalla/direc DEO2
|
||||||
|
|
|
@ -562,7 +562,7 @@ para llamar a la subrutina, podrías hacer algo como lo siguiente
|
||||||
|
|
||||||
```
|
```
|
||||||
#0008 ( empujar x inicial )
|
#0008 ( empujar x inicial )
|
||||||
.Pantalla/altura DEI2 HALF2 ( empujar y )
|
.Pantalla/altura DEI2 MITAD2 ( empujar y )
|
||||||
#ff ( empujar longitud de la línea )
|
#ff ( empujar longitud de la línea )
|
||||||
;dibujar-linea-horizontal JSR2 ( llamar subrutina )
|
;dibujar-linea-horizontal JSR2 ( llamar subrutina )
|
||||||
```
|
```
|
||||||
|
|
|
@ -32,7 +32,7 @@ empecemos con el siguiente programa como plantilla. incluye los datos para un sp
|
||||||
( dispositivos )
|
( dispositivos )
|
||||||
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
||||||
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
||||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||||
|
|
||||||
( macros )
|
( macros )
|
||||||
%RTN { JMP2r }
|
%RTN { JMP2r }
|
||||||
|
@ -44,7 +44,7 @@ empecemos con el siguiente programa como plantilla. incluye los datos para un sp
|
||||||
#2ce9 .Sistema/r DEO2
|
#2ce9 .Sistema/r DEO2
|
||||||
#01c0 .Sistema/g DEO2
|
#01c0 .Sistema/g DEO2
|
||||||
#2ce5 .Sistema/b DEO2
|
#2ce5 .Sistema/b DEO2
|
||||||
|
|
||||||
|
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
|
@ -138,11 +138,11 @@ en este punto, la pila tiene la nueva x en la parte superior de la pila, y el an
|
||||||
podemos compararlos en modo mantener para conservar esos valores en la pila, y hacer nuestro salto como antes:
|
podemos compararlos en modo mantener para conservar esos valores en la pila, y hacer nuestro salto como antes:
|
||||||
|
|
||||||
```
|
```
|
||||||
GTH2k ( ¿es ese ancho mayor que x? aka ¿es x menor que el ancho? )
|
GTH2k ( ¿es ese ancho mayor que x?, o también, ¿es x menor que el ancho? )
|
||||||
,&bucle-x JCN ( salta si x es menor que el límite )
|
,&bucle-x JCN ( salta si x es menor que el límite )
|
||||||
```
|
```
|
||||||
|
|
||||||
cuando terminamos el bucle, tenemos que POP ambos valores.
|
cuando terminamos el bucle, tenemos que hacer POP de ambos valores.
|
||||||
|
|
||||||
usando esta estrategia, obtendríamos el siguiente bucle:
|
usando esta estrategia, obtendríamos el siguiente bucle:
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ lo siguiente muestra nuestro programa en contexto, llenando completamente la pri
|
||||||
( dispositivos )
|
( dispositivos )
|
||||||
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
||||||
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
||||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||||
|
|
||||||
( macros )
|
( macros )
|
||||||
%RTN { JMP2r }
|
%RTN { JMP2r }
|
||||||
|
@ -331,7 +331,7 @@ podemos pensar en las dos palas del juego como dos rectángulos, cada uno con su
|
||||||
|
|
||||||
la coordenada x de cada pala puede ser constante, y la coordenada y debe ser de seguro una variable.
|
la coordenada x de cada pala puede ser constante, y la coordenada y debe ser de seguro una variable.
|
||||||
|
|
||||||
en esta parte veremos como dibujar las palas en base a estos parámetros, y también recapitularemos como cambiar sus coordenadas y con el controlador.
|
en esta parte veremos como dibujar las palas en base a estos parámetros, y también recapitularemos como cambiar sus coordenadas `y` con el controlador.
|
||||||
|
|
||||||
## dibujar las palas multi-tile
|
## dibujar las palas multi-tile
|
||||||
|
|
||||||
|
@ -521,7 +521,7 @@ un margen para separar las palas de los bordes podría ser agradable también:
|
||||||
por último, recuperemos nuestra macro HALF2 de días anteriores:
|
por último, recuperemos nuestra macro HALF2 de días anteriores:
|
||||||
|
|
||||||
```
|
```
|
||||||
%HALF2 { #01 SFT2 } ( corto -- corto/2 )
|
%MITAD2 { #01 SFT2 } ( corto -- corto/2 )
|
||||||
```
|
```
|
||||||
|
|
||||||
### iniciar posiciones
|
### iniciar posiciones
|
||||||
|
@ -542,7 +542,7 @@ MARGEN SUB2 ANCHO-PALA SUB2
|
||||||
.derecha/x STZ2
|
.derecha/x STZ2
|
||||||
```
|
```
|
||||||
|
|
||||||
para centrar las coordenadas y podemos restar la altura de la pala a la altura de la pantalla, y luego dividir entre dos:
|
para centrar las coordenadas `y` podemos restar la altura de la pala a la altura de la pantalla, y luego dividir entre dos:
|
||||||
|
|
||||||
```
|
```
|
||||||
.Pantalla/alto DEI2 ALTO-PALA SUB2 HALF2
|
.Pantalla/alto DEI2 ALTO-PALA SUB2 HALF2
|
||||||
|
@ -573,11 +573,11 @@ omitiendo la definición de las subrutinas dibuja-fondo y dibuja-pala, y como fo
|
||||||
( dispositivos )
|
( dispositivos )
|
||||||
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
|00 @Sistema [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|
||||||
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
|20 @Pantalla [ &vector $2 &ancho $2 &alto $2 &auto $1 &pad $1 &x $2 &y $2 &direc $2 &pixel $1 &sprite $1 ]
|
||||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||||
|
|
||||||
( macros )
|
( macros )
|
||||||
%RTN { JMP2r }
|
%RTN { JMP2r }
|
||||||
%HALF2 { #01 SFT2 } ( corto -- corto/2 )
|
%MITAD2 { #01 SFT2 } ( corto -- corto/2 )
|
||||||
|
|
||||||
( constantes )
|
( constantes )
|
||||||
%ANCHO-PALA { #0010 } ( 2 tiles )
|
%ANCHO-PALA { #0010 } ( 2 tiles )
|
||||||
|
@ -668,7 +668,7 @@ podemos usar las flechas arriba y abajo para cambiar la posición de la pala izq
|
||||||
podemos tener una macro para definir la velocidad de la pala, es decir, cuánto sumaremos o restaremos al mover cada cuadro:
|
podemos tener una macro para definir la velocidad de la pala, es decir, cuánto sumaremos o restaremos al mover cada cuadro:
|
||||||
|
|
||||||
```
|
```
|
||||||
%VELOC-PALA { #0001 }
|
%VEL-PALA { #0001 }
|
||||||
```
|
```
|
||||||
|
|
||||||
todo esto puede ir dentro de su propia subrutina para facilitar la lectura:
|
todo esto puede ir dentro de su propia subrutina para facilitar la lectura:
|
||||||
|
@ -686,10 +686,10 @@ todo esto puede ir dentro de su propia subrutina para facilitar la lectura:
|
||||||
&derecha JMP ( salta si no se ha pulsado ninguno de los dos )
|
&derecha JMP ( salta si no se ha pulsado ninguno de los dos )
|
||||||
|
|
||||||
&izquierda-arriba
|
&izquierda-arriba
|
||||||
.izquierda/y LDZ2 VELOC-PALA SUB2 .izquierda/y STZ2
|
.izquierda/y LDZ2 VEL-PALA SUB2 .izquierda/y STZ2
|
||||||
,&derecha JMP
|
,&derecha JMP
|
||||||
&izquierda-abajo
|
&izquierda-abajo
|
||||||
.izquierda/y LDZ2 VELOC-PALA ADD2 .izquierda/y STZ2
|
.izquierda/y LDZ2 VEL-PALA ADD2 .izquierda/y STZ2
|
||||||
,&derecha JMP
|
,&derecha JMP
|
||||||
|
|
||||||
&derecha
|
&derecha
|
||||||
|
@ -702,13 +702,13 @@ todo esto puede ir dentro de su propia subrutina para facilitar la lectura:
|
||||||
&fin JMP ( salta si no se ha pulsado ninguno de los dos )
|
&fin JMP ( salta si no se ha pulsado ninguno de los dos )
|
||||||
|
|
||||||
&derecha-arriba
|
&derecha-arriba
|
||||||
.derecha/y LDZ2 VELOC-PALA SUB2 .derecha/y STZ2
|
.derecha/y LDZ2 VEL-PALA SUB2 .derecha/y STZ2
|
||||||
,&fin JMP
|
,&fin JMP
|
||||||
&derecha-abajo
|
&derecha-abajo
|
||||||
.derecha/y LDZ2 VELOC-PALA ADD2 .derecha/y STZ2
|
.derecha/y LDZ2 VEL-PALA ADD2 .derecha/y STZ2
|
||||||
|
|
||||||
&fin
|
&fin
|
||||||
POP ( hacer pop al valor duplicado del botón )
|
POP ( hacer POP al valor duplicado del botón )
|
||||||
RTN
|
RTN
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -879,22 +879,22 @@ utilizaremos este último enfoque con la velocidad, ya que nos ayudará a discut
|
||||||
incluimos estas variables en nuestra página cero, complementando las x e y que ya teníamos:
|
incluimos estas variables en nuestra página cero, complementando las x e y que ya teníamos:
|
||||||
|
|
||||||
```
|
```
|
||||||
@pelota [ &x $2 &y $2 &veloc-x $2 &veloc-y $2 ]
|
@pelota [ &x $2 &y $2 &vel-x $2 &vel-y $2 ]
|
||||||
```
|
```
|
||||||
|
|
||||||
### diferentes direcciones
|
### diferentes direcciones
|
||||||
|
|
||||||
si, por ejemplo, iniciamos veloc-x con 1
|
si, por ejemplo, iniciamos vel-x con 1
|
||||||
|
|
||||||
```
|
```
|
||||||
#0001 .pelota/veloc-x STZ2
|
#0001 .pelota/vel-x STZ2
|
||||||
```
|
```
|
||||||
|
|
||||||
podemos hacer que la pelota se mueva hacia la derecha haciendo:
|
podemos hacer que la pelota se mueva hacia la derecha haciendo:
|
||||||
|
|
||||||
```
|
```
|
||||||
( dentro de actualiza-pelota )
|
( dentro de actualiza-pelota )
|
||||||
.pelota/veloc-x LDZ2 ( obtener veloc-x )
|
.pelota/vel-x LDZ2 ( obtener vel-x )
|
||||||
.pelota/x LDZ2 ( obtener x )
|
.pelota/x LDZ2 ( obtener x )
|
||||||
ADD2 ( sumarlos )
|
ADD2 ( sumarlos )
|
||||||
.pelota/x STZ2 ( almacenar nueva x )
|
.pelota/x STZ2 ( almacenar nueva x )
|
||||||
|
@ -908,7 +908,7 @@ en otros contextos, uno podría decir, ¡"-1"!
|
||||||
|
|
||||||
pero no hemos utilizado signos negativos en uxn; ¡no podemos!
|
pero no hemos utilizado signos negativos en uxn; ¡no podemos!
|
||||||
|
|
||||||
entonces, ¿existe un valor positivo de veloc-x que haga que x se reduzca al sumarlos?
|
entonces, ¿existe un valor positivo de vel-x que haga que x se reduzca al sumarlos?
|
||||||
|
|
||||||
¡normalmente pensaríamos que no lo hay y que la pregunta no tiene sentido!
|
¡normalmente pensaríamos que no lo hay y que la pregunta no tiene sentido!
|
||||||
|
|
||||||
|
@ -960,14 +960,14 @@ podríamos continuar así obteniendo más y más números "negativos" que funcio
|
||||||
volviendo a nuestro código, si inicializamos nuestra velocidad con:
|
volviendo a nuestro código, si inicializamos nuestra velocidad con:
|
||||||
|
|
||||||
```
|
```
|
||||||
#ffff .pelota/veloc-x STZ2
|
#ffff .pelota/vel-x STZ2
|
||||||
```
|
```
|
||||||
|
|
||||||
y luego usamos exactamente el mismo código para actualizar la posición:
|
y luego usamos exactamente el mismo código para actualizar la posición:
|
||||||
|
|
||||||
```
|
```
|
||||||
( dentro de actualiza-pelota )
|
( dentro de actualiza-pelota )
|
||||||
.pelota/veloc-x LDZ2 ( obtener veloc-x )
|
.pelota/vel-x LDZ2 ( obtener vel-x )
|
||||||
.pelota/x LDZ2 ( obtener x )
|
.pelota/x LDZ2 ( obtener x )
|
||||||
ADD2 ( sumarlas )
|
ADD2 ( sumarlas )
|
||||||
.pelota/x STZ2 ( almacenar nueva x )
|
.pelota/x STZ2 ( almacenar nueva x )
|
||||||
|
@ -978,8 +978,8 @@ ADD2 ( sumarlas )
|
||||||
podría tener sentido establecer estos valores como macros:
|
podría tener sentido establecer estos valores como macros:
|
||||||
|
|
||||||
```
|
```
|
||||||
%PELOTA-VELOC-POS { #0001 } ( +1 )
|
%PELOTA-VEL-POS { #0001 } ( +1 )
|
||||||
%PELOTA-VELOC-NEG { #ffff } ( -1 )
|
%PELOTA-VEL-NEG { #ffff } ( -1 )
|
||||||
```
|
```
|
||||||
|
|
||||||
### implementando el movimiento de la pelota
|
### implementando el movimiento de la pelota
|
||||||
|
@ -989,12 +989,12 @@ basándonos en lo que acabamos de discutir, podemos empezar nuestra subrutina de
|
||||||
```
|
```
|
||||||
@actualiza-pelota ( -- )
|
@actualiza-pelota ( -- )
|
||||||
( obtener velocidad-x y x )
|
( obtener velocidad-x y x )
|
||||||
.pelota/veloc-x LDZ2 .pelota/x LDZ2
|
.pelota/vel-x LDZ2 .pelota/x LDZ2
|
||||||
ADD2 ( sumarlos )
|
ADD2 ( sumarlos )
|
||||||
.pelota/x STZ2 ( guarda la nueva x )
|
.pelota/x STZ2 ( guarda la nueva x )
|
||||||
|
|
||||||
( obtener velocidad-y e y )
|
( obtener velocidad-y e y )
|
||||||
.pelota/velocidad-y LDZ2 .pelota/y LDZ2
|
.pelota/vel-y LDZ2 .pelota/y LDZ2
|
||||||
ADD2 ( sumarlos )
|
ADD2 ( sumarlos )
|
||||||
.pelota/y STZ2 ( almacenar nueva y )
|
.pelota/y STZ2 ( almacenar nueva y )
|
||||||
RTN
|
RTN
|
||||||
|
@ -1011,8 +1011,8 @@ HALF2 .pelota/x STZ2
|
||||||
HALF2 .pelota/y STZ2
|
HALF2 .pelota/y STZ2
|
||||||
|
|
||||||
( iniciar la velocidad de la pelota )
|
( iniciar la velocidad de la pelota )
|
||||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||||
```
|
```
|
||||||
|
|
||||||
woohoo! se mueve, pero de momento sale volando :)
|
woohoo! se mueve, pero de momento sale volando :)
|
||||||
|
@ -1057,11 +1057,11 @@ considerando que hay un margen en la parte superior, podemos hacer esta comproba
|
||||||
.pelota/y LDZ2
|
.pelota/y LDZ2
|
||||||
MARGEN-PARED
|
MARGEN-PARED
|
||||||
LTH2 ( ¿es pelota-y menos que el margen? )
|
LTH2 ( ¿es pelota-y menos que el margen? )
|
||||||
,&establecer-veloc-pos JCN
|
,&establecer-vel-pos JCN
|
||||||
,&verif-pared-inf JMP
|
,&verif-pared-inf JMP
|
||||||
|
|
||||||
&establecer-veloc-pos
|
&establecer-vel-pos
|
||||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||||
&continuar JMP
|
&continuar JMP
|
||||||
&verif-pared-inf
|
&verif-pared-inf
|
||||||
```
|
```
|
||||||
|
@ -1081,11 +1081,11 @@ la coordenada y de la pared inferior sería la altura de la pantalla, menos el m
|
||||||
.Pantalla/alto DEI2
|
.Pantalla/alto DEI2
|
||||||
MARGEN-PARED SUB2 ( altura - margen )
|
MARGEN-PARED SUB2 ( altura - margen )
|
||||||
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
||||||
,&establecer-veloc-neg JCN
|
,&establecer-vel-neg JCN
|
||||||
&continuar JMP
|
&continuar JMP
|
||||||
|
|
||||||
&establecer-veloc-neg
|
&establecer-vel-neg
|
||||||
PELOTA-VELOC-NEG .pelota/veloc-y STZ2
|
PELOTA-VEL-NEG .pelota/vel-y STZ2
|
||||||
&continuar
|
&continuar
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1097,13 +1097,13 @@ nuestra subrutina de actualización de la pelota tiene el siguiente aspecto ahor
|
||||||
@actualiza-pelota ( -- )
|
@actualiza-pelota ( -- )
|
||||||
( actualizar x )
|
( actualizar x )
|
||||||
( obtener velocidad-x y x )
|
( obtener velocidad-x y x )
|
||||||
.pelota/speed-x LDZ2 .pelota/x LDZ2
|
.pelota/vel-x LDZ2 .pelota/x LDZ2
|
||||||
ADD2 ( sumarlas )
|
ADD2 ( sumarlas )
|
||||||
.pelota/x STZ2 ( guardar la nueva x )
|
.pelota/x STZ2 ( guardar la nueva x )
|
||||||
|
|
||||||
( actualizar y )
|
( actualizar y )
|
||||||
( obtener velocidad-y e y )
|
( obtener velocidad-y e y )
|
||||||
.pelota/veloc-y LDZ2 .pelota/y LDZ2
|
.pelota/vel-y LDZ2 .pelota/y LDZ2
|
||||||
ADD2 ( sumarlos )
|
ADD2 ( sumarlos )
|
||||||
.pelota/y STZ2 ( almacenar nueva y )
|
.pelota/y STZ2 ( almacenar nueva y )
|
||||||
|
|
||||||
|
@ -1112,11 +1112,11 @@ nuestra subrutina de actualización de la pelota tiene el siguiente aspecto ahor
|
||||||
.pelota/y LDZ2
|
.pelota/y LDZ2
|
||||||
MARGEN-PARED
|
MARGEN-PARED
|
||||||
LTH2 ( ¿es la pelota-y menor que el margen? )
|
LTH2 ( ¿es la pelota-y menor que el margen? )
|
||||||
,&establecer-veloc-pos JCN
|
,&establecer-vel-pos JCN
|
||||||
,&verif-pared-inf JMP
|
,&verif-pared-inf JMP
|
||||||
|
|
||||||
&establecer-veloc-pos
|
&establecer-vel-pos
|
||||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||||
&continuar JMP
|
&continuar JMP
|
||||||
|
|
||||||
&verif-pared-inf
|
&verif-pared-inf
|
||||||
|
@ -1124,11 +1124,11 @@ nuestra subrutina de actualización de la pelota tiene el siguiente aspecto ahor
|
||||||
.pantalla/alto DEI2
|
.pantalla/alto DEI2
|
||||||
MARGEN-PARED SUB2 ( altura - margen )
|
MARGEN-PARED SUB2 ( altura - margen )
|
||||||
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
||||||
,&establecer-veloc-neg JCN
|
,&establecer-vel-neg JCN
|
||||||
&continuar JMP
|
&continuar JMP
|
||||||
|
|
||||||
&establecer-veloc-neg
|
&establecer-vel-neg
|
||||||
PELOTA-VELOC-NEG .pelota/veloc-y STZ2
|
PELOTA-VEL-NEG .pelota/vel-y STZ2
|
||||||
&continuar
|
&continuar
|
||||||
RTN
|
RTN
|
||||||
```
|
```
|
||||||
|
@ -1149,12 +1149,12 @@ para ello, podemos comprobar si x es menor que la suma del margen y el ancho de
|
||||||
( dentro de actualiza-pelota )
|
( dentro de actualiza-pelota )
|
||||||
&verif-pala-izq
|
&verif-pala-izq
|
||||||
.pelota/x LDZ2
|
.pelota/x LDZ2
|
||||||
MARGEN ALTO-PALA ADD2
|
MARGEN ANCHO-PALA ADD2
|
||||||
LTH2 ( ¿es la pelota-x menor que el margen + el ancho-de-pala? )
|
LTH2 ( ¿es la pelota-x menor que el margen + el ancho-de-pala? )
|
||||||
,&x-en-izq JCN
|
,&x-en-izquierda JCN
|
||||||
,&verif-pala-der JMP
|
,&verif-pala-der JMP
|
||||||
|
|
||||||
&x-en-izq
|
&x-en-izquierda
|
||||||
( ... )
|
( ... )
|
||||||
|
|
||||||
&verif-pala-der
|
&verif-pala-der
|
||||||
|
@ -1171,20 +1171,20 @@ si esas dos condiciones se cumplen, entonces podemos establecer una velocidad po
|
||||||
|
|
||||||
```
|
```
|
||||||
( dentro de actualiza-pelota )
|
( dentro de actualiza-pelota )
|
||||||
&x-en-izq
|
&x-en-izquierda
|
||||||
.pelota/y LDZ2 DUP2
|
.pelota/y LDZ2 DUP2
|
||||||
.izquierda/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
.izquierda/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
||||||
.izquierda/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
.izquierda/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
||||||
STHr ( recupera la primera bandera )
|
STHr ( recupera la primera bandera )
|
||||||
AND ( hacer AND en ambas banderas )
|
AND ( hacer AND en ambas banderas )
|
||||||
&rebote-izq JCN
|
&rebote-izquierda JCN
|
||||||
```
|
```
|
||||||
|
|
||||||
donde rebote-izq sería:
|
donde rebote-izquierda sería:
|
||||||
|
|
||||||
```
|
```
|
||||||
&rebote-izq
|
&rebote-izquierda
|
||||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||||
,&fin JMP
|
,&fin JMP
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1192,17 +1192,17 @@ donde rebote-izq sería:
|
||||||
|
|
||||||
podemos dejar que la pelota siga moviéndose, pero comprobando que no ha cruzado la pared izquierda, comparando con 0000.
|
podemos dejar que la pelota siga moviéndose, pero comprobando que no ha cruzado la pared izquierda, comparando con 0000.
|
||||||
|
|
||||||
todo el código x-en-izq terminaría pareciendo:
|
todo el código x-en-izquierda terminaría pareciendo:
|
||||||
|
|
||||||
```
|
```
|
||||||
( dentro de actualiza-pelota )
|
( dentro de actualiza-pelota )
|
||||||
&x-en-izq
|
&x-en-izquierda
|
||||||
.pelota/y LDZ2 DUP2
|
.pelota/y LDZ2 DUP2
|
||||||
.izquierda/y LDZ2 BALL-SIZE SUB2 GTH2 ( primera bandera ) STH
|
.izquierda/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
||||||
.izquierda/y LDZ2 PADDLE-HEIGHT ADD2 LTH2 ( segunda bandera )
|
.izquierda/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
||||||
STHr ( recupera la primera bandera )
|
STHr ( recupera la primera bandera )
|
||||||
AND ( hacer AND en ambas banderas )
|
AND ( hacer AND en ambas banderas )
|
||||||
,&rebote-izq JCN
|
,&rebote-izquierda JCN
|
||||||
|
|
||||||
.pelota/x LDZ2 #0000 NEQ2 ( ¿ha llegado a la pared? )
|
.pelota/x LDZ2 #0000 NEQ2 ( ¿ha llegado a la pared? )
|
||||||
,&fin JCN
|
,&fin JCN
|
||||||
|
@ -1214,7 +1214,7 @@ todo el código x-en-izq terminaría pareciendo:
|
||||||
,&fin JMP
|
,&fin JMP
|
||||||
|
|
||||||
&rebote-izquierda
|
&rebote-izquierda
|
||||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||||
,&fin JMP
|
,&fin JMP
|
||||||
|
|
||||||
&verif-pala-der
|
&verif-pala-der
|
||||||
|
@ -1230,3 +1230,40 @@ si comprobáramos que la coordenada x es menor que ffff, ¡entonces cada valor p
|
||||||
|
|
||||||
este puede ser otro buen ejercicio para ti: ¿cómo comprobarías si la bola ha cruzado la pared izquierda independientemente de su velocidad?
|
este puede ser otro buen ejercicio para ti: ¿cómo comprobarías si la bola ha cruzado la pared izquierda independientemente de su velocidad?
|
||||||
|
|
||||||
|
### pala derecha
|
||||||
|
|
||||||
|
para la pala derecha haremos lo mismo que arriba, pero cambiando las comparaciones relativas a la coordenada x de la pelota: usaremos el ancho de la pantalla como referencia para la pared derecha, y a partir de ahí le restaremos el margen y el ancho.
|
||||||
|
|
||||||
|
```
|
||||||
|
&verif-pala-der
|
||||||
|
.pelota/x LDZ2 TAM-PELOTA ADD2 ( pelota-x + tamaño-pelota )
|
||||||
|
.Pantalla/ancho DEI2 MARGEN SUB2 ANCHO-PALA SUB2
|
||||||
|
GTH2 ( ¿es la coordenada derecha de la bola mayor que el ancho de la pantalla - margen - ancho de la paleta? )
|
||||||
|
,&x-en-derecha JCN
|
||||||
|
&fin JMP
|
||||||
|
|
||||||
|
&x-en-derecha
|
||||||
|
.pelota/y LDZ2 DUP2
|
||||||
|
.derecha/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
||||||
|
.derecha/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
||||||
|
STHr ( recupera la primera bandera )
|
||||||
|
AND ( juntar las dos banderas )
|
||||||
|
,&rebote-derecha JCN
|
||||||
|
|
||||||
|
.pelota/x LDZ2
|
||||||
|
.Pantalla/ancho DEI2 NEQ2 ( ¿ha llegado a la pared? )
|
||||||
|
,&fin JCN
|
||||||
|
|
||||||
|
&reset-derecha
|
||||||
|
( aquí puedes aumentar la puntuación
|
||||||
|
de la paleta izquierda )
|
||||||
|
;reset JSR2
|
||||||
|
,&fin JMP
|
||||||
|
|
||||||
|
&rebote-derecha
|
||||||
|
PELOTA-VEL-NEG .pelota/vel-x STZ2
|
||||||
|
,&fin JMP
|
||||||
|
|
||||||
|
&fin
|
||||||
|
RTN
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue