1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| enum PlaceEquipement //Note: utiliser "enum class" si supporté
{
Tete,
Torse,
MainGauche,
MainDroite,
MAXp1_PLACE_EQUIPEMENT
};
struct ObjetEquipable
{
//Ici, on supporte TOUTES les propriétés des objets,
//comme ça certains peuvent servir aux deux (bouclier à pointe, épée avec garde, etc.)
string nom;
int protection;
int degats;
};
class Personnage
{
private:
vector<ObjetEquipable*> equipement;
bool estGaucher;
public:
Personnage(bool estGaucher) : equipement(MAXp1_PLACE_EQUIPEMENT), estGaucher(estGaucher) { }
void equipe(PlaceEquipement place, ObjetEquipable* objet) { equipement.at((int)place) = objet; }
ObjetEquipable const * getArme() const
{
return estGaucher ? equipement.at((int)MainGauche) : equipement.at((int)MainDroite);
}
//Ensuite, pour la protection, un truc de ce genre, ou de l'autre:
int getSommeProtections() const
{
//Note: En fait, il doit y avoir un truc dans <algorithm> qui fait ça pour toi
int total = 0;
for(vector<ObjetEquipable*>::const_iterator it = equipement.begin() ; it != equipement.end() ; ++it)
{
if((*it) != null)
total += (*it)->protection;
}
return total;
}
ObjetEquipable const * getMeilleureProtection() const
{
//Note: En fait, il doit y avoir un truc dans <algorithm> qui fait ça pour toi
ObjetEquipable const* meilleur = null;
for(vector<ObjetEquipable*>::const_iterator it = equipement.begin() ; it != equipement.end() ; ++it)
{
if((*it) != null)
{
if(meilleur==null || (*it)->protection > meilleur->protection)
meilleur = *it;
}
}
return meilleur;
}
}; |
Partager