Merge pull request 'traducción_día_6_y_demases' (#5) from jota/compudanzas:traducción_día_6_y_ocb into main
Reviewed-on: #5
This commit is contained in:
commit
ea43a7f5e6
|
@ -43,7 +43,25 @@ también hablamos del uso de la memoria del programa como un espacio para datos
|
|||
|
||||
# día 5
|
||||
|
||||
¡proximamente!
|
||||
aquí introducimos el dispositivo de ratón varvara para explorar más posibles interacciones, y cubrimos los elementos restantes de uxntal y uxn: la pila de retorno, el modo de retorno y el modo de retención.
|
||||
|
||||
también discutimos posibles estructuras para crear bucles y programas más complejos utilizando estos recursos.
|
||||
|
||||
{tutorial de uxn día 5}
|
||||
|
||||
# día 6
|
||||
|
||||
aquí hablamos de cómo podemos integrar todo lo que hemos cubierto para crear subrutinas y programas más complejos para el ordenador varvara.
|
||||
|
||||
basamos nuestra discusión en una recreación del clásico juego pong.
|
||||
|
||||
además de utilizar estrategias y fragmentos de código anteriores, cubrimos estrategias para dibujar y controlar sprites de varios tiles, y para comprobar las colisiones.
|
||||
|
||||
{tutorial de uxn día 6}
|
||||
|
||||
# día 7
|
||||
|
||||
¡próximamente!
|
||||
|
||||
# índice tentativo
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# apéndice A
|
||||
|
||||
¡proximamente! traducción en proceso. :)
|
|
@ -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
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ Controlador/tecla DEI ( lee la tecla y la introduce en la pila )
|
|||
AND ( aplica un AND a las banderas de la pila, y empuja el resultado a la pila )
|
||||
```
|
||||
|
||||
que la instrucción sea bitwise significa que aplica la operación AND a cada uno de los bits de los operandos.
|
||||
que la instrucción sea a nivel de bit (o "bitwise") significa que aplica la operación AND a cada uno de los bits de los operandos.
|
||||
|
||||
si ambas banderas fueran "verdaderas":
|
||||
|
||||
|
@ -569,7 +569,7 @@ dependiendo de nuestra aplicación, podríamos necesitar permitir que algunos de
|
|||
|
||||
en ese caso, ¿cómo podríamos aislar cada uno de los bits para comprobar su estado individualmente?
|
||||
|
||||
conoce las máscaras AND a nivel de bits
|
||||
conoce las máscaras AND a nivel de bits.
|
||||
|
||||
## máscara AND
|
||||
|
||||
|
|
|
@ -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 )
|
||||
```
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
|||
# día 7
|
||||
|
||||
¡proximamente! traducción en proceso. :)
|
|
@ -346,6 +346,7 @@ i used nasu to draw a paddle consisting of 2x3 tiles in 2bpp mode. i will number
|
|||
2 3
|
||||
4 5
|
||||
```
|
||||
|
||||
=> https://100r.co/site/nasu.html 100R - nasu
|
||||
|
||||
the resulting data is the following:
|
||||
|
@ -956,7 +957,7 @@ we get 0! fffe works effectively as "-2"!
|
|||
|
||||
we could continue in that way getting more and more "negative" numbers that works thanks to the constrained size of computer memory.
|
||||
|
||||
going back to our code, if we initialize our speed with
|
||||
going back to our code, if we initialize our speed with:
|
||||
|
||||
```
|
||||
#ffff .ball/speed-x STZ2
|
||||
|
@ -1079,7 +1080,7 @@ the y coordinate of the bottom wall would be the height of the screen, less the
|
|||
.ball/y LDZ2 BALL-SIZE ADD2 ( y + ball size )
|
||||
.Screen/height DEI2
|
||||
WALL-MARGIN SUB2 ( height - margin )
|
||||
GTH2 ( is the ball y greater than the wall y? )
|
||||
GTH2 ( is the ball-y greater than the wall-y? )
|
||||
,&set-negative-speed JCN
|
||||
,&continue JMP
|
||||
|
||||
|
@ -1090,7 +1091,6 @@ the y coordinate of the bottom wall would be the height of the screen, less the
|
|||
|
||||
### update-ball code so far
|
||||
|
||||
|
||||
our update-ball subroutine looks like the following right now:
|
||||
|
||||
```
|
||||
|
@ -1192,7 +1192,6 @@ and what happens if both conditions are not met at the same time?
|
|||
|
||||
we can let the ball keep moving, but checking that it hasn't crossed the left wall, by comparing with 0000.
|
||||
|
||||
|
||||
the whole x-in-left code would end up looking like:
|
||||
|
||||
```
|
||||
|
@ -1223,7 +1222,6 @@ the whole x-in-left code would end up looking like:
|
|||
|
||||
finish would be a label at the end of the subroutine, and reset is a subroutine that we will discuss later.
|
||||
|
||||
|
||||
this approach of comparing with 0000 is the easiest, but keep in mind that it might not work if you change the ball speed: it could happen that it crosses the wall but with an x coordinate that is never equal to 0.
|
||||
|
||||
we can't really check if the x coordinate is less than 0, because as we discussed above, that would actually be a number close to ffff.
|
||||
|
|
Loading…
Reference in New Issue