From 22323c4ab5443b6fb56b9c4c2eeb01e74ee4940a Mon Sep 17 00:00:00 2001 From: jota Date: Tue, 11 Jan 2022 18:10:49 -0300 Subject: [PATCH] =?UTF-8?q?Traducci=C3=B3n=20de=20macros=20en=20los=20dema?= =?UTF-8?q?s=20d=C3=ADas=20y=20revisiones=20del=20D=C3=ADa=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tutorial_de_uxn_día_2.gmo | 18 ++-- src/tutorial_de_uxn_día_4.gmo | 16 ++-- src/tutorial_de_uxn_día_5.gmo | 2 +- src/tutorial_de_uxn_día_6.gmo | 151 ++++++++++++++++++++------------- 4 files changed, 112 insertions(+), 75 deletions(-) diff --git a/src/tutorial_de_uxn_día_2.gmo b/src/tutorial_de_uxn_día_2.gmo index e143824..3f65cea 100644 --- a/src/tutorial_de_uxn_día_2.gmo +++ b/src/tutorial_de_uxn_día_2.gmo @@ -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 diff --git a/src/tutorial_de_uxn_día_4.gmo b/src/tutorial_de_uxn_día_4.gmo index 92ab6b4..c798a15 100644 --- a/src/tutorial_de_uxn_día_4.gmo +++ b/src/tutorial_de_uxn_día_4.gmo @@ -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 diff --git a/src/tutorial_de_uxn_día_5.gmo b/src/tutorial_de_uxn_día_5.gmo index 6c9f66a..b194b8c 100644 --- a/src/tutorial_de_uxn_día_5.gmo +++ b/src/tutorial_de_uxn_día_5.gmo @@ -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 ) ``` diff --git a/src/tutorial_de_uxn_día_6.gmo b/src/tutorial_de_uxn_día_6.gmo index dc0eb67..3e78b28 100644 --- a/src/tutorial_de_uxn_día_6.gmo +++ b/src/tutorial_de_uxn_día_6.gmo @@ -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 +```