I’m making a very very basic game in C++ to gain some experience in the language and I have hit a bit of a brick wall in terms of progress.
My problem is, while I was designing a class for the player’s weapons, I realized I required a list, as I will only have a certain number of weapons throughout the game.
So I ask you, if you were designing this, what implementation would you use for storing all of the weapons in a game? Why?
Here is my code so far for the weapons. as you can see I was just about to start defining all of them manually, starting with the “DoubleBlades”… (Edit* I forgot to note that players should be able to have more than one wepaon, and they can pick up more or drop some, so the list can grow and shrink)
#ifndef __WEAPON_H__
#define __WEAPON_H__
#include <string>
class Item
{
public:
Item(const std::string& name)
: name(name){ }
const std::string& getName(void) const { return name; }
int getID(void) const { return this->itemID;}
private:
std::string name;
int itemID;
};
class Weapon
: public Item
{
private:
int damage;
public:
Weapon(const std::string& name)
: Item(name) { }
virtual int getDamage(void) const = 0;
};
class DoubleBlades
: public Weapon
{
public:
DoubleBlades(int ammo)
: Weapon("DoubleBlades") { }
virtual int getDamage(void) const { return 12; }
};
#endif
Also if you spot any bad habits I would really appreciate letting me know.
I would use the standard implementation (
std::list<Item*>) because it’s easy to use (“out of the box”) and, out of the standard containers, it seems to be most suitable:std::vectoror C arrays)std::map)BTW you need to have a virtual destructor in the
Itemclass (this is a general rule on base classes in c++).Oh, and another minor problem – i think the
Weaponclass does not need thedamagemember variable – the class doesn’t use it and it hasprivateaccess, so the deriving classes cannot use it either.You might have to use
dynamic_castin your implementation – a virtual environment such as yours will probably require “safe” casting of pointers fromItem*toWeapon*.