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
|
||||
```
|
||||
|
||||
### 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:
|
||||
|
||||
```
|
||||
%HALF { #02 DIV } ( numero -- numero/2 )
|
||||
%HALF2 { #0002 DIV2 } ( numero -- numero/2 )
|
||||
%MITAD { #02 DIV } ( numero -- numero/2 )
|
||||
%MITAD2 { #0002 DIV2 } ( numero -- numero/2 )
|
||||
```
|
||||
|
||||
usando SFT:
|
||||
|
||||
```
|
||||
%HALF { #01 SFT } ( numero -- numero/2 )
|
||||
%HALF2 { #01 SFT2 } ( numero -- numero/2 )
|
||||
%MITAD { #01 SFT } ( numero -- numero/2 )
|
||||
%MITAD2 { #01 SFT2 } ( numero -- numero/2 )
|
||||
```
|
||||
|
||||
and use any of them to calculate the center:
|
||||
|
||||
```
|
||||
.Pantalla/ancho DEI2 HALF2 .Pantalla/x DEO2
|
||||
.Pantalla/alto DEI2 HALF2 .Pantalla/y DEO2
|
||||
.Pantalla/ancho DEI2 MITAD2 .Pantalla/x 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
|
||||
|
||||
|
|
|
@ -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 )
|
||||
%ZP-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( zp-dirección -- )
|
||||
%PC-INC2 { DUP LDZ2 INC2 ROT STZ2 } ( pc-dirección -- )
|
||||
```
|
||||
|
||||
## 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 ]
|
||||
|
||||
( 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-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
|
||||
|
||||
( 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 )
|
||||
;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 ]
|
||||
|
||||
( 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-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
|
||||
|
||||
( 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 )
|
||||
;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 ]
|
||||
|
||||
( 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 )
|
||||
%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
|
||||
|
||||
( fijar Pantalla/x y y a la mitad de la pantalla menos 4 )
|
||||
.Pantalla/ancho DEI2 HALF2 #0004 SUB2 .Pantalla/x DEO2
|
||||
.Pantalla/alto DEI2 HALF2 #0004 SUB2 .Pantalla/y DEO2
|
||||
.Pantalla/ancho DEI2 MITAD2 #0004 SUB2 .Pantalla/x DEO2
|
||||
.Pantalla/alto DEI2 MITAD2 #0004 SUB2 .Pantalla/y DEO2
|
||||
|
||||
( establecer la dirección del sprite )
|
||||
;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 )
|
||||
.Pantalla/altura DEI2 HALF2 ( empujar y )
|
||||
.Pantalla/altura DEI2 MITAD2 ( empujar y )
|
||||
#ff ( empujar longitud de la línea )
|
||||
;dibujar-linea-horizontal JSR2 ( llamar subrutina )
|
||||
```
|
||||
|
|
|
@ -32,7 +32,7 @@ empecemos con el siguiente programa como plantilla. incluye los datos para un sp
|
|||
( dispositivos )
|
||||
|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 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||
|
||||
( macros )
|
||||
%RTN { JMP2r }
|
||||
|
@ -44,7 +44,7 @@ empecemos con el siguiente programa como plantilla. incluye los datos para un sp
|
|||
#2ce9 .Sistema/r DEO2
|
||||
#01c0 .Sistema/g DEO2
|
||||
#2ce5 .Sistema/b DEO2
|
||||
|
||||
|
||||
|
||||
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:
|
||||
|
||||
```
|
||||
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 )
|
||||
```
|
||||
|
||||
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:
|
||||
|
||||
|
@ -177,7 +177,7 @@ lo siguiente muestra nuestro programa en contexto, llenando completamente la pri
|
|||
( dispositivos )
|
||||
|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 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||
|
||||
( macros )
|
||||
%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.
|
||||
|
||||
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
|
||||
|
||||
|
@ -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:
|
||||
|
||||
```
|
||||
%HALF2 { #01 SFT2 } ( corto -- corto/2 )
|
||||
%MITAD2 { #01 SFT2 } ( corto -- corto/2 )
|
||||
```
|
||||
|
||||
### iniciar posiciones
|
||||
|
@ -542,7 +542,7 @@ MARGEN SUB2 ANCHO-PALA SUB2
|
|||
.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
|
||||
|
@ -573,11 +573,11 @@ omitiendo la definición de las subrutinas dibuja-fondo y dibuja-pala, y como fo
|
|||
( dispositivos )
|
||||
|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 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &llave $1 ]
|
||||
|80 @Controlador [ &vector $2 &boton $1 &tecla $1 ]
|
||||
|
||||
( macros )
|
||||
%RTN { JMP2r }
|
||||
%HALF2 { #01 SFT2 } ( corto -- corto/2 )
|
||||
%MITAD2 { #01 SFT2 } ( corto -- corto/2 )
|
||||
|
||||
( constantes )
|
||||
%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:
|
||||
|
||||
```
|
||||
%VELOC-PALA { #0001 }
|
||||
%VEL-PALA { #0001 }
|
||||
```
|
||||
|
||||
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 )
|
||||
|
||||
&izquierda-arriba
|
||||
.izquierda/y LDZ2 VELOC-PALA SUB2 .izquierda/y STZ2
|
||||
.izquierda/y LDZ2 VEL-PALA SUB2 .izquierda/y STZ2
|
||||
,&derecha JMP
|
||||
&izquierda-abajo
|
||||
.izquierda/y LDZ2 VELOC-PALA ADD2 .izquierda/y STZ2
|
||||
.izquierda/y LDZ2 VEL-PALA ADD2 .izquierda/y STZ2
|
||||
,&derecha JMP
|
||||
|
||||
&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 )
|
||||
|
||||
&derecha-arriba
|
||||
.derecha/y LDZ2 VELOC-PALA SUB2 .derecha/y STZ2
|
||||
.derecha/y LDZ2 VEL-PALA SUB2 .derecha/y STZ2
|
||||
,&fin JMP
|
||||
&derecha-abajo
|
||||
.derecha/y LDZ2 VELOC-PALA ADD2 .derecha/y STZ2
|
||||
.derecha/y LDZ2 VEL-PALA ADD2 .derecha/y STZ2
|
||||
|
||||
&fin
|
||||
POP ( hacer pop al valor duplicado del botón )
|
||||
POP ( hacer POP al valor duplicado del botón )
|
||||
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:
|
||||
|
||||
```
|
||||
@pelota [ &x $2 &y $2 &veloc-x $2 &veloc-y $2 ]
|
||||
@pelota [ &x $2 &y $2 &vel-x $2 &vel-y $2 ]
|
||||
```
|
||||
|
||||
### 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:
|
||||
|
||||
```
|
||||
( dentro de actualiza-pelota )
|
||||
.pelota/veloc-x LDZ2 ( obtener veloc-x )
|
||||
.pelota/vel-x LDZ2 ( obtener vel-x )
|
||||
.pelota/x LDZ2 ( obtener x )
|
||||
ADD2 ( sumarlos )
|
||||
.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!
|
||||
|
||||
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!
|
||||
|
||||
|
@ -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:
|
||||
|
||||
```
|
||||
#ffff .pelota/veloc-x STZ2
|
||||
#ffff .pelota/vel-x STZ2
|
||||
```
|
||||
|
||||
y luego usamos exactamente el mismo código para actualizar la posición:
|
||||
|
||||
```
|
||||
( dentro de actualiza-pelota )
|
||||
.pelota/veloc-x LDZ2 ( obtener veloc-x )
|
||||
.pelota/vel-x LDZ2 ( obtener vel-x )
|
||||
.pelota/x LDZ2 ( obtener x )
|
||||
ADD2 ( sumarlas )
|
||||
.pelota/x STZ2 ( almacenar nueva x )
|
||||
|
@ -978,8 +978,8 @@ ADD2 ( sumarlas )
|
|||
podría tener sentido establecer estos valores como macros:
|
||||
|
||||
```
|
||||
%PELOTA-VELOC-POS { #0001 } ( +1 )
|
||||
%PELOTA-VELOC-NEG { #ffff } ( -1 )
|
||||
%PELOTA-VEL-POS { #0001 } ( +1 )
|
||||
%PELOTA-VEL-NEG { #ffff } ( -1 )
|
||||
```
|
||||
|
||||
### 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 ( -- )
|
||||
( obtener velocidad-x y x )
|
||||
.pelota/veloc-x LDZ2 .pelota/x LDZ2
|
||||
.pelota/vel-x LDZ2 .pelota/x LDZ2
|
||||
ADD2 ( sumarlos )
|
||||
.pelota/x STZ2 ( guarda la nueva x )
|
||||
|
||||
( obtener velocidad-y e y )
|
||||
.pelota/velocidad-y LDZ2 .pelota/y LDZ2
|
||||
.pelota/vel-y LDZ2 .pelota/y LDZ2
|
||||
ADD2 ( sumarlos )
|
||||
.pelota/y STZ2 ( almacenar nueva y )
|
||||
RTN
|
||||
|
@ -1011,8 +1011,8 @@ HALF2 .pelota/x STZ2
|
|||
HALF2 .pelota/y STZ2
|
||||
|
||||
( iniciar la velocidad de la pelota )
|
||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
||||
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||
```
|
||||
|
||||
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
|
||||
MARGEN-PARED
|
||||
LTH2 ( ¿es pelota-y menos que el margen? )
|
||||
,&establecer-veloc-pos JCN
|
||||
,&establecer-vel-pos JCN
|
||||
,&verif-pared-inf JMP
|
||||
|
||||
&establecer-veloc-pos
|
||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
||||
&establecer-vel-pos
|
||||
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||
&continuar JMP
|
||||
&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
|
||||
MARGEN-PARED SUB2 ( altura - margen )
|
||||
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
||||
,&establecer-veloc-neg JCN
|
||||
,&establecer-vel-neg JCN
|
||||
&continuar JMP
|
||||
|
||||
&establecer-veloc-neg
|
||||
PELOTA-VELOC-NEG .pelota/veloc-y STZ2
|
||||
&establecer-vel-neg
|
||||
PELOTA-VEL-NEG .pelota/vel-y STZ2
|
||||
&continuar
|
||||
```
|
||||
|
||||
|
@ -1097,13 +1097,13 @@ nuestra subrutina de actualización de la pelota tiene el siguiente aspecto ahor
|
|||
@actualiza-pelota ( -- )
|
||||
( actualizar x )
|
||||
( obtener velocidad-x y x )
|
||||
.pelota/speed-x LDZ2 .pelota/x LDZ2
|
||||
.pelota/vel-x LDZ2 .pelota/x LDZ2
|
||||
ADD2 ( sumarlas )
|
||||
.pelota/x STZ2 ( guardar la nueva x )
|
||||
|
||||
( actualizar y )
|
||||
( obtener velocidad-y e y )
|
||||
.pelota/veloc-y LDZ2 .pelota/y LDZ2
|
||||
.pelota/vel-y LDZ2 .pelota/y LDZ2
|
||||
ADD2 ( sumarlos )
|
||||
.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
|
||||
MARGEN-PARED
|
||||
LTH2 ( ¿es la pelota-y menor que el margen? )
|
||||
,&establecer-veloc-pos JCN
|
||||
,&establecer-vel-pos JCN
|
||||
,&verif-pared-inf JMP
|
||||
|
||||
&establecer-veloc-pos
|
||||
PELOTA-VELOC-POS .pelota/veloc-y STZ2
|
||||
&establecer-vel-pos
|
||||
PELOTA-VEL-POS .pelota/vel-y STZ2
|
||||
&continuar JMP
|
||||
|
||||
&verif-pared-inf
|
||||
|
@ -1124,11 +1124,11 @@ nuestra subrutina de actualización de la pelota tiene el siguiente aspecto ahor
|
|||
.pantalla/alto DEI2
|
||||
MARGEN-PARED SUB2 ( altura - margen )
|
||||
GTH2 ( ¿es la pelota-y mayor que la pared-y? )
|
||||
,&establecer-veloc-neg JCN
|
||||
,&establecer-vel-neg JCN
|
||||
&continuar JMP
|
||||
|
||||
&establecer-veloc-neg
|
||||
PELOTA-VELOC-NEG .pelota/veloc-y STZ2
|
||||
&establecer-vel-neg
|
||||
PELOTA-VEL-NEG .pelota/vel-y STZ2
|
||||
&continuar
|
||||
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 )
|
||||
&verif-pala-izq
|
||||
.pelota/x LDZ2
|
||||
MARGEN ALTO-PALA ADD2
|
||||
MARGEN ANCHO-PALA ADD2
|
||||
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
|
||||
|
||||
&x-en-izq
|
||||
&x-en-izquierda
|
||||
( ... )
|
||||
|
||||
&verif-pala-der
|
||||
|
@ -1171,20 +1171,20 @@ si esas dos condiciones se cumplen, entonces podemos establecer una velocidad po
|
|||
|
||||
```
|
||||
( dentro de actualiza-pelota )
|
||||
&x-en-izq
|
||||
&x-en-izquierda
|
||||
.pelota/y LDZ2 DUP2
|
||||
.izquierda/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
||||
.izquierda/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
||||
STHr ( recupera la primera bandera )
|
||||
AND ( hacer AND en ambas banderas )
|
||||
&rebote-izq JCN
|
||||
&rebote-izquierda JCN
|
||||
```
|
||||
|
||||
donde rebote-izq sería:
|
||||
donde rebote-izquierda sería:
|
||||
|
||||
```
|
||||
&rebote-izq
|
||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
||||
&rebote-izquierda
|
||||
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||
,&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.
|
||||
|
||||
todo el código x-en-izq terminaría pareciendo:
|
||||
todo el código x-en-izquierda terminaría pareciendo:
|
||||
|
||||
```
|
||||
( dentro de actualiza-pelota )
|
||||
&x-en-izq
|
||||
&x-en-izquierda
|
||||
.pelota/y LDZ2 DUP2
|
||||
.izquierda/y LDZ2 BALL-SIZE SUB2 GTH2 ( primera bandera ) STH
|
||||
.izquierda/y LDZ2 PADDLE-HEIGHT ADD2 LTH2 ( segunda bandera )
|
||||
.izquierda/y LDZ2 TAM-PELOTA SUB2 GTH2 ( primera bandera ) STH
|
||||
.izquierda/y LDZ2 ALTO-PALA ADD2 LTH2 ( segunda bandera )
|
||||
STHr ( recupera la primera bandera )
|
||||
AND ( hacer AND en ambas banderas )
|
||||
,&rebote-izq JCN
|
||||
,&rebote-izquierda JCN
|
||||
|
||||
.pelota/x LDZ2 #0000 NEQ2 ( ¿ha llegado a la pared? )
|
||||
,&fin JCN
|
||||
|
@ -1214,7 +1214,7 @@ todo el código x-en-izq terminaría pareciendo:
|
|||
,&fin JMP
|
||||
|
||||
&rebote-izquierda
|
||||
PELOTA-VELOC-POS .pelota/veloc-x STZ2
|
||||
PELOTA-VEL-POS .pelota/vel-x STZ2
|
||||
,&fin JMP
|
||||
|
||||
&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?
|
||||
|
||||
### 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