D&D 游戏的类、命名空间和继承帮助
Classes, namespaces and inheritance help for D&D game
所以对于课程,我们必须制作一个d&&d 3.5游戏,对于第一个任务,我必须生成一个战士角色。我在脑海中建立层次结构的方式是character.cpp,它的子类是classname.cpp,其中它具有特定于类的一些属性,因为所有类共享相同的基本内容。
这是一个好的结构吗?如果是相关的,我们还没有做STL。
出现的另一个问题是,由于我的队友将为游戏制作GUI,他可能也会制作一个名为"角色"的职业。为了解决这个问题,我想创建一个名称空间。但如果我让我制作的每个文件在各自的头文件名称空间d20中都有它们的类,那么所有这些名称空间会是相同的吗?我想不出一个很好的方式来表达这个问题。
这是我最好的回答。
一个好的继承结构是非常特定于上下文的,但基本原则是基类包含与所有派生类相关的数据和函数。派生类将包含自身的特定数据和函数。在你的情况下,在基类"角色"中会有很多数据,比如所有的角色属性和基于属性计算结果的函数(我假设游戏规则通常是独立于类别的)。
我还假设当你说"classname.cpp"时,你的意思是"fighter.cpp"、"clergy .cpp"等等。在这种情况下,是的,我同意这样做。
STL对类层次结构的产生并没有直接的影响,所以我会说不,它没有关系。
至于名称空间,无论何时指定一个名称空间,它都将与指定完全相同的名称的其他任何地方相同(我认为这是您要问的)。您不需要做任何特殊的事情来使其具有相同的名称空间,只需将其命名为完全相同的名称空间即可。一个简单的例子如下:
character.h
namespace d20
{
class Character
{
Character();
~Character();
//etc...
}
}
character.cpp
#include "character.h"
namespace d20
{
Character::Character()
{
// Stuff...
}
Character::~Character()
{
}
}
fighter.h
#include "character.h"
namespace d20
{
class Fighter : public Character
{
Fighter ();
~Fighter ();
//etc...
}
}
OR(不包含命名空间关键字)
#include "character.h"
class Fighter : public d20::Character
{
Fighter ();
~Fighter ();
//etc...
}
编辑:请注意,在第二种情况下,战斗机类不是名称空间d20,它只是派生自该名称空间中的一个类。
对于您的情况,我建议使用而不是继承,因为继承通常有两种使用方式:总是使用基类,从不向上转换,或者使用继承。第一个不是你想要的,第二个可能有点棘手。从长远来看,一个非常通用的character
类会让你走得更远。
namespace d20 {
enum classtype {warrior_class, cleric_class, rogue_class, mage_class};
class character {
classtype charclass;
int hp;
int bab;
int str;
string get_name();
void hit(character* enemy);
};
}
另一方面,如果这只是一个家庭作业,并且您希望保持事情的超级简单,那么使用虚函数继承可能会使简单的程序更容易。
namespace d20 {
class character {
int hp;
int bab;
int str;
virtual string get_name() = 0;
virtual void hit(character* enemy) const;
};
}
namespace d20 {
class fighter {
string get_name() {return "Fighter";}
void hit(character* enemy);
}
}
对我来说这听起来是个合理的方法。可能classname.cpp
s最好被命名为cleric.cpp
, barbarian.cpp
等。
你可以让你的基类有一个受保护的函数,比如'rollstats'来返回一个包含stats的字符串。然后,子类可以使用调用基类方法的公共rollstats
函数覆盖它,然后附加额外的统计信息。
如果你的同学正在创建GUI,他应该使用你的类,不是吗?在这种情况下,他应该只导入您的。h/.cpp文件,而不必担心名称空间。
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 需要帮助设置在C++中使用的Potrace
- 头文件-继承c++
- 在指针的帮助下,文本文件中单词的频率
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 需要一些帮助了解私人 /保护 /公共继承
- 需要一些帮助来理解类继承(C++)
- 在使用类继承时需要帮助C++
- C 帮助类继承
- 需要对多个类之间继承的C 代码进行帮助重组和/或重新编写此C 代码
- 请帮助在继承 #constructor_error 上调试此 c++ 代码
- 虚拟公共继承?需要帮助理解代码
- D&D 游戏的类、命名空间和继承帮助