【发布时间】:2013-12-30 09:30:48
【问题描述】:
我正在构建稍后将用于 RPG 的小型组件,但是我在这种规模的项目中的经验非常有限,这就是为什么我选择独立构建它们的原因。这部分将介绍角色的创建和处理。
所以我有以下存储 Gender 的类指针的向量。我知道只有四种性别,Unknown(用于错误捕获)、Male、Female 和 Neuter。
std::vector<Gender*> mGenders;
但是对于其他一些向量,我不知道确切的数量。
std::vector<BClass*> mBClasses;
我有一个拥有 mGenderID 和 mBClassID 的生物。我有一个初始化所有性别和基类(以及许多其他类)的 game.h。假设我有一个
Creature* mPC = new Creature ("Name", GenderID, BClassID);
然后我应该有一个
Gender* Game::getGenderByID(int id) {
for (std::vector<Gender*>::iterator it = mGenders.begin(); it != mGenders.end(); ++i) {
if ((*it)->getID() == id) return (*it)
}
}
并按如下方式使用
std::cout << "Your name is " << mPC->getName() << ". Your gender is " << getCreatureByID(mPC->getGenderID())->getName();
所以我的问题是,这是构建代码的好方法吗?想象一个无限引擎的游戏,博德之门左右。最好它应该适用于大多数人,即使我要做一个天际或类似 GTA 的游戏。
最后,移植到 C# 有多容易?由于我对 C++ 的了解比 C# 好,所以我想我应该先在 C++ 中尝试一下,以确保结构正确并使用可用于大型项目的东西。
编辑: 将 Gender* 直接存储在 Creature 类中会更好吗?并且没有该生物的 ID?
编辑2:
class Gender {
public:
Gender::Gender(int id, std::string name, std::string desc, int coeBonus, int strBonus, int agiBonus, int attBonus, int intBonus, int chaBonus);
~Gender();
int getID () const;
std::string getName () const;
std::string getDesc () const;
int getStrBonus () const;
int getAgiBonus () const;
int getAttBonus () const;
int getIntBonus () const;
int getChaBonus () const;
int getCoeBonus () const;
private:
int mID;
std::string mName;
std::string mDesc;
int mStrBonus;
int mAgiBonus;
int mAttBonus;
int mIntBonus;
int mChaBonus;
int mCoeBonus;
};
gender.h的定义
提前致谢
【问题讨论】:
-
您在哪里创建性别?如果性别是强制性的,那么存储指向它们的指针是安全的。如果你使用 C++11,你可以考虑内存类。根据您的
Gender结构,您可以考虑使用枚举或枚举类。 -
现在,我在 game.h 中创建性别,如果我有 int initGenders();它对所有性别执行 push_back()。我会为 BClasses 和比赛(等)做同样的事情。正如我在下面回答的那样,当 Genders 不仅仅拥有一个名字时,枚举并没有真正的用处。
标签: c# c++ code-structure