Introduction 1. Introduction 11 2. La bibliothèque Allegro 5 11 2.1 Concept de la bibliothèque 11 2.2 Documentation 12 3. Compilateurs et IDE 13 4. Contenu du livre 13 4.1 Principe 13 4.2 Objectifs 14 5. Prérequis 15 6. Public visé 15 7. Remerciements 16 Installation de la bibliothèque Allegro 1. Introduction 17 2. Téléchargement de la bibliothèque compilée 17 3. À propos des noms de DLL et de.lib dans Allegro 18 4. Positionnement des DLL 20 5. Installation et configuration sous Code::Blocks, MinGW 21 1/11
5.1 Création d un projet console (ou vide) 21 5.2 Accès à la bibliothèque 25 5.2.1 Accès du compilateur à la bibliothèque pour un seul projet 26 5.2.2 Accès du compilateur à la bibliothèque pour tous les projets 34 5.3 Relier des modules de la bibliothèque (linkage) 38 5.4 Vérification de l'installation 41 5.5 Erreurs fréquentes 43 6. Installation et configuration sous Visual C++ 44 6.1 Création d un projet vide 44 6.2 Accès à la bibliothèque et liaison avec les modules 48 6.3 Vérification de l'installation 56 6.4 Erreurs fréquentes 59 6.5 Liaison statique de la bibliothèque 60 6.5.1 Lier le projet aux bibliothèques statiques nécessaires 60 6.5.2 Configurer la génération de code 61 6.5.3 Spécifier la directive ALLEGRO_STATICLINK 63 Premiers pas avec Allegro 1. Introduction 67 2. Créer une fenêtre 68 3. Obtenir le clavier 70 4. Obtenir la souris 73 5. Éléments de gestion des fenêtres 76 5.1 Dimensionner une fenêtre existante et la positionner à l'écran 77 5.2 Activer le contrôle de redimensionnement 81 6. Gestion du plein écran 83 2/11
6.1 Fenêtre qui couvre tout l'écran 83 6.2 Plein écran sans fenêtre 85 6.3 Résolutions supportées 87 7. Création d un modèle de projet (template) 91 7.1 Code de base du projet 91 7.2 Modèle de projet sous Code::Blocks 93 7.3 Modèle de projet sous Visual Studio 94 8. Quelques précisions 97 8.1 Utilisation de la fenêtre console 97 8.1.1 Création d'un projet sans fenêtre console 97 8.1.2 Alternative à la fenêtre console sous Allegro 101 8.2 Meilleur contrôle du clavier simple 105 8.2.1 Problème des répétitions du clavier 105 8.2.2 Compter les répétitions clavier 107 8.3 Meilleur contrôle de la souris simple 110 8.3.1 Problème des répétitions de clics 110 8.3.2 Compter les clics sur chaque bouton de la souris 112 Texte, polices, couleur, dessin 1. Introduction 117 2. Texte et polices 117 2.1 Sélectionner une police 117 2.2 Afficher du texte 120 2.3 Obtenir les dimensions d une police 123 3. Couleurs, transparence 125 4. Primitives de dessin 127 4.1 Mise en place du module de dessin 127 3/11
4.2 Lignes, triangles, rectangles, cercles 127 4.2.1 Expérimentation des fonctions de tracé 130 4.3 Arcs 133 4.3.1 Expérimentation : tracer des arcs 134 4.3.2 Expérimentation : récupérer les points d'un arc 138 4.4 Courbe de Bézier (spline) 140 4.4.1 Expérimentation : tracer une courbe de Bézier 140 4.4.2 Expérimentation : récupérer les points d'une courbe de Bézier 143 4.5 Ruban 146 4.5.1 Expérimentation : tracer un ruban 147 4.5.2 Expérimentation : récupérer les points d'un ruban 149 Images 1. Introduction 151 2. Bitmap en mémoire 151 2.1 Créer une bitmap 152 2.2 Dessiner dans une bitmap 154 3. Image 158 3.1 Charger une image (load) 158 3.2 Afficher une image 160 3.3 Expérimenter les fonctions d affichage 163 3.4 Sélectionner une image pour la modifier 168 3.5 Obtenir les propriétés de l'image 169 3.6 Sauvegarder une image 170 4. L'image pixel par pixel 174 4.1 Accès aux pixels 174 4.2 Expérimentations verrouillage, al_get_pixel(), al_put_pixel() 177 4.3 Mélanges de couleurs (blending) 179 4/11
5. Paramétrage des options 185 Les événements 1. Introduction 189 2. Mettre en place une boucle d'événements 190 2.1 Création d'une file d'événements 190 2.2 Sélection des types d'événements à prendre en compte 191 2.3 Capture des événements 193 2.4 Identification de l'événement 194 2.5 Autres possibilités de capture d'événements 197 3. Récupérer le clavier et la souris dans une boucle d'événements 199 4. Piloter un rectangle avec les flèches du clavier 205 5. Contrôler l'exécution d'un programme avec un minuteur 209 6. Donner de la fluidité aux mouvements du rectangle 212 7. Constituer un modèle de projet (template) 218 8. Comprendre l'implémentation des événements 221 8.1 Les identificateurs d'événements 221 8.2 Les structures d'événements 222 8.2.1 Structure ALLEGRO_DISPLAY_EVENT 223 8.2.2 Structure ALLEGRO_JOYSTICK_EVENT 225 8.2.3 Structure ALLEGRO_KEYBOARD_EVENT 227 8.2.4 Structure ALLEGRO_MOUSE_EVENT 232 8.2.5 Structure ALLEGRO_TIMER_EVENT 234 5/11
8.2.6 Structure ALLEGRO_USER_EVENT 235 8.3 L'union ALLEGRO_EVENT 237 8.3.1 Rappel sur le type union 237 8.3.2 Détail de l'union ALLEGRO_EVENT 238 Joystick 1. Introduction 241 2. Prise en main simple 241 2.1 Principales fonctions 241 2.2 Expérimentation en mode texte 246 2.3 Structure de données pour l'état d'un joystick 250 3. Utilisation des événements 252 3.1 Types d'événements 252 3.2 Expérimentation en mode texte 252 3.3 Expérimentation graphique 257 Croquis de fourmis 1. Introduction 265 2. Fourmi seule 265 2.1 Structure de données d'une fourmi 266 2.2 Initialisation 266 2.3 Affichage 267 2.4 Mouvement 268 2.5 Libération mémoire 269 2.6 Code complet 269 2.7 Code complet version référence 273 6/11
3. Colonie de fourmis 279 3.1 Structure de données d'une colonie 279 3.2 Initialisation 279 3.3 Affichage 279 3.4 Mouvement 280 3.5 Mise à jour du code 280 3.6 Mise à jour du code, version référence 283 4. Colonie et collisions 286 4.1 Collision entre deux fourmis 286 4.2 Collisions dans la colonie 287 4.3 Mise à jour du code 287 4.4 Mise à jour du code, version référence 290 5. Collisions et combats 294 5.1 Combat 294 5.2 Modification de l'affichage 295 5.3 Modification de la fonction de détection de collision 296 5.4 Mise en œuvre des combats 296 5.5 Mise à jour du code version référence uniquement 296 6. Plusieurs colonies 300 6.1 Structure de données 300 6.2 Initialisation 301 6.3 Affichage 301 6.4 Mouvement 302 6.5 Mise à jour du code 302 6.6 Mise à jour du code, version référence 305 7. Mouvements d'ensemble des fourmis 308 7.1 Principe 308 7.2 Structure de données 308 7.3 Initialisation des fourmis 309 7.3.1 Fonction d'initialisation des fourmis 310 7/11
7.3.2 Création d'une palette de couleurs 311 7.4 Affichage 314 7.5 Mouvement 315 7.5.1 Détermination du mouvement 316 7.5.2 Actualisation 321 7.6 Changement de couleur 321 7.7 Initialisation du programme 322 7.8 Code complet 323 Modèle de jeu simple 1. Introduction 331 2. Mouvements du vaisseau 332 2.1 Structure de données du vaisseau 332 2.2 Initialisation 333 2.3 Affichage 334 2.4 Déplacements 334 2.5 Boucle événementielle du jeu, organisation du code 335 3. Lancement de missiles 341 3.1 Structure de données du missile 341 3.2 Initialisation 342 3.3 Affichage 343 3.4 Mouvement 343 3.5 Lancement 344 3.6 Mise à jour du code, action 344 4. Avancée des ennemis 348 4.1 Structure de données de l'ennemi 348 4.2 Initialisation 349 4.3 Affichage 349 4.4 Mouvement 350 4.5 Apparition 350 8/11
4.6 Mise à jour du code, action 351 5. Collisions 354 5.1 Point dans un rectangle 354 5.2 Point dans un triangle 355 5.3 Intersection de rectangles 359 5.4 Recherche d'une couleur sur un fond 362 6. Destruction des ennemis 366 6.1 Détection de collisions missiles-ennemis 366 6.2 Détection de collisions entre vaisseau et ennemis 367 7. Code complet du programme 369 Animation, sprites 1. Introduction 381 2. Un personnage marchant sur place 382 3. Un personnage piloté par le clavier 387 4. Gestion de la couleur du masque 393 5. Contrôle de la vitesse de l'animation 394 6. Récupération d'une série d'images sur un fichier unique 400 7. Plusieurs séquences simultanées 408 7.1 Plusieurs balles qui rebondissent 408 7.2 Plusieurs personnages qui se déplacent 411 9/11
Décor, monde 1. Introduction 425 2. Deux principes de décor : continu ou discontinu 425 2.1 La forme continue : une image, des calques, des rails 425 2.2 La forme discontinue : technique du «tile mapping» 426 3. Défilement d'une grande image (scroll) 426 4. Un univers composé de petites images (tile mapping) 430 4.1 Décor continu aléatoire 432 4.2 Utiliser une matrice de nombres 438 4.3 Composer le décor avec un éditeur graphique 446 Personnages dans un décor 1. Introduction 449 2. Un personnage mobile dans un décor fixe 449 2.1 Structures de données et initialisations 449 2.2 Contrôle du joueur 454 3. Nombreux personnages mobiles 467 3.1 Un ensemble de personnages 468 3.2 Le mouvement des clones 472 3.3 Le mouvement du joueur 474 Collisions entre personnages 1. Introduction 489 10/11
2. Cartographie des personnages 489 2.1 Mise en place de la carte 491 2.2 Mouvement des personnages 493 2.3 Code complet commenté 496 2.4 Problèmes posés 509 3. Automatisation du comportement des clones coincés 510 3.1 Modification de la structure de données 510 3.2 Gestion du mouvement 512 3.3 Gestion de l'affichage 513 4. Suppression de superpositions entre personnages 514 4.1 Principe d'une échelle de la cartographie 514 4.2 Principe de l'interception des collisions 516 4.3 Implémentation 517 4.4 Quelques perfectionnements 523 4.5 Code complet commenté 523 Index 539 Liste des programmes 553 11/11