ace4016
February 3rd, 2005, 02:19 AM
Hi, i have created a base class to create 4 similar classes, and since i am new to class design when is comes to stuff like polymorphism and inheritance. Can you guys give me pointers to make this class better and/or more friendly for storing the data so the items can be read back at a later time during game play?
here's the header file containing the class:
#ifndef ITEMS_H
#define ITEMS_H
enum ITEM_TYPE{
ITEM_DEFAULT,
WEAPON_SWORD,
WEAPON_SWORD_SHIELD,
WEAPON_LONG_SWORD,
WEAPON_DBL_SWORD,
WEAPON_AXE,
WEAPON_AXE_SHIELD,
WEAPON_DBL_AXE,
WEAPON_HAMMER,
WEAPON_HAMMMER_SHIELD,
WEAPON_SHORT_BALDE,
WEAPON_DBL_SHORT_BLADE,
WEAPON_BOW,
WEAPON_CROSSBOW,
ARMOR_HEAD,
ARMOR_TORSO,
ARMOR_ARMS,
ARMOR_HANDS,
ARMOR_LEGS,
ARMOR_BOOTS,
EMBLEM_EARTH,
EMBLEM_FIRE,
EMBLEM_WATER,
EMBLEM_WIND,
EMBLEM_DARK,
EMBLEM_LIGHT,
EMBLEM_THUNDER,
POWERUP_HP_UP,
POWERUP_ATT_UP,
POWERUP_DEF_UP,
POWERUP_SPC_UP,
POWERUP_SPD_UP,
POWERUP_ACC_UP,
POWERUP_RAGE,
POWERUP_FOCUS,
POWERUP_ADRENIL
};
enum EFFECT_TYPE{
EFFECT_NONE,
EFFECT_RAGE,
EFFECT_COUNTER,
EFFECT_DBL_STRIKE,
EFFECT_POISON,
EFFECT_SUICIDE,
EFFECT_HYPER
};
class Items{
public:
virtual void setCost(int cost) = 0;
virtual void setLevel(int lev) = 0;
virtual void setStats(int att, int def, int spec, int spd, int acc) = 0;
virtual void setType(ITEM_TYPE typ) = 0;
virtual void setName(char* nam) = 0;
virtual void setEffect(EFFECT_TYPE eff) = 0;
virtual int getCost() = 0;
virtual void getStats(int statarray[5]) = 0;
virtual int getLevel() = 0;
virtual ITEM_TYPE getType() = 0;
virtual char* getName() = 0;
virtual EFFECT_TYPE getEffect() = 0;
};
class Weapon : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Weapon() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Weapon() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setName(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff)
{
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class Armor : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Armor() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Armor() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class Emblem : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Emblem() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Emblem() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class PowerUp : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
PowerUp() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~PowerUp() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
#endif // ITEMS_H
also, do you know any good file i/o tutorials or methods i can use to format a text file easily, especially when reading a file containing large amounts of data?
here's the header file containing the class:
#ifndef ITEMS_H
#define ITEMS_H
enum ITEM_TYPE{
ITEM_DEFAULT,
WEAPON_SWORD,
WEAPON_SWORD_SHIELD,
WEAPON_LONG_SWORD,
WEAPON_DBL_SWORD,
WEAPON_AXE,
WEAPON_AXE_SHIELD,
WEAPON_DBL_AXE,
WEAPON_HAMMER,
WEAPON_HAMMMER_SHIELD,
WEAPON_SHORT_BALDE,
WEAPON_DBL_SHORT_BLADE,
WEAPON_BOW,
WEAPON_CROSSBOW,
ARMOR_HEAD,
ARMOR_TORSO,
ARMOR_ARMS,
ARMOR_HANDS,
ARMOR_LEGS,
ARMOR_BOOTS,
EMBLEM_EARTH,
EMBLEM_FIRE,
EMBLEM_WATER,
EMBLEM_WIND,
EMBLEM_DARK,
EMBLEM_LIGHT,
EMBLEM_THUNDER,
POWERUP_HP_UP,
POWERUP_ATT_UP,
POWERUP_DEF_UP,
POWERUP_SPC_UP,
POWERUP_SPD_UP,
POWERUP_ACC_UP,
POWERUP_RAGE,
POWERUP_FOCUS,
POWERUP_ADRENIL
};
enum EFFECT_TYPE{
EFFECT_NONE,
EFFECT_RAGE,
EFFECT_COUNTER,
EFFECT_DBL_STRIKE,
EFFECT_POISON,
EFFECT_SUICIDE,
EFFECT_HYPER
};
class Items{
public:
virtual void setCost(int cost) = 0;
virtual void setLevel(int lev) = 0;
virtual void setStats(int att, int def, int spec, int spd, int acc) = 0;
virtual void setType(ITEM_TYPE typ) = 0;
virtual void setName(char* nam) = 0;
virtual void setEffect(EFFECT_TYPE eff) = 0;
virtual int getCost() = 0;
virtual void getStats(int statarray[5]) = 0;
virtual int getLevel() = 0;
virtual ITEM_TYPE getType() = 0;
virtual char* getName() = 0;
virtual EFFECT_TYPE getEffect() = 0;
};
class Weapon : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Weapon() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Weapon() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setName(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff)
{
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class Armor : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Armor() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Armor() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class Emblem : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
Emblem() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~Emblem() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
class PowerUp : public Items{
int price;
int level;
int attack;
int defense;
int special;
int speed;
int accuracy;
ITEM_TYPE type;
char* name;
EFFECT_TYPE effect;
public:
PowerUp() : price(0), level(0), attack(0), defense(0), special(0),
speed(0), accuracy(0), type(ITEM_DEFAULT), name(NULL), effect(EFFECT_NONE) {}
~PowerUp() {}
void setCost(int cost){
price = cost;
}
void setLevel(int lev){
level = lev;
}
void setStats(int att, int def, int spec, int spd, int acc){
attack = att;
defense = def;
special = spec;
speed = spd;
accuracy = acc;
}
void setType(ITEM_TYPE typ){
type = typ;
}
void setChar(char* nam){
name = nam;
}
void setEffect(EFFECT_TYPE eff){
effect = eff;
}
int getCost(){
return price;
}
void getStats(int statarray[5]){
statarray[0] = attack;
statarray[1]= defense;
statarray[2] = special;
statarray[3] = speed;
statarray[4] = accuracy;
}
int getLevel(){
return level;
}
ITEM_TYPE getType(){
return type;
}
char* getName(){
return name;
}
EFFECT_TYPE getEffect(){
return effect;
}
};
#endif // ITEMS_H
also, do you know any good file i/o tutorials or methods i can use to format a text file easily, especially when reading a file containing large amounts of data?