Ver el código de Sección 6 - La brocha fluida

%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/brocha.png))%%

A Picasso, posiblemente, le había gustado disponer de un programa como este.

Si bien es cierto que los computadores no podrán reemplazar inmediatamente al lienzo y la pintura, tampoco nadie se atrevería a asegurar hasta donde se llegará con los gráficos hechos con computadores.

Escribe y ejecuta este programa. Toda la pantalla se pondrá negra, excepto las 4 lineas inferiores.

Cerca del centro del área negra, aparecerá un punto blanco. Mueve el joystick y podrás pintar, igual que si dispusieras de una brocha con pintura blanca. El movimiento del punto se ha fijado intencionalmente lento, para que puedas manejarlo con la precisión deseada.

Si presionas el botón rojo y mueves el joystick, observarás que el punto se mueve más rápido, pero ahora no pinta sino que borra. Tienes, entonces, una brocha que se mueve rápidamente deede un área de la pantalla a otra, y que aún pinta, suficientemente lento como para permitirte un control total.

Pero pintar todo en color blanco puede resultar aburrido y monótono. Para eso, el programa te permite elegir el color con que desees pintar.

Cuando parte el programa, estas pintando con el color del registro i, blanco. Para seleccionar otro color presiona alguna de las teclas 1, 2 ó 3.

En el modo gráfico 7 (GRAPHICS 7) puedes tener disponibles 3 registros de color. Pero antes que comiences a pintar debes escoger el matiz de color que usarás.

Escribe un número para elegir el color, entre 0 para el blanco (un gris muy claro, en realidad) y 15 para el naranja claro (casi un dorado) y presiona RETURN. La Tabla 1 en el Programa 5 de este libro, te dará la lista completa de los colores disponibles.

El Programa es iniciado entre las líneas 1000 y 2030. La posición inicial del punto para dibujar es X=90, Y=48; su color ( C ) es 0 (cero); su registro de color ( R ) es 1 y su luminancia ( L ) es 10.

La linea 1000 abre un canal para recibir información desde el teclado. Tiene la forma:
%%(code)
OPEN #1,4,0,"K:"
%%
El primer parámetro (el dígito 1) es nuestra elección arbitraria del canal de entrada/salida y puede ser cualquiera entre 1 y 5.

En realidad, hay 8 canales en total, numerados de 0 a 7, pero Atari Basic reserva los canales 0, 6 y 7 para actividades específicas.

El canal 0, está permanentemente reservado para el editor (dispositivo "E:") y es usado para las instrucciones PRINT e INPUT; el canal 6 es utilizado por las instrucciones relacionadas con gráficos en pantalla y el canal 7 para algunas operaciones de la impresora y para cargar (LOAD) y grabar (SAVE) los archivos.

El segundo dígito (el 4) indica al computador que usaremos el canal para efectuar operaciones de entrada (INPUT) y el tercero (el 0) es siempre necesario de colocar, por estructura del Atari Basic.

En la cuarta posición indicaremos el dispositivo desde donde efectuaremos la operación, en este caso desde el teclado (KEYBOARD), lo que se escribe "K:".

Observa el diagrama 1 que se muestra más adelante. El joystick retorna números entre 5 y 15, según la posición que ocupe el bastón. En la página 11 de este libro, encontrarás una representación gráfica de la correspondenc i a posición/valores.

El número retornado se usará como subíndice para los arreglos XD e YD, para determinar como serán cambiadas las coordenadas X e Y del punto sobre la pantalla. Si el joystick es empujado al frente y ala derecha, por ejemplo, el número obtenido es 6; XD(6)=1 e YD(6)=-1. El punto se moverá una posición hacia la derecha (+1) y una posición hacia arriba (-1), tal como es la intención del usuario al mover el joystick en esa dirección. Los arreglos XD e YD son iniciados en las líneas 1110 a 2030.

La rutina principal del programa comienza en la línea 150. La línea 160 determina la velocidad de desplazamiento del punto sobre la pantalla. Si se ha presionado el botón rojo del joystick, STRIG(0)=0 y S=0. Si el botón no está presionado STRIG(0)=1 Y S=100. La línea 170 usa la variable S para la rutina de espera. Finalmente, las líneas 150 y 180 hacen que el punto parpadee. La línea 200 asegura que si el botón está presionado, el punto borre o deje una traza negra, cuando se mueve el joystick.

La línea 250 obtiene el valor del joystick, el que se usa para modificar las posiciones X e Y, como se explicó anteriormente y la línea 290 coloca el punto en su nueva localización.

La sentencia TRAP de la línea 280, envía la ejecución del programa a la línea 3000, cuando la sentencia PLOT intenta graficar un punto fuera de los límites de la pantalla, lo que provocará un error.

La rutina de las líneas 3000 a 3020, suma 1 a Y si Y está sobre la pantalla (Y(0) o resta 1 de Y si Y esta por debajo de la pantalla (Y)79). Del mismo modo ajusta i a coordenada X si X está a la izquierda (X(0) o a la derecha (X)159) de los límites de la pantalla. Finalmente, la rutina devuelve la. ejecución a la línea 280.

El usuario puede especificar un nuevo color. La línea 300 verifica si se ha presionado alguna tecla, lo que detecta cuando la localización 764 contiene un valor diferente de 255. La sub-rutina que comienza en la. línea 4000, es llamada, para responder a los requerimientos del artista.

Lo primero que hace esta rutina es obtener el valor ASCII correspondiente a la tecla presionada. La sentencia GET colocará el valor de la tecla en i a variable R. Los valores ATASCII para los números 1, 2 y 3 son 49, 50 y 51, respectivamente. Cualquier valor diferente de ellos, será ignorado y el programa esperará hasta que se efectúe un ingreso válido.

La línea 4020 convierte los valores ATASCII al número que corresponde (1,2 ó 3) y la linea 4030 fija el color para los próximos gráficos.

La sentencia POSITION no controla i a ubicación para las sentencias PRINT en la ventana de texto. La posición vertical puedes controlarla colocando valores entre 0 y 3 en la dirección 756 y la horizontal con valores entre 0 y 39 en la 657. Este trabajo lo hace la 1ínea 4040,

Como la sentencia de la línea 4050 se imprimirá siempre en la misma ubicación, es necesario borrar la respuesta anterior, incluyendo cuatro movimientos de flecha a !a izquierda, después de la palabra COLOR.

__**Diagrama 1**__
Arreglos para el control de joystick

**Movimiento en el sentido de las X**
#|
||XD(10)=-1|XD(14)=0|XD(6)=1||
||XD(11)=-1|XD(15)=0|XD(7)=1||
||XD(9)=-1|XD(13)=0|XD(5)=1||
|#

**Movimiento en el sentido de las Y**
#|
||YD(10)=-1|YD(14)=-1|YD(6)=-1||
||YD(11)=0|YD(15)=0|YD(7)=0||
||YD(9)=1|YD(13)=1|YD(5)=1||
|#

__**Listado de instrucciones**__
%%(code)
10 REM LA BROCHA FLUIDA
60 GOSUB 1000:REM SALTO A RUTINA FIJA CONDICIONES
100 SETCOLOR R-1,C,L
140 REM DEFINE BOTON PARA SELECCIONAR VELOCIDAD
150 COLOR 4:PLOT X,Y
160 S=100*STRIG(0)
170 FOR I=1 TO S:NEXT I
180 COLOR R:PLOT X,Y
200 IF S=0 THEN COLOR 4:PLOT X,Y:COLOR R
230 REM MUEVE EL PUNTO SI EL JOYSTICK ES MOVIDO
250 J=STICK(0)
260 Y=Y+YD(J)
270 X=X+XD(J)
280 TRAP 3000
290 PLOT X,Y
300 IF PEEK(764)<>255 THEN GOSUB 4000
310 GOTO 150
990 REM FIJA CONDICIONES PARA DIBUJO
1000 GRAPHICS 7
1010 X=90
1020 Y=48
1030 C=0
1040 L=10
1050 R=1
1060 SETCOLOR R-1,C,L
1070 COLOR 1
1080 PLOT X,Y
1090 OPEN #1,4,0,"K:"
1100 DIM XD(15),YD(15)
1110 FOR I=1 TO 15
1120 READ N:XD(I)=N
1130 READ N:YD(I)=N
1140 NEXT I
1150 RETURN 
2000 DATA 0,0,0,0,0,0,0,0
2010 DATA 1,1,1,-1,1,0,0,0
2020 DATA -1,1,-1,-1,-1,0,0,0
2030 DATA 0,1,0,-1,0,0
2990 REM EMITA MOVIMIENTOS FUERA DE LA PANTALLA
3000 Y=Y+(Y<0)-(Y>79)
3010 X=X+(X<0)-(X>159)
3020 GOTO 230
3990 REM CAMBIO DE COLOR
4000 GET #1,R
4010 IF (R<49)*(R>51) THEN 4000
4020 R=R-48
4030 COLOR R
4040 POKE 656,2
4050 PRINT "COLOR <-- <-- <-- <--";
4060 INPUT C
4070 SETCOLOR R-1,C,L
4080 RETURN
%%