viernes, 19 de octubre de 2012

UCBLogo: usando Logo para escribir en Logo


LOGO, en UCBLogo, no permite trabajar con imágenes, por lo que los dibujos los hemos de hacer también mediante programación. Se me ocurrió, sin embargo, que podríamos usar el propio UCBLogo y la interacción con el ratón para poder hacer una sencilla aplicación que permitiera dibujar con el ratón y que el resultado quedara guardado para otras aplicaciones. Para ello sencillamente habría que transformar las operaciones del ratón en código en LOGO y poder escribirlo a un fichero. Bueno, pues esto es lo que hace este sencillo programa.

Cómo funciona el programa: el programa nos pregunta al iniciar el nombre que vamos a dar a un fichero, lo crea y hace que la salida de escritura (la que se usa con el comando print que por defecto sale en la parte inferior en blanco de la pantalla) sea el propio fichero. Para ello usamos estos comandos:

print "Escribe_el_nombre_del_fichero
make "fichero readword  ;readword lee una palabra
openwrite fichero  ;abrimos el fichero para escritura
setwrite fichero   ;hacemos que el comando print escriba en el fichero

Veamos ahora un ejemplo visual de un dibujo en pantalla y el código que genera en el fichero:



Salida del programa en el fichero hola:

pendown
setxy 93+cx 90+cy
pendown
setxy 125+cx -4+cy
pendown
setxy -1+cx 0+cy
penup
setxy -39+cx -19+cy
pendown
setxy -49+cx 53+cy
pendown
setxy -130+cx 24+cy
pendown
setxy -42+cx -19+cy
penup
setxy -10+cx 31+cy
pendown
setxy -14+cx 88+cy
pendown
setxy 12+cx 95+cy
penup
setxy 12+cx 95+cy

Como vemos tenemos que escribir estas líneas. ¿Cómo lo hacemos? Concatenando palabras con el comando word:

make "w1 "setxy| |  

define una variable de nombre w1 que vale “setxy “, pues los caracteres | | sirven para poner un espacio (el espacio va entre las líneas verticales). A continuación hacemos:

make "rx first mousepos
make "w2 word w1 rx

que hace que la nueva variable w2 valga lo que valía w1 con el añadido de rx. Y así sucesivamente vamos construyendo todo el renglón añadiendo términos hasta llegar a la variable w5 que es la concatenación de todas ellas:

make "w3 word w2 "+cx| |
make "w4 word w3 ry
make "w5 word w4 "+cy| |
print "pendown
print w5

El programa hace uso de los dos botones del ratón y escribe código parecido pero diferente para cada uno de ellos. También se usa una variable puedopulsar (ya explicada en el videojuego captura la bola) para garantizar que sólo se escriba una vez por pulsación del botón del ratón.

Código del programa

;
; Raultecnologia
; Este sencillo programa nos permite realizar un dibujo sencillo con el raton
; que genera en un fichero el codigo en LOGO para el programa UCBLogo que
; nos permite dibujar dicho dibujo.
; Al hacer uso de las variables "cx" y "cy" sumadas a las coordenadas x,y,
; disponemos de un metodo para introducir nuestro dibujo en cualquier programa
; del UCBLogo
; Con el boton izquierdo del raton dibujamos linea y con el derecho vamos a otro
; punto sin dibujar
; La tecla "q" acaba el dibujo
;


showturtle
to inicio
print "Escribe_el_nombre_del_fichero
make "fichero readword
openwrite fichero
setwrite fichero
make "puedopulsar 1
make "tecla "p
penup
raton
end

to raton
if keyp [make "tecla rc]
make "rx first mousepos
make "ry last mousepos
if button = 0 [make "puedopulsar 1]
if puedopulsar = 1 [if button = 1 [make "puedopulsar 0 hideturtle pendown~
 setxy rx ry make "w1 "setxy| | make "w2 word w1 rx make "w3 word w2 "+cx| |~
 make "w4 word w3 ry make "w5 word w4 "+cy| | print "pendown print w5]]
if puedopulsar = 1 [if button = 2 [make "puedopulsar 0 showturtle penup~
 setxy rx ry make "w1 "setxy| | make "w2 word w1 rx make "w3 word w2 "+cx| |~
 make "w4 word w3 ry make "w5 word w4 "+cy| | print "penup print w5]]
if tecla = "q [close fichero]
raton
end