I am recreating a Pokemon game in C++ but have issue with organisation of code. I don t know what to put in class and what to put in struct.
In my code Pokemon
and Attaque
are 2 different classes because I want them initialized with info in a file. But if Pokemon are fighting they need to access Attaque
. But when generating Pokemon some stats change when affected by an item (like shiny percentage is affected by "Shiny Charm"). So I need to have access to my bag too.
I am making a lot of classes friends (Attaque
is friend of Pokemon
and Pokemon
is friend of bag
). I read it s an code organisation issue. I thought about making getters for example for the "Shiny Charm" but don t know if it s good.
Pokemon
class (nature_e
, status_e
and type_e
are enum class):
class Pokemon {
private:
bool m_is_shiny { false };
bool m_is_pokerus { false };
short m_level { 0 };
int m_id { 0 };
int m_exp { 0 };
std::array<int, 2> m_texture_coord { 0, 0 };
std::array<unsigned char, 6> m_iv {0, 0, 0, 0, 0, 0};
std::array<unsigned char, 6> m_ev {0, 0, 0, 0, 0, 0};
std::array<unsigned char, 6> m_base_stat {0, 0, 0, 0, 0, 0};
std::array<unsigned char, 8> m_stat {0, 0, 0, 0, 0, 0, 0, 0};
nature_e m_nature {nature_e::NONE};
status_e m_status {status_e::NONE};
std::array<type_e, 2> m_type {type_e::NONE, type_e:: NONE};
Texture2D m_texture;
std::string m_name { "Non" };
std::string m_item { "non" };
std::string m_sprite_path { "None" };
std::array<Attaque, 4> m_atk { Attaque(), Attaque(), Attaque(), Attaque() };
public:
Pokemon()
{
}
Pokemon(int id, short level);
};
Attaque
class:
class Attaque {
private:
bool m_phy_or_spe;
int m_damage;
type_e m_type;
double m_effect_precision;
double m_precision;
std::string m_name;
public:
Attaque()
{
}
Attaque(int id);
};