Petite passe pour virer la perte de mémoire :-)
On est passé de :
Citation:
==7632== HEAP SUMMARY:
==7632== in use at exit: 1,779,185 bytes in 21,273 blocks
==7632== total heap usage: 170,757 allocs, 149,484 frees, 92,409,946 bytes allocated
à :
Citation:
==7484== HEAP SUMMARY:
==7484== in use at exit: 1,260,622 bytes in 2,382 blocks
==7484== total heap usage: 101,041 allocs, 98,659 frees, 86,652,923 bytes allocated
Ensuite, j'ai ajouté l'information du joueur à l'affichage si on veut, j'ajouterai bientôt un groupe de deux personnages et j'ajouterai cette fonctionalité.
On a aussi un gestionnaire d'armes, qui fonctionne comme un singleton. Partout dans le programme, on pourra accéder à une arme utilisant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
class Weapon_Factory
{
public:
static const Weapon *getWeapon (std::string name);
static void loadWeapons (std::string);
static void loadWeapons (LineParser &lp);
protected:
Weapon_Factory(void); // Protected constructor
~Weapon_Factory(void);
Weapon_Factory(const Weapon_Factory&); // Prevent copy-construction
Weapon_Factory& operator=(const Weapon_Factory&); // Prevent assignment
static Weapon_Factory* getInst (void);
//Hashmap
std::map<std::string, Weapon*> weapons;
static Weapon_Factory *ourInst;
}; |
Donc par exemple, un joueur a un fichier de configuration donné par :
Citation:
#File for one character
#Name of character
Zeroc
#Sprite of character
data/fighter.txt
#Attributes: STRENGH, DEXTERITY, INTELLIGENCE, WISDOM, LUCK, CHARISMA, CONSTITUTION
15
16
12
11
9
15
13
#Attributes modifiers: STRENGH, DEXTERITY, INTELLIGENCE, WISDOM, LUCK, CHARISMA, CONSTITUTION
0
0
0
0
0
0
0
#hit points and max
200
200
#mana and max
50
50
#weapon
Sword
Pour l'arme, il suffit de faire ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
//Get weapon name or empty if none
std::string weapon_name = lp.getNextLine ();
if (weapon_name.compare ("empty") == 0)
{
weapon = NULL;
}
else
{
const Weapon *w = Weapon_Factory::getWeapon (weapon_name);
weapon = w;
} |
et bam ! on a une arme !
L'avantage ? Tout est centralisé en un seul fichier de configuration, on peut utiliser du texte ou un identifiant pour l'arme. Pour l'instant, une arme est définie par un dommage intermédiaire qui pourra se modifier dépendant de la force du joueur.
Je n'ai pas encore la classe des persos (Guerrier, etc.). Ce sera pour plus tard. Pour le moment, je travaille d'abord sur l'interface et la gestion du groupe.
Je vais attaquer, l'affichage de chaque perso du groupe, l'affichage de l'or, de la nourriture, des objets du groupe, comment équiper les armes/armures.
Une fois cette gestion de base en place, j'attaquerai le fait que certaines classes ne peuvent pas équiper certaines choses :-)
Ensuite, on pourra attaquer les magasins et l'achat/vente des objets !
Jc