duck-hunt-ds

Duck Hunt clone for Nintendo DS
git clone https://git.neuralcrash.com/duck-hunt-ds.git
Log | Files | Refs | LICENSE

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