Allegro

Libreria para desarrollo de juegos multiplataforma.


  • Es opensource y funciona con GCC (además de otros compiladores)
  • Nos provee una capa que logra abstraer el hardware logrando que las aplicaciones sean portables.
  • El por que del nombre: Allegro Low LEvel Game ROutines.

Instalando Allegro

(en Ubuntu trusty 16.04LTS)


version 4


apt-get install liballegro4.4 liballegro4-dev allegro4-doc

version 5 (recomiendo esta)


apt-get install liballegro*5-dev liballegro5-dev allegro5-doc

No recomendado, pero posible:

Instalando desde el código fuente (en inglés)

Instalando Allegro

(otros Ubuntu y Debian)


Versiones de Allegro disponibles:


apt-cache search allegro | grep library

Paquetes ya instalados:


dpkg --get-selections | grep allegro

Instalando Allegro

Paquetes y Distribuciones:


  • Debian:
    • Paquete liballegro4-dev en wheezy y jessie
    • Paquete liballegro5-dev solo en jessie

  • Ubuntu:
    • Paquete liballegro5.0 en trusty (14.04LTS)
    • Paquete liballegro4.2-dev en precise (12.04LTS)

Documentación y ejemplos

(que vienen con la instalación)


Programando en Allegro


  • Archivos de configuración (ejemplo)
  • Inicialización
  • Ventana del juego (Display): FULLSCREEN o WINDOWED
    • Si es del tipo Window puede ser: FRAMELESS o RESIZABLE
  • Eventos
  • Temporizadores
  • Bitmaps
  • Teclado



Lista de ejemplos básicos del wiki

ZIP con todos listos para compilar

Programando en Allegro

Conceptos básicos: Display


  • Por defecto, se cuenta con 2 buffers para dibujar sobre la pantalla:
    • Se escribe en el buffer de pantalla el contenido a mostrar
    • al_flip_display() cambia entre ellas
  • Ejemplos de manejo de display:
    • Como crear un display: al01_display.c
    • Trabajando en fullscreen: al02_screenres.c
      • En mi máquina Thinkpad SL410 con Ubuntu 16.04 tiene problemas.
      • Debo repetir: al_clear_to_color()+al_flip_display() 3 veces y se "arregla".

Programando en Allegro

Conceptos básicos: Eventos1


  • En Allegro trabajamos con eventos:
    • Se almacenaran en una cola (FIFO) de Eventos
    • Los eventos pueden ser de teclado, mouse, ventanas, temporizadores o incluso eventos creados por el usuario
    • Como hay distintas fuentes que producen eventos, debemos poder detectar el tipo.

Programando en Allegro

Conceptos básicos: Eventos2


  • Allegro provee constantes para la detección de eventos:
    • ALLEGRO_EVENT_DISPLAY_CLOSE
    • ALLEGRO_EVENT_TIMER
    • ALLEGRO_KEY_ENTER
    • ALLEGRO_EVENT_KEY_DOWN
    • Muchos mas...
  • Ejemplo (MUY SENCILLO) de manejo de eventos, solo para ver la estructura: al03_events.c

Programando en Allegro

Conceptos básicos: Timers1


  • Marcan el tiempo de la aplicación:
    • Pueden regular el refresco de la pantalla
    • La demora entre una recorrida por la pantalla
    • La demora en explotar una bomba
    • Para realizar acciones en un determinado tiempo
    • Etc...
  • Son programables y pueden existir varias corriendo al mismo tiempo
  • Permiten manejar el concepto de FPS (Frames Per Second)

Programando en Allegro

Conceptos básicos: Timers2


  • Ejemplo (MUY SENCILLO) de uso de timers: al04_timers.c
  • Ejemplo de timers cambiando el color de la pantalla (inspirado en el anterior): al04_timers2.c

Programando en Allegro

Conceptos básicos: Formas


  • Es posible dibujar formas geométricas:
    • al_draw_triangle
    • al_draw_rounded_rectangle
    • al_draw_rectangle
    • al_draw_circle
    • al_draw_ellipse
    • al_draw_arc
    • al_draw_line

Programando en Allegro

Conceptos básicos: Bitmaps


  • Se puede dibujar un bitmap directamente en pantalla: al05_bitmaps.c
  • Es posible cargar una imagen desde archivo: al06_bitmapload.c
  • Los bitmaps pueden ser dibujados en una posición especifica de la pantalla
  • También se le pueden aplicar efectos y filtros (como transparencias).

Programando en Allegro

Conceptos básicos: Mouse y teclado


  • El teclado y el mouse son fuentes de eventos.
  • Es posible detectar los botones del mouse y las coordenadas X e Y para saber donde se produjo el click.
  • Es posible detectar cuando se presiona una tecla y también cuando se suelta.
  • Por supuesto también podremos distinguir que tecla fue presionada

Programando en Allegro

Conceptos básicos: Sprites


Bajar un archivo con todos los ejemplos

  • Para sprites vamos a necesitar transparencias: 1_Transparency1.c y 1_Transparency2.c
  • Animación básica sin sprites: 2_BasicAnimation.c
  • Creando un "Sprite Sheet" desde BMPs: 3_CreateSpriteSheet.c
  • Animación usando la "Sprite Sheet": 4_SpriteSheetAnimation.c

Programando en Allegro

¿Necesitamos hacer los sprites?

¿Y sonidos?


Bibliotecas:

Programando en Allegro

Conceptos básicos: Gameloop


  • El while(1) que uno nunca usaria...
  • Es una máquina de estados!!
  • Fundamental el manejo de eventos y timers

Programando en Allegro

Conceptos básicos: Gameloop


Ejemplo de juego "sencillo" (38+363 lineas): Bajar el zip

Adaptado de fixbyproximity.com

Resumen y material adicional de fixbyproximity.com


Algunas aclaraciones importantes sobre el material original:

  • Esta en inglés
  • Fue realizado para Visual C++. Los ejemplos que acá vemos/resumí los he modificado para que compilen en Linux con GCC. Los originales usan algunas cosas de C99 y Cpp/OjectiveC.
  • Varios de los capitulos originales son acompañados con un video explicativo (en inglés).

Programando en Allegro

Conceptos básicos: Addons


Permiten extender Allegro. Los mas comunes:

Programando juegos


Algunos de los conceptos generales de juegos son:



Estos conceptos son mucho mas sencillos de aplicar en 2D, pero también se pueden extender al desarrollo 3D.

Material de referencia




Mas ejemplos de Mike Geig

También adaptados de fixbyproximity.com

Librerias para manejo de log


Otras librerias





Installing guichan (for Allegro)


sudo apt-get install libguichan-allegro-0.8.1-1

Allegro + Sockets

Sockets no bloqueantes

Ver primera sección de la presentación de sockets avanzado

Allegro y sockets

Ejercicio al09_keyboard_net v1: Creciendo de a poco (con concecuencias)

Allegro y sockets

Ejercicio al09_keyboard_net

Para hacerlo igual necesitamos eventos, timers, etc...