Dpto. Lenguajes y Ciencias de la Computación E.T.S.I. Telecomunicación Laboratorio de Programación Introducción a Allegro con Dev-C++ Abril 2004 David Bueno Vallejo Plan • • • • • • • • Introducci ón Introducció Instalació Instalaci ón “Hola Mundo” Mundo” Dibujar figuras bá básicas y colores Manejo del rató ratón Introducir retrasos en el có código Cargar imá imágenes Minitutoriales 2 1 Introducció Introducci ón • La consola limita mucho las aplicaciones pues tiene una interfaz textual • A veces puede ser necesario trabajar con una interfaz grá gr áfica • Allegro es una librerí librer ía multiplataforma (funciona sobre windows//unix windows unix//mac os) que permite trabajar de una forma sencilla con modos grá gráficos, imá imágenes, textos, ventanas, rató ratón, teclado, sonido o dispositivos de juegos • La pá página oficial de allegro en españ español se encuentra en: – http://alleg.sourceforge.net/index.es.html 3 Instalació Instalaci ón • La librerí librería allegro puede descargarse de la pá página oficial o de: – http://altair.lcc.uma.es/clases/Laboratorio/curso200304/principal.html# http://altair.lcc.uma.es/clases/Laboratorio/curso200304/principal.html# entorno • El fichero allegro.zip contiene: – El fichero de instalació instalació n (Allegro_install.zip (Allegro_install.zip)) – La ayuda de allegro (allegro.en.chm (allegro.en.chm)) • Para la instalació instalació n seguir los pasos siguientes: – – – – – Ejecutar el programa Alleg4DC Alleg4DC.. exe que esta en el zip Allegro_install.zip (hay que prestar atenció atenció n para instalarlo en la misma carpeta en la que esté est é Dev Dev--C++. Supongamos que está est á en c:\ c:\ Dev Dev--Cpp Cpp)) Despué Despu é s de ejecutarlo, en C:\ C:\ Dev Dev--Cpp Cpp\\ Dll hay un fichero alleg40.dll alleg40.dll que debe acompañ acompañar a cualquier ejecutable que se cree (es decir, debe ir en la misma carpeta que el proyecto). Para comenzar una aplicació aplicació n con alegro se elige Archivo à Nuevo Proyecto à Allegro à Allegro Project (DLL Version Version)) Para que no aparezcan errores es necesario hacer lo siguiente: En Proyecto à Opciones de Proyecto à Par Pará ámetros à Linker Linker:: -lalleg 4 2 Hola Mundo #include <allegro.h> Inicializa pantalla, void InicializaAllegro () { teclado y ratón // Inicializa la librería Allegro. allegro_init(); set_color_depth(24); // Pone el número de colores a 24 bits // Selecciona la resolución de la pantalla a 640x480 set_gfx_mode(GFX_SAFE, 640, 480, 0, 0); install_keyboard (); // Inicializa las funciones de teclado de la librería install_timer();// Inicializa los temporizadores necesarios para manejar el ratón install_mouse(); // Prepara el rat ón para poder utilizarlo show_mouse(screen); // Muestra el ratón en pantalla } int main() Programa básico { de Allegro // Initializa Allegro. InicializaAllegro(); // Mensajes por pantalla textout(screen, font, "Hola Mundo!", 1, 1, 0xFFFFFF); textout(screen, font, "Pulsa ESCape para salir", 1, 12, 0xFF00FF); // Bucle que para cuando se pulsa la tecla ESC while(! key[KEY_ESC]) { poll_keyboard (); // No necesario en windows , limpia el buffer. } // Sale correctamente del allegro Se recomienda mirar con detalle todas las funciones allegro_exit(); expuestas en la ayuda de allegro para return 0; } conocer exactamente su funcionamiento. // Macro que llama a WinMain (). END_OF_MAIN(); 5 Dibujar figuras bá básicas y colores • En esta librerí librería la variable screen hace referencia a la pantalla • Para dibujar rectá rectángulos – (hueco): rect(pantalla,x1 rect(pantalla,x1,y1,x2,y2,color) ,y1,x2,y2,color) – (relleno): rectfill(pantalla,x1,y1,x2,y2,color) rectfill(pantalla,x1,y1,x2,y2,color) – Donde (x1,y1) es la esquina superior izquierda del rect ángulo y (x2,y2) la esquina inferior derecha – Si la resolució resolució n es de 640x480 quiere decir que x1,x2 pueden tomar un valor entre [0..639] e y1,y2 entre [0..479] – El color es un nú número hexadecimal en RGB(Rojo RGB(Rojo,, Verde y Azul) 0xRRGGBB, es decir para cada tonalidad se pueden poner dos valores valores entre 00 y FF – Ejemplos: Blanco(0xFFFFFF), Negro(0x000000), Amarillo(0xFFFF00), Rojo (0xFF0000) – En cualquier programa de dibujo se pueden obtener estos valores para cada color – Un ejemplo que pintarí pintaría un rect ángulo rojo serí sería: • rect(screen rect(screen,100,100,200,200,0xFF0000) ,100,100,200,200,0xFF0000) 6 3 Manejo del rató ratón • El manejo del rató ratón tambié también es muy sencillo. Tras inicializar el rató rató n • • • • • con install_mouse install_mouse,, se puede acceder en cualquier momento a las coordenadas del rató rató n con las variables enteras mouse_x y mouse_y.. mouse_y Por ejemplo, si mouse_x mouse_x=100 =100 y mouse_y mouse_y=234 =234 indica que el rató rató n está est á en la coordenada (100,234) de la pantalla. Para saber si se ha pulsado el botó botó n izquierdo del rató ratón, se puede utilizar la variable mouse_b que indica si se ha pulsado un botó botón La expresió expresión ( mouse_b & 1) vale 1 si el botó bot ón izquierdo se ha pulsado. Para comprobar si se ha pulsado el botó botón derecho la expresió expresión a consultar es (mouse_b (mouse_b & 2 == 2) Para saber si el rató ratón está está dentro de un rectá rectángulo, es suficiente con comprobar las coordenadas de los extremos. Por ejemplo, si el el rató rat ón está está en (x,y (x,y), ), se localizará localizará dentro del rectá rectá ngulo (100,200,150,250) si se cumple que: – ((100<x) && (x<150) && (200<y) && (y<250)) 7 Introducir retrasos en el có código • Si se quiere producir un retraso, es decir, parar la ejecuci ón durante un tiempo, se puede utilizar la ejecució instrucció instrucci ón: – rest(milisegundos rest(milisegundos)) • Por ejemplo, rest rest(1000) (1000) para el programa un segundo 8 4 Cargar imá imágenes • Los ficheros de imá imágenes se carga en una estructura llamada BITMAP, igual que la utilizada para la variable de pantalla screen screen.. Por ejemplo, para mostrar en las coordenadas de pantalla (100,150), una imagen llamada mina.bmp de tamañ tamaño 16x16, es necesario la siguiente secuencia de instrucciones BITMAP *imgmina; PALLETE pal; // Definición de la variable de tipo bitmap (puntero) // Definición de una variable de tipo paleta necesaria para //llamar a load_bmp imgmina=create_bitmap(16,16); // Reserva memoria para la imagen con 16 bits de // ancho y 16 de alto imgmina=load_bmp (“mina.bmp”,pal); // Carga el fichero mina.bmp en la zona // reservada if (imgmina==NULL) { // Se ha producido un error al cargar la imagen. Mostrar mens aje de error } else { blit(imgmina,screen ,0,0,100,150,15,15); // Copia el rectángulo situado en la //imagen imgmina (0,0,15,15) a la pantalla poniendo la //parte superior izquierda en (100,150), es decir en el //rectángulo (100,150,115,165) } Mirar en la ayuda de Allegro los detalles de las funciones mostradas anteriormente. 9 Minitutoriales • • La idea de este documento es la de permitir a un programador iniciarse iniciarse en la libreríía allegro librer Para un uso má más avanzado, est án disponibles otros minitutoriales en la pá página de la asignatura: http://altair.lcc.uma.es/clases/Laboratorio/curso200304/index.ht ml • Estos tutoriales tratan temas como: – – – – – – – – – – – ¿C ómo trabajar con clases (Pila)? ¿C ómo Leer Cadena con allegro? ¿C ómo Leer coordenadas de teclado? ¿C ómo hacer un menú menú? ¿C ómo incluir sonidos? ¿C ómo trabajar con ficheros de datos .dat . dat?? ¿C ómo incluir secuencias de video? ¿C ómo cambiar las fuentes? ¿C ómo trabajar con ficheros? ¿C ómo seleccionar zonas geometricas (triangulos triangulos,, rectá rectángulos, circulos circulos)? )? ¿C ómo hacer zoom y rotaciones? 10 5