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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#ifndef PERSONNAGE_HPP
#define PERSONNAGE_HPP
#inculde <inventaire.hpp> // à implémenter ;)
class Personnage
{
public:
Personnage(int level = 0, int gold=0, int strength=1, int mana=60,
int live = 60
/*, les autres auxquels je ne pense pas */);
virtual ~Personnage() ;
/* !!! C++11 avec compilateur qui l'implémente uniquement
*/
Personnage(Personnage const &) = delete;
Personnage & operator = Personnage(Personnage const &) = delete;
/* on s'attend à pouvoir demander les différentes valeurs */
int level() const{return level_;}
int gold() const{return gold_;}
int strenght () const{return strength_;}
int mana() const{return mana_;}
int maxMana() const{return maxMana_;}
int live() const{return live_;}
bool alive() const{return live_>0;}
int maxLive() const{return maxLive_;}
/* tant qu'on ne sait pas qui attaque qui, on ne peut pas
* donner d'implémentation ;)
*/
virtual void attaque(Personnage &) = 0;
/* tant qu'on ne sait pas qui subit les dégats, on ne peut pas
* donner d'implémentation ;)
*
* degatType : valeur énumérée représentant différents types
* de dégats auxquels les différents personnages peuvent être
* plus ou moins sensibles en fonction de tout un tas de facteurs
* (à implémenter par ailleurs)
*/
virtual void subitDegats(int degat, degatType type) = 0;
/* l'expérience que l'on peut gagner en tuant le personnage
* dépend du type réel du personnage, et sans doute d'autres
* facteurs... on ne peut pas donner de comportement par défaut
*/
vitual int xpToGain() const = 0;
/* l'or que l'on peut gagner en tuant le personnage
* dépend du type réel du personnage et sans doute d'autres
* facteurs... on en peut pas donner de comportement par défaut
*/
/* on peut faire gagner de l'expérience autrement qu'en combat
*/
virtual void gainXp(int pointToAdd) = 0;
int goldToGain() const = 0;
/* Quelque peu en désaccord avec la loi de déméter, mais je ne suis
* pas réellement inspiré pour trouver autre chose :?
*/
Inventaire & inventaire() {return inventory_;}
/* quand on ramasse de l'or ou qu'on vent une piece d'inventaire */
void addGold(int combien){gold_+= combien; }
/* quand on achete une pièce d'inventaire, ou qu'on se fait tuer */
void removeGold(int combien);
protected:
/* je préfère avoir des fonctions protégées que des membres protégés ou, pire que tout, des mutateurs...
* cela permet de n'avoir qu'un code à modifier si on décide de
* modifier le fonctionnement ;)
*/
void addXp(int xp);
/* le comportement lors d'un gain de niveau dépend du type
* réel du personnage
*/
virtual void gainLevel() = 0;
/* une fonction protégée par stat qui peut augmenter
* en gagnant un niveau ;)
*/
void addStrenght(int toadd){strenghtMax_+=toadd;}
void addManaMax(int toadd){manaMax_ += toadd;}
void addLiveMax(int toadd){liveMax_ += toadd;}
void increaseLevel(){++level_;}
void increaseNextLevelAt(){nextLevelAt_ *=1.5;}
void statToMaximum();
private:
int level_;
int gold_;
int strenght_;
int mana_; // nombre de points de mana disponible
int live_; // nombre de points de vie disponible
int maxMana_; // maximum de points de mana
int maxLive_; // maximum de point de vie
int experience_; // l'expérience actuelle
int nextLevelAt_; // expérience requise pour le prochain niveau
/* tous les autres */
Inventaire inventory_;
/* Si pas C++11, ou si pas de support des fonctions "deleted"
* on déclare le constructeur par copie et l'opérateur d'affectation
* dans l'accessibilité privée SANS LES DEFINIR (permettant d'avoir,
* au mieux une erreur de compilation si on essaye d'utiliser la
* copie ou l'affectation, au pire, une erreur à l'édition de liens ;) )
*/
Personnage(Personnage const &);
Personnage & operator = (Personnage const &);
};
#endif //PERSONNAGE_HPP |