Canard.cpp (2767B)
1 #include "Canard.hpp" 2 #include <PA9.h> 3 #include "../gfx/all_gfx.h" 4 5 // Constructeur 6 // unId : identifiant du canard, sert pour le système de sprites 7 Canard::Canard(unsigned int unId) 8 :sonId(unId) 9 ,sonTick(0) 10 ,estAbattu(false) 11 ,estEnvole(false) 12 ,sonMouvement(0) 13 { 14 sonX = rand() % 224; // [0 .. 223] 15 sonY = 128 + rand() % 64; // [128 .. 191] 16 } 17 18 // Destructeur 19 Canard::~Canard() 20 { 21 } 22 23 // Affiche le canard sur les écrans 24 // Aux coordonnées (sonX, sonY) 25 // Avec le sprite qui va bien 26 void Canard::Afficher() const 27 { 28 /* 29 * Sélection du sprite 30 */ 31 32 // Si le canard a été abattu 33 if (estAbattu) 34 { 35 36 // On utilise le sprite du canard qui tombe 37 if (sonMouvement) // Vers la droite 38 { 39 PA_CloneSprite(0, sonId, 6); 40 PA_CloneSprite(1, sonId, 6); 41 } 42 43 else // Vers la gauche 44 { 45 PA_CloneSprite(0, sonId, 7); 46 PA_CloneSprite(1, sonId, 7); 47 } 48 49 } 50 51 // Si le canard n'a pas été abattu 52 else 53 { 54 55 // On utilise les sprites du canard qui vole 56 if (sonMouvement) // Vers la droite 57 { 58 PA_CloneSprite(0, sonId, sonTick % 6 / 2); 59 PA_CloneSprite(1, sonId, sonTick % 6 / 2); 60 } 61 62 else // Vers la gauche 63 { 64 PA_CloneSprite(0, sonId, sonTick % 6 / 2 + 3); 65 PA_CloneSprite(1, sonId, sonTick % 6 / 2 + 3); 66 } 67 68 } 69 70 /* 71 * Affichage du canard 72 */ 73 74 // Affichage sur l'écran du haut 75 if (-96 <= sonY && sonY < 0) 76 { 77 PA_SetSpriteXY(1, sonId, sonX, 192 + sonY); 78 } 79 80 // Affichage sur l'écran du bas 81 if (sonY > -32) 82 { 83 PA_SetSpriteXY(0, sonId, sonX, sonY); 84 } 85 86 return; 87 } 88 89 // Modifie les coordonnées du canard 90 void Canard::Bouger() 91 { 92 // Incrémentation du compteur 93 sonTick++; 94 95 // Si le canard a été abattu 96 if (estAbattu) 97 { 98 99 // S'il est encore sur l'écran 100 if (sonY < 192) 101 { 102 // Il tombe 103 sonY = sonY + 3; 104 } 105 106 } 107 108 // Si le canard n'a pas été abattu 109 else 110 { 111 112 if (sonTick % 20 == 0) 113 { 114 sonMouvement = rand() % 2; 115 } 116 117 // Vers la droite 118 if (sonMouvement) 119 { 120 121 if (sonX < 223) 122 sonX++; 123 124 } 125 126 // Vers la gauche 127 else 128 { 129 130 if (sonX > 0) 131 sonX--; 132 133 } 134 135 sonY--; 136 137 // Si le canard n'est plus du tout sur l'écran du bas 138 if (sonY < -31) 139 { 140 estEnvole = true; 141 } 142 143 } 144 145 return; 146 } 147 148 // Accesseur pour savoir si le canard s'est envolé 149 bool Canard::getEstEnvole() const 150 { 151 return estEnvole; 152 } 153 154 // Accesseur pour connaître le compteur du canard 155 unsigned int Canard::getSonTick() const 156 { 157 return sonTick; 158 } 159 160 // Tire sur le canard 161 // (unX, unY) : coordonnées du tire 162 bool Canard::Tirer(int unX, int unY) 163 { 164 165 // Si le canard a déjà été abattu 166 if (estAbattu) 167 { 168 return false; 169 } 170 171 // Si le canard n'a pas déjà été abattu 172 else 173 { 174 // Si le canard est touché ( zone de 32 pixels par 32 pixels ) 175 if (sonX <= unX && unX < sonX + 32 && sonY <= unY && unY < sonY + 32) 176 { 177 estAbattu = true; 178 } 179 180 return estAbattu; 181 } 182 183 } 184