Es posible que algunos conozcáis el lenguaje de programación LOGO, puesto que se enseña/enseñó en algunas escuelas para empezar a aprender programación. Consiste en un lenguaje de programación donde básicamente mueves una tortuga con un lápiz en un entorno gráfico, con comandos como hacer avanzar la tortuga (fd) o hacer girar la tortuga (rt, lt). Esto esta muy bien, pero tiene un inconveniente: una vez dominas el lenguaje, no te va a servir para nada más aparte de mover la tortuga.
Aparte de esto, la mayoría de los interpretes de LOGO son antiguos, no tienen antialising en el dibujado, e incluso algunos ni siquiera son compatibles con los procesadores de 64 bit actuales.
Pues aprovechando estas vacaciones de navidad, he creado una librería para C muy fácil de utilizar que os permitirá hacer dibujicos de la misma manera que se hace en LOGO en el lenguaje de programación C.
Esta librería consta únicamente de 2 archivos turtle.c y turtle.h aparte de la librería SDL, y tiene una implementación propia de antialising (En la cual dediqué gran parte del tiempo) y es compatible con Windows, Linux (Incluyendo Raspberry Pi), e imagino que en Mac también.
Ej:
El programa de la imagen sería el siguiente:
#include <stdio.h> | |
#include "turtle.h" | |
void fern(int size, int sign); | |
void fern(int size, int sign) | |
{ | |
if (size<1) return; | |
t_penSize(size/4); | |
t_forward(size); | |
t_turnRight(70*sign); | |
fern(size/2,sign*-1); | |
t_penSize(size/4); | |
t_turnLeft(70*sign); | |
t_forward(size); | |
t_turnLeft(70*sign); | |
fern(size/2,sign); | |
t_penSize(size/4); | |
t_turnRight(77*sign); | |
fern(size-1,sign); | |
t_turnRight(173*sign); | |
t_penUp(); | |
t_forward(size*2); | |
t_penDown(); | |
t_turnLeft(180); | |
} | |
int main(int argc, char ** argv) | |
{ | |
if (t_init(640,480,window)!=0) puts("Init error"); | |
else { | |
t_autoframeOff(); | |
t_moveSpeed(200); | |
t_turnSpeed(0); | |
t_penUp(); | |
t_goTo(192,450); | |
t_setAngle(0); | |
t_penDown(); | |
t_turColor(0,60,0); | |
fern(25,1); | |
t_frame(); | |
t_saveBMP("fern.bmp"); | |
t_idle(); | |
} | |
} |
Aparte de las instrucciones básicas como t_forward y t_turnRight también tenemos otras instrucciones opcionales como t_autoframeOff, t_moveSpeed y t_turnSpeed relacionadas con la animación, y otras instrucciones de utilidad interesantes como t_saveBMP que guarda en un archivo BMP el contenido de la pantalla.
La librería esta totalmente documentada en cualquier caso. Si aun así tenéis dudas o sugerencias, me las podéis comentar por aquí.