Allegro 5

Programmation de jeux en C ou C++


précédentsommairesuivant

II. Installation

II-A. Introduction

L'installation d'une bibliothèque est un moment capital. Nous avons pris le temps de le détailler ici pour celles et ceux qui ne seraient pas familiers de cette opération.

II-B. Téléchargement de la bibliothèque compilée

Sur https://www.allegro.cc/files/ à l'onglet 5.0, téléchargez les packages Windows binaries concernés. Il s'agit actuellement :

  • pour Visual Studio 12 et 13 : MSVC 11 / allegro-5.0.10-msvc-11.0.zip,
  • pour la version 12 de Code::Blocks : MinGW 4.7.0 / allegro-5.0.10-mingw-4.7.0.zip.

Il est conseillé également de télécharger tous les exemples avec leurs codes sources : allegro-5.0.8-extra.zip.

La bibliothèque est un dossier zippé qui comprend trois sous dossiers :

  1. Le dossier bin contient toutes les DLL. Chaque DLL correspond à un module d'Allegro. Les DLL dites monolith sont des regroupements de tous les modules. Il est ainsi possible soit de tout prendre, soit de sélectionner quelques modules avec uniquement les DLL correspondantes.
  2. Le dossier include contient tous les fichiers d'en-têtes (*.h). Ils sont nécessaires aux compilateurs au moment de la compilation.
  3. Le dossier lib contient tous les fichiers lib (.lib sous Visual et .a sous Code::Blocks) à savoir le code compilé de la bibliothèque qui sera reliée à chaque projet pour la compilation.

II-C. À propos des noms de DLL et de .lib dans Allegro

La forme adoptée pour les noms des DLL est la suivante :

[nom bibliothèque]-[version]-[type module]-[options]-[option debug].dll

par exemple avec le module monolith nous avons les possibilités suivantes :

  • allegro-5.0.10-monolith-mt.dll
    allegro-5.0.10-monolith-mt-debug.dll
    allegro-5.0.10-monolith-md.dll
    allegro-5.0.10-monolith-md-debug.dll

Avec un module simple le type du module passe avant le numéro de version :

  • allegro-font-5.0.10-mt.dll
    allegro-font-5.0.10-mt-debug.dll
    allegro-font-5.0.10-md.dll
    allegro-font-5.0.10-md-debug.dll
    allegro-primitives-5.0.10-mt.dll
    allegro-primitives-5.0.10-mt-debug.dll
    etc.

Quelques explications :

allegro

Est le nom de la bibliothèque.

5.0.10

Est la version de la bibliothèque.

monolith,
font,
primitives,
etc.

Est le type de module. Pour les modules autres que monolith il est placé avant la version de la bibliothèque. Le module monolith est un module qui inclut tous les modules. C'est utile si l'on ne désire pas avoir à choisir entre les différents modules. Dans ce tutoriel, nous n'utiliserons que les modules monolith.

mt

Il y a deux options mt ou md qui agissent sur le linkage des bibliothèques C standards.
Avec mt, les DLL de ces bibliothèques sont intégrées au programme. Avec md, elles ne sont pas intégrées et il faut les joindre en plus à la distribution du programme (pour qu'il puisse fonctionner sur une autre machine).
Choisir mt évite d'avoir à joindre ces DLL.

debug

Debug est une option présente ou non.

.dll

Extension de fichier DLL.

Chaque partie est séparée de la suivante par un tiret « - » et il n'y a pas de différence entre les compilateurs :

allegro-5.0.10-monolith-mt.dll
allegro-5.0.10-monolith-mt-debug.dll

Pour les fichiers lib correspondants, c'est le même nom mais l'extension change et il y a une petite différence entre MSVC et MinGW :

  • Pour MSVC, le fichier lib prend le nom de la DLL avec une extension .lib, ce qui donne :
    allegro-5.0.10-monolith-mt.lib
    allegro-5.0.10-monolith-mt-debug.lib
  • Pour MinGW, lib devient un préfixe et l'extension est un .a, soit :
    liballegro-5.0.10-monolith-mt.a
    liballegro-5.0.10-monolith-mt-debug.a

Mais au moment du linkage sous MinGW, le préfixe et l'extension sont laissés de côté, ce qui donne :

allegro-5.0.10-monolith-mt
allegro-5.0.10-monolith-mt-debug

II-D. Positionnement des DLL

L'exécutable réalisé à la compilation aura besoin des DLL pour fonctionner. Il y a trois solutions :

  • Copier les DLL dans le répertoire de l'exécutable.
    Sachant que les programmes Allegro auront besoin de ces DLL pour fonctionner, c'est la bonne solution si vous voulez les copier sur d'autres ordinateurs. Par exemple pour pouvoir les tester chez un ami.
    C 'est également la bonne solution si vous souhaitez utiliser deux compilateurs simultanément, par exemple Code::Blocks et Visual Studio. En effet les DLL pour Code::Blocks et pour Visual C++ portent les mêmes noms mais ne sont pas compatibles.
  • Copier les DLL dans le dossier system approprié.
    Si vous n'avez pas l'intention d'utiliser plusieurs compilateurs pour vos projets Allegro et que vous ne souhaitez pas les exporter sur d'autres machines, il y a une seconde solution : vous pouvez copier les DLL, à savoir le contenu du dossier bin de la bibliothèque (pas le dossier mais uniquement son contenu), dans :

    • C:\Windows\SysWOW64 si vous avez un ordinateur avec Windows 64 bits.
      C:\Windows\System32 si vous avez un ordinateur avec Windows 32 bits.


    L'avantage est que vous n'aurez pas besoin de recopier les DLL dans le répertoire de chaque programme Allegro.

  • Utiliser une bibliothèque statique.
    Il existe une autre possibilité qui consiste à lier le projet avec les fichiers .lib statiques de la bibliothèque. Dans ce cas l'exécutable incorpore le code des DLL et il n'y a plus besoin d'adjoindre la ou les DLL au programme pour qu'il fonctionne.

II-E. Installation et configuration sous Code::Blocks, MinGW

II-E-1. Accès à la bibliothèque

Pour pouvoir utiliser la bibliothèque Allegro ou n'importe quelle autre bibliothèque dans ce projet, il faut que le compilateur ainsi que l'éditeur de liens puisse la trouver sur le disque dur :

  • Le compilateur a besoin de connaître l'emplacement du dossier include de la bibliothèque.
  • L'éditeur de liens a besoin de connaître l'emplacement du dossier lib de la bibliothèque.

Le premier point est de copier la bibliothèque décompressée dans un endroit où elle devra rester. Par exemple, à la racine du disque C :

Image non disponible

Ce qui donne le chemin C:\allegro-5.0.10-mingw-4.7.0.

Pour faire connaître ce chemin au compilateur et à l'éditeur de liens, il y a deux solutions : le faire pour chaque projet en partant du menu Projects ou le faire de façon définitive pour tous les projets en partant du menu Settings. Nous allons présenter les deux. Cette démarche est la même pour toutes les bibliothèques et il peut être utile de connaître ces deux techniques. Elles sont très semblables.

Si vous travaillez à plusieurs, une bonne idée serait de placer les dossiers include et lib dans le répertoire du projet. Ainsi, vous pourrez facilement échanger votre projet avec vos collaborateurs sans qu'ils aient besoin de le reconfigurer pour correspondre à leur installation.

II-E-1-a. Accès du compilateur à la bibliothèque pour un seul projet

Allez dans le menu Projects et sélectionnez Build options ; la fenêtre Project build options s'ouvre :

Image non disponible

Sélectionnez l'onglet Search directories et cliquez sur Add :

Image non disponible

Dans la boîte de dialogue, cliquez sur le bouton IM5.PNG afin de rechercher sur le disque l'emplacement de la bibliothèque.

Image non disponible

Dans le sélecteur de dossier qui s'ouvre, sélectionnez le dossier include de la bibliothèque et cliquez sur OK :

Image non disponible

Une boîte de dialogue demande de choisir entre chemin relatif ou absolu :

Image non disponible

A priori il est conseillé d'utiliser le chemin absolu et de laisser la bibliothèque toujours au même endroit, cliquez sur Non.

Une fois que la boîte de dialogue est fermée, le chemin est récupéré dans la zone de saisie précédente :

Image non disponible

Cliquez sur OK.

Image non disponible

Le chemin est entré dans la fenêtre Project build options mais ne quittez pas la fenêtre, il faut maintenant indiquer à l'éditeur de liens où se trouve le dossier lib de la bibliothèque.

Dans la fenêtre Project build options, toujours dans l'onglet Search directories, sélectionnez le sous-onglet Linker et faites la même chose que dans le sous-onglet Compiler mais indiquez cette fois le dossier lib.

Image non disponible

Dans la boîte de dialogue Add directory qui s'ouvre, cliquez sur Image non disponible.

Image non disponible

Sélectionnez le dossier lib de la bibliothèque et cliquez sur OK.

Image non disponible

À la question entre chemin relatif ou absolu, choisissez plutôt chemin absolu et cliquez sur Non, le chemin est récupéré :

Image non disponible

Cliquez sur OK ; le chemin C:\allegro-5.0.10-mingw-4.7.0\lib est intégré au projet.

Image non disponible

Avant de terminer, il reste à faire la même chose pour le mode release. Code::Blocks fournit la possibilité de copier les résultats de l'un sur l'autre. Procéder comme suit :

Sélectionnez le chemin d'accès dans la fenêtre centrale. Pour le compilateur (onglet Compiler), nous obtenons :

Image non disponible

Cliquez sur Copy to…. La fenêtre Copy directories s'ouvre :

Image non disponible

Sélectionnez Release et cliquez sur OK. La copie est faite pour Compiler. Faites de même pour l'onglet Linker.

De retour dans la fenêtre Project build options, cliquez sur OK pour la fermer.

Une fois connue, la démarche est assez simple mais il faut la reprendre pour chaque projet et on peut avoir envie de la réaliser une fois pour toutes.

II-E-1-b. Accès du compilateur à la bibliothèque pour tous les projets

Pour réaliser ce paramétrage une fois pour toutes et non plus à chaque projet, il faut faire la même chose en partant du menu Settings qui se trouve sur la fenêtre principale de l'application.

Dans le menu Settings, sélectionnez Compiler. Cette fenêtre s'ouvre :

Image non disponible

Sélectionnez l'onglet Search directories et, dans l'onglet Compiler, ajoutez le chemin d'accès pour le dossier include de la bibliothèque comme vu précédemment pour le projet.

Image non disponible

Ensuite, dans l'onglet Linker, ajoutez le chemin d'accès pour le dossier lib de la bibliothèque :

Image non disponible

Notez que la question entre chemin relatif et absolu n'est pas posée : le chemin est absolu.

II-E-2. Relier des modules de la bibliothèque (édition de liens)

Maintenant que le compilateur et l'éditeur de liens savent où est la bibliothèque, que ce soit au niveau du projet ou au niveau global des paramètres du compilateur (Settings), il reste à établir quels sont les modules utilisés de la bibliothèque et à les relier au projet.

Pour ce faire, retournez dans le menu Project, sélectionnez Build options et dans la fenêtre qui s'ouvre sélectionnez l'onglet Linker settings :

Image non disponible

Dans la partie tout à gauche, sélectionnez Debug :

Image non disponible

Ensuite cliquez sur le bouton Add, la fenêtre Add library s'ouvre :

Image non disponible

Dans la boîte de saisie, entrez le nom du fichier module souhaité. Il correspond à un des fichiers lib du dossier lib de la bibliothèque. Choisissez le fichier nommé liballegro-5.0.10-monolith-mt-debug.a mais dans la boîte de saisie vous pouvez supprimer le préfixe et l'extension et entrer allegro-5.0.10-monolith-mt-debug (si vous les laissez, ça marche aussi bien). Cliquez sur OK.

Ensuite, sélectionnez Release à gauche (ou Debug si vous avez commencé par Release avant).

Image non disponible

La fenêtre suivante s'ouvre et demande si les changements précédents doivent être sauvegardés, cliquez sur Yes.

Image non disponible

Ensuite, cliquez à nouveau sur le bouton Add et la fenêtre d'ajout de bibliothèque apparaît, entre le nom du module allegro-5.0.10-monolith-mt :

Image non disponible

Cliquez sur OK et le projet est configuré.

II-E-3. Vérification de l'installation

Voyons si l'installation est correcte et testons un projet dans lequel la bibliothèque est liée. Le programme ci-dessous initialise la bibliothèque puis ouvre une petite fenêtre de dialogue avec un message :

 
Sélectionnez
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>

// fonction simple pour le contrôle d'erreur
void erreur(const char*txt)
{
    al_show_native_message_box(NULL,"ERREUR",txt,NULL,NULL,0);
    exit(EXIT_FAILURE);
}
/*************************************************************
*************************************************************/
int main()
{
    // obligatoire pour utiliser allegro
    if(!al_init())
        erreur("al_init()");

    // un petit message de bienvenue
    al_show_native_message_box(NULL,"Premier programme",
                             "Hello allegro !",NULL,NULL,0);
    
    return 0;
}
/*************************************************************
*************************************************************/

Pour utiliser la bibliothèque premièrement, inclure l'en-tête principal de la bibliothèque :

 
Sélectionnez
#include <allegro5/allegro.h>

Afin de disposer d'une fenêtre de dialogue, il faut aussi inclure l'en-tête correspondant :

 
Sélectionnez
#include <allegro5/allegro_native_dialog.h>

Ensuite vient la fonction erreur() qui sera souvent utilisée afin d'obtenir un éventuel message d'erreur dans diverses situations.

Dans le main() appelez la fonction d'initialisation de la bibliothèque. C'est obligatoire au lancement d'un programme qui utilise Allegro :

 
Sélectionnez
al_init() ;

Cette fonction retourne 0 en cas de problème, si elle n'a pas pu s'exécuter complètement. Le test permettra de le savoir.

Enfin l'appel de la fonction al_show_native_message_box() ouvre une petite fenêtre avec un message dedans. Le second paramètre donne un titre à cette fenêtre et le troisième le message à afficher. Les autres seront étudiés ultérieurement.

Si tout est correct, vous devriez voir s'ouvrir une fenêtre console et la fenêtre de dialogue comprenant votre message s'afficher par-dessus :

Image non disponible

II-E-4. Erreurs fréquentes

  • Le compilateur ne connaît pas le chemin d'accès du dossier include de la bibliothèque :
Image non disponible

Vérifiez le chemin d'accès au dossier include de la bibliothèque (cf. section Accès du compilateur à la bibliothèque pour un seul projetAccès du compilateur à la bibliothèque pour un seul projet, si vous souhaitez paramétrer un seul projet, ou section Accès du compilateur à la bibliothèque pour tous les projetsAccès du compilateur à la bibliothèque pour tous les projets, si vous souhaitez spécifier globalement les chemins d'accès à la bibliothèque Allegro pour tous les projets).

l

  • Le compilateur ne connaît pas le dossier lib de la bibliothèque ou/et le module utilisé n'est pas relié au projet :
Image non disponible

Vérifiez l'accès au dossier lib de la bibliothèque (cf. section Accès du compilateur à la bibliothèque pour un seul projetAccès du compilateur à la bibliothèque pour un seul projet, si vous souhaitez paramétrer un seul projet, ou section Accès du compilateur à la bibliothèque pour tous les projetsAccès du compilateur à la bibliothèque pour tous les projets, si vous souhaitez spécifier globalement les chemins d'accès à la bibliothèque Allegro pour tous les projets).

Si le chemin est correct, l'erreur vient alors de la liaison entre le projet et le module utilisé de la bibliothèque. Vérifiez alors que cette liaison est correcte en reprenant la démarche présentée à la section Relier des modules de la bibliothèque (édition de liens)Relier des modules de la bibliothèque (édition de liens). Pour commencer, afin de simplifier l'opération, nous conseillons d'utiliser un seul module, le module monolith, qui regroupe tous les modules.

II-F. Installation et configuration sous Visual C++

II-F-1. Création d'un projet vide

Lancez Visual Studio.

L'ouvrage a été commencé sous Visual Studio 2012 et poursuivi ensuite sous Visual Studio 2013 sans rencontrer de différence, les versions 2012 et 2013 étant quasi identiques pour ce qui nous intéresse dans cet ouvrage.

L'interface d'accueil de Visual Studio 2013 est la suivante :

Image non disponible

Trois entrées sont proposées pour la création d'un nouveau projet :

  • menu Fichier, commande Nouveau puis Projet,
  • icône Nouveau projet,
  • Nouveau projet… dans la page de démarrage.

Choisissez celle que vous voulez, la fenêtre suivante apparaît :

Image non disponible

Dans le volet gauche, sélectionnez Visual C++. Il s'agit là de sélectionner tous les types projets ayant le C++ (et le C) pour langage de programmation.

Dans le volet central, sélectionnez Projet vide. En effet, le projet console proposé par défaut n'est pas un projet C standard et nous allons rester dans le C standard. Le volet de droite fournit des informations sur le type de projet sélectionné.

Dans le volet en bas de la fenêtre saisissez :

  • Le nom du projet. J'ai nommé mon projet « premier programme ».
  • L'emplacement. Pour ce faire, utilisez le bouton Parcourir… qui permet de sélectionner un emplacement pour le projet et sa solution (voir en dessous) sur le disque.
  • Le nom de solution. Une solution est un ensemble de projets. Dans une solution, vous pouvez mettre plusieurs projets et c'est très pratique de pouvoir ainsi les regrouper. Personnellement j'ai nommé ma solution « PRG MSVC » dans l'idée de regrouper plusieurs programmes réalisés avec Visual Studio pour cet ouvrage dans la même solution. Par défaut la solution prend le nom du projet. Une solution peut très bien ne contenir qu'un seul projet. À la création de la solution, il est possible d'obtenir un dossier (un répertoire) pour la solution avec une case à cocher. Cette case est cochée par défaut mais si vous voulez placer la solution dans un dossier déjà créé, il suffit de la décocher. En cas de création d'un dossier, ce dossier porte le nom de la solution.

Lorsque tout est paramétré, cliquez sur OK. Vous retrouvez l'interface de Visual Studio avec le nouveau projet présent dans la fenêtre Explorateur de solutions :

Image non disponible

Cette fenêtre peut se trouver à droite ou à gauche, vous pouvez facilement la déplacer en sélectionnant la barre de déplacement bleue. L'arborescence donne le nom de la solution à l'intérieur de laquelle se trouvent un ou plusieurs projets. Pour chaque projet, il y a quatre dossiers contenant tous les fichiers associés au projet, notamment les fichiers de code source. En l'occurrence, nous avons un seul projet et tous ses dossiers sont vides parce que nous avons demandé un projet vide.

Pour ajouter un fichier de code source, faites un clic droit sur le nom du projet dans l'explorateur de solutions. Un menu contextuel s'ouvre. Sélectionnez Ajouter et Nouvel élément. Une fenêtre s'ouvre :

Image non disponible

Dans le volet central, sélectionnez Fichier C++ (cpp) et en bas saisissez un nom pour le fichier.

Sous Visual C++ nous devons rester en C++ afin de compiler les programmes qui utilisent Allegro 5 en C++. La compilation de ces programmes en C provoque une erreur liée à l'utilisation par Allegro d'une bibliothèque annexe <stdbool.h>. Ce problème n'est pas résolu actuellement, et pour compiler en C il est nécessaire de recompiler la bibliothèque en modifiant le paramètre ALLEGRO_HAVE_STDBOOL_H. La démarche étant un peu compliquée, nous préférons rester en C++.

Le fait d'être en C++ n'aura pas de conséquence sur le code ultérieurement, en effet le C est inclus dans le C++.

Ici, le nom du fichier source complet est ainsi premier programme.cpp.

Pour finir, cliquez sur Ajouter. Le fichier apparaît dans le dossier Fichiers sources de l'explorateur de solutions. C'est une page blanche.

II-F-2. Accès à la bibliothèque et liaison avec les modules

Le compilateur et l'éditeur de liens ont besoin de connaître l'emplacement de la bibliothèque sur le disque, les modules utilisés ainsi que les modules nécessaires à la compilation, soit les trois opérations suivantes :

  • indiquer le chemin pour le dossier include de la bibliothèque,
  • indiquer le chemin pour le dossier lib de la bibliothèque,
  • relier au projet les modules de la bibliothèque qui sont requis, à savoir les fichiers lib utilisés.

Tout d'abord, copiez la bibliothèque décompressée dans un endroit où elle devra rester. Par exemple à la racine du disque C :

Image non disponible

Si vous travaillez à plusieurs, une bonne idée serait de placer les dossiers include et lib dans le répertoire du projet. Ainsi, vous pourrez facilement échanger votre projet avec vos collaborateurs sans qu'ils aient besoin de le reconfigurer pour correspondre à leur installation.

Ensuite dans l'explorateur de solutions, faites un clic droit sur le projet premier programme. Un menu s'ouvre ; sélectionnez l'item Propriétés (tout en bas). Cette fenêtre s'ouvre :

Image non disponible

En haut à gauche, dans la liste Configuration, sélectionnez l'item Toutes les configurations.

En dessous, dans le volet de gauche, vérifiez que vous êtes bien dans la rubrique C/C++ - Général.

Dans la colonne du centre sélectionnez Autres répertoires Include et cliquez sur la petite flèche tout à droite puis cliquez sur l'item <Modifier…> qui apparaît. La fenêtre Autres répertoires Include s'ouvre :

Image non disponible

Cliquez sur l'icône représentant un dossier en haut sur la droite et ensuite sur Image non disponible qui apparaît en bout de ligne. Le sélecteur de répertoires s'ouvre :

Image non disponible

Sélectionnez sur le disque le répertoire include de la bibliothèque Allegro pour Visual C++ et cliquez sur le bouton Sélectionner un dossier.

Le chemin est récupéré dans la fenêtre précédente Autres répertoires Include :

Image non disponible

Cliquez sur OK.

De retour sur la fenêtre Pages de propriétés…, suivez le même principe pour l'accès au dossier lib de la bibliothèque :

En haut à gauche, vérifiez que configuration est bien Toutes les configurations et dans le volet de gauche vérifiez que vous êtes bien dans la rubrique Éditeur de liens - Général.

Image non disponible

Dans la colonne du centre, sélectionnez Répertoires de bibliothèques supplémentaires et cliquez sur la petite flèche tout à droite puis cliquez sur l'item <Modifier…> qui apparaît.

La fenêtre Répertoires de bibliothèques supplémentaires s'ouvre :

Image non disponible

Cliquez sur l'icône représentant un dossier en haut sur la droite et ensuite sur Image non disponible qui apparaît en bout de ligne. Le sélecteur de répertoires s'ouvre :

Image non disponible

Choisissez sur le disque le répertoire lib de la bibliothèque Allegro pour Visual C++ et cliquez sur le bouton Sélectionner un dossier.

Le chemin est récupéré dans la fenêtre précédente Répertoires de bibliothèques supplémentaires :

Image non disponible

Cliquez sur OK.

Vous retrouvez la fenêtre Pages de propriétés de… et il reste encore à établir les liens avec les modules de la bibliothèque utilisés dans le projet.

Nous en utilisons deux. Pour la configuration debug, le module allegro-5.0.10-monolith-mt-debug.lib et pour la configuration release, le module allegro-5.0.10-monolith-mt.lib.

Dans la fenêtre Pages de propriétés, sélectionnez Configuration : Debug puis Éditeur de liens - entrée.

Image non disponible

Dans la colonne du milieu, sélectionnez Dépendances supplémentaires et cliquez sur la petite flèche à droite en bout de ligne. Dans l'item qui s'ouvre, cliquez sur <Modifier…> et la fenêtre Dépendances supplémentaires s'ouvre :

Image non disponible

Dans la partie de saisie en haut où clignote le curseur, entrez le nom du module pour la configuration debug : allegro-5.0.10-monolith-mt-degug.lib et cliquez sur OK.

Sur la fenêtre Pages de propriétés, sélectionnez Configuration : Release et recommencez l'opération précédente :

Image non disponible

Dans la colonne du milieu, sélectionnez Dépendances supplémentaires et cliquez sur la petite flèche à droite en bout de ligne. Dans l'item qui s'ouvre, cliquez sur <Modifier…> et la fenêtre Dépendances supplémentaires s'ouvre :

Image non disponible

Dans la partie de saisie en haut où clignote le curseur, entrez le nom du module pour la configuration release : allegro-5.0.10-monolith-mt.lib et cliquez sur OK.

Dans la fenêtre Pages de propriétés, cliquez sur Appliquer puis sur OK, ou cliquez directement sur OK.

II-F-3. Vérification de l'installation

Vérifiez que l'installation est correcte avec le code ci-dessous. Ce programme initialise la bibliothèque, puis ouvre une petite fenêtre de dialogue, utilisable dans une application pour avoir des messages en différentes occasions :

Tester l'installation
Sélectionnez
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>

// fonction simple pour le contrôle d'erreur
void erreur(const char*txt)
{
    al_show_native_message_box(NULL,"ERREUR",txt,NULL,NULL,0);
    exit(EXIT_FAILURE);
}

/*************************************************************
*************************************************************/
int main()
{
    // obligatoire pour utiliser allegro
    if(!al_init())
        erreur("al_init()");

    // un petit message de bienvenue
    al_show_native_message_box(NULL,"Premier programme","Hello allegro !",NULL,NULL,0);
    
    return 0;
}
/*************************************************************
*************************************************************/

Pour utiliser la bibliothèque premièrement, inclure l'en­tête principal de la bibliothèque :

 
Sélectionnez
#include <allegro5/allegro.h>

Afin de disposer d'une fenêtre de dialogue, vous devez aussi inclure l'en­tête correspondant :

 
Sélectionnez
#include <allegro5/allegro_native_dialog.h>

Ensuite vient la fonction erreur() qui sera souvent utilisée pour afficher des messages d'erreurs d'Allegro de manière détaillée.

Dans le main() appelez la fonction d'initialisation de la bibliothèque. C'est obligatoire au lancement d'un programme qui utilise Allegro :

 
Sélectionnez
al_init() ;

Cette fonction retourne 0 en cas de problème, si elle n'a pas pu s'exécuter complètement. Le test permettra de le savoir.

Enfin l'appel de la fonction al_show_native_message_box() ouvre une petite fenêtre avec un message dedans. Le second paramètre donne un titre à cette fenêtre et le troisième le message à afficher. Les autres seront étudiés ultérieurement.

Pour compiler, nous disposons de plusieurs solutions :

  • Effectuer un clic droit sur le nom du projet et sélectionner Générer ou Régénérer.
  • Appuyer sur la touche [F7].
  • Ou dans le menu GÉNÉRER, sélectionner Générer la solution ou Régénérer la solution.

Pour lancer le programme ensuite, vous avez le choix entre :

  • Dans le menu Déboguer, sélectionner Démarrer le débogage.
  • Cliquer sur la petite flèche verte Débogueur Windows local présente par défaut sur la page principale.
  • Appuyer sur la touche [F5].

Si vous cliquez sur la flèche verte ou que vous appuyez sur la touche [F5] :

  • Si le projet n'est pas encore compilé, la compilation est automatiquement effectuée avant d'ouvrir votre application.
  • Si le projet a déjà été compilé et que des modifications ont été faites depuis la dernière compilation, il vous est demandé si une recompilation est requise. Si vous cliquez sur Oui, le programme est recompilé avant d'être exécuté ; si vous sélectionnez Non, c'est la dernière compilation réussie qui est lancée.

Si tout est OK vous devriez voir s'ouvrir une fenêtre console et la fenêtre de dialogue comprenant votre message s'afficher par dessus :

Image non disponible

II-F-4. Erreurs fréquentes

Les erreurs communes sont les suivantes :

  • Impossible d'ouvrir le fichier « source allegro5/allegro.h » : le chemin d'accès au dossier include de la bibliothèque n'est pas connu. Reprendre la manipulation présentée afin d'indiquer au compilateur où se trouve le dossier include de la bibliothèque Allegro 5 (cf. section Accès à la bibliothèque et liaison avec les modulesAccès à la bibliothèque et liaison avec les modules).
  • fatal error LNK1104 : impossible d'ouvrir le fichier 'allegro-5.0.10-monolith-mt-debug.lib : le chemin d'accès au dossier lib n'est pas connu. Reprendre la manipulation présentée afin d'indiquer au compilateur où se trouve le dossier lib de la bibliothèque Allegro 5 (cf. section Accès à la bibliothèque et liaison avec les modulesAccès à la bibliothèque et liaison avec les modules).
  • Premier programme.obj : error LNK2019: symbole externe non résolu __imp__al_install_system référencé dans la fonction _main.
    Premier programme.obj : error LNK2019: symbole externe non résolu __imp__al_show_native_message_box référencé dans la fonction "void __cdecl erreur(char const *)" (?erreur@@YAXPBD@Z) : le lien aux modules utilisés n'est pas établi. Reprendre la manipulation présentée afin d'indiquer quels sont les modules de la bibliothèque Allegro 5 qui doivent être reliés au projet (cf. section Accès à la bibliothèque et liaison avec les modules).
  • 1>c:\allegro-5.0.10-msvc-11.0\include\allegro5\platform\ astdbool.h(26) : error C2632: 'char' ne peut pas être suivi de 'bool' : sous Visual C++ 2013 actuellement un problème se pose avec une compilation en C. Pour l'éviter, mettez en .cpp l'extension du fichier source de votre programme. Si vous préférez vous pouvez aussi spécifier au compilateur de compiler en C++ et non en C. Pour ce faire dans l'explorateur de solutions, sélectionnez le projet, cliquez droit, sélectionnez Propriétés. Dans la page de propriétés colonne de gauche, sélectionnez C /C++ / Avancé. Dans la colonne de droite Compilation sous, cliquez sur la petite flèche et dans la liste sélectionnez C++.

II-F-5. Liaison statique de la bibliothèque

Une liaison statique avec la bibliothèque dispense d'adjoindre les DLL aux exécutables pour qu'ils puissent fonctionner. Dans ce cas, le code des DLL est incorporé aux exécutables à la compilation, ce qui fait d'ailleurs que les exécutables ont une taille supérieure en mémoire.

Pour un projet Visual Studio, la liaison s'effectue en trois étapes :

  • lier le projet (linkage) à chacune des bibliothèques statiques nécessaires,
  • configurer la génération du code en mettant la bibliothèque runtime en mode Multithread(/MT),
  • spécifier #define ALLEGRO_STATICLINK en tête du fichier main.

II-F-5-a. Lier le projet aux bibliothèques statiques nécessaires

Le nom des bibliothèques statiques contient l'option « static » après le nom du module ce qui permet de les différencier. Par exemple le module monolith en mode release et en mode debug sous Visual Studio correspond aux fichiers (avec x pour le numéro de version d'Allegro) :

allegro-5.0.x-monolith-static-mt.lib
allegro-5.0.x-monolith-static-mt-debug.lib

La liaison s'effectue de la même façon qu'avec une bibliothèque ordinaire non statique. Pour Visual Studio, depuis le menu : Projet - Propriétés - Éditeur de liens - entrées, ajoutez dans l'ordre :

pour la configuration debug :

allegro-5.0.10-monolith-static-mt-debug.lib

pour la configuration release :

allegro-5.0.10-monolith-static-mt.lib

Et pour les deux, la liste des bibliothèques suivantes :

dumb-0.9.3-static-mt.lib
freetype-2.4.8-static-mt.lib
libFLAC-1.2.1-static-mt.lib
libogg-1.2.1-static-mt.lib
libvorbis-1.3.2-static-mt.lib
libvorbisfile-1.3.2-static-mt.lib
openal-1.14-static-mt.lib
zlib-1.2.5-static-mt.lib
winmm.lib
opengl32.lib
gdiplus.lib
psapi.lib
shlwapi.lib

Attention, l'ordre des bibliothèques de cette liste doit être respecté.

II-F-5-b. Configurer la génération de code

Sélectionnez propriétés dans le menu Projet ou en faisant un clic droit sur le projet dans l'explorateur de solutions. La fenêtre des propriétés du projet s'ouvre.

En haut à gauche de la fenêtre, sélectionnez Configuration : Debug.

Dans la partie gauche en dessous, sélectionnez Génération de code en ouvrant l'onglet C/C++.

Dans la partie de droite, sélectionnez Bibliothèque Runtime et spécifiez Débogage multithread (/MTd) dans la liste des options proposées.

Ce qui donne :

Image non disponible

Ensuite, faites de même pour le mode release :

En haut à gauche de la fenêtre, sélectionnez Configuration : Active (Release). « Active » signifie simplement que c'est le mode actuel dans le projet. Une fenêtre s'ouvre afin que vous puissiez ou non sauvegarder vos paramétrages précédents :

Image non disponible

Cliquez sur Oui.

En configuration Release, dans la partie gauche en dessous, sélectionnez Génération de code en ouvrant l'onglet C/C++.

Dans la partie de droite, sélectionnez Bibliothèque Runtime et spécifiez Multithread (/MT) dans la liste des options proposées. Ce qui donne :

Image non disponible

Pour finir, cliquez sur OK.

II-F-5-c. Spécifier la directive ALLEGRO_STATICLINK

Dernier point, il faut indiquer la directive ALLEGRO_STATICLINK au préprocesseur. Pour ce faire, il y a deux méthodes. La première en utilisant la fenêtre des propriétés du projet :

Comme précédemment, ouvrez la fenêtre des propriétés du projet (menu Projet - Propriétés ou clic droit sur le projet dans l'explorateur de solutions et sélectionnez l'item Propriétés). La fenêtre s'ouvre.

En haut à gauche, dans la liste Configuration, sélectionnez l'item Toutes les configurations.

En dessous dans la partie gauche, dans l'onglet C/C++ sélectionnez Préprocesseur et dans la partie de droite Définitions de préprocesseur, ce qui donne :

Image non disponible

Cliquez sur la petite flèche au bout de la ligne à droite et dans la liste proposée, sélectionnez Modifier. La fenêtre Définitions de préprocesseur s'ouvre :

Image non disponible

Saisissez ALLEGRO_STATICLINK dans le champ et cliquez sur OK.

La seconde méthode est très rapide. Il suffit d'ajouter au-dessus du main, en toute première instruction, avant les includes :

 
Sélectionnez
#define ALLEGRO_STATICLINK

Ce qui donne, par exemple, comme premier programme pour tester :

 
Sélectionnez
#define ALLEGRO_STATICLINK // NOUVELLE LIGNE

#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>

// fonction simple pour le contrôle d'erreur
void erreur(const char*txt)
{
    al_show_native_message_box(NULL,"ERREUR",txt,NULL,NULL,0);
    exit(EXIT_FAILURE);
}

/*************************************************************
*************************************************************/
int main()
{
    // obligatoire pour utiliser allegro
    if(!al_init())
        erreur("al_init()");

    // un petit message de bienvenue
    al_show_native_message_box(NULL,"Premier programme","Hello allegro !",NULL,NULL,0);
    
    return 0;
}
/*************************************************************
*************************************************************/

Vous devez choisir l'une ou l'autre des deux méthodes, mais une seule pour éviter une redéfinition de la macro ALLEGRO_STATICLINK.

Obtenir ce livre

Image non disponible

Ce document est une retranscription autorisée du livre Allegro 5 - Programmation de jeux en C et C++ écrit par Frédéric DROUILLON. Initialement publié aux éditions ENI, vous pouvez commander le livre sur le site de l'éditeur.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2015 Frédéric DROUILLON. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.