【发布时间】:2022-11-23 20:02:28
【问题描述】:
对于上下文,我正在用 C++ 重新创建一个口袋妖怪游戏(我是 C++ 的新手,我只有 1 年的编程经验,而且我是用 C 编程的)。但是我对代码的组织有疑问。
这是我的问题:我不知道在课堂上放什么,在结构中放什么。
例如,在我当前的代码中,我的Pokemon 和我的Attaque 是两个不同的类。我这样做是因为我希望其中的 2 个在文件中使用信息进行初始化。但是如果 Pokemon 正在战斗,他们需要访问 Attaque。但是在生成我的Pokemon 时,一些统计数据会在受到项目影响时发生变化。像闪亮的 % 受到影响闪亮魅力.所以我也需要访问我的包。
这里的问题是我正在上很多课friend(现在Attaque是Pokemon的朋友,Pokemon是bag的朋友)。我读到这可能是组织代码问题。
我考虑过为闪亮魅力,但不知道好不好用。
这是我的Pokemon课程。 nature_e、status_e 和type_e 是枚举类。
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 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);
};
【问题讨论】:
-
我更喜欢吸气剂而不是友谊。我个人认为花哨的对象设计被高估了。只写吸气剂。我个人再次发现,当我有一些工作代码时,我可以更清楚地考虑设计。当我有一些工作时,我会想“我可以重构它并改进设计吗?”。在这方面一切都是个人意见,你必须找到自己的方式。
-
一个好的开始是SOLID。一组五个设计原则,从未让我失望。
-
我不确定这个问题属于这个网站。也许 Code Review 会更合适。
标签: c++ class game-development code-organization