我应该在简单的策略游戏中为各个派系使用类吗 - C++
Should I use classes for individual factions in simple strategy game - C++
我决定挑战自己,在C++中创建一个简单的风险型策略游戏。游戏将有多个派系使用各种类型的部队/单位争夺领土控制权。
我只是在游戏的基本大纲中,但我有一个基本的想法是为每个派系创建一个类:
class Windows {
private:
bool isWindows = true;
// Characteristics etc.
};
class Mac {
private:
bool isMac = true;
// Characteristics etc.
};
class Linux {
private:
bool isLinux = true;
// Characteristics etc.
};
之后,单位的各个类别将继承其所属派系的某些特征,例如:class Penguin: private Linux {//Code};
这是最好的方法,还是有更好的方法减少课程?
如果派系有相似之处,请使用基类,他们为每个派系和派系类制作单独的子类作为单位的基类。
听起来不同的派系对同一组特征有不同的设置,这表明您应该有一个Faction
类并具有不同的Faction
实例。
我假设你只需要每个派系的一个实例。它们可以是一种单例。在 c++ 中执行单例的惯用方法是使用返回对局部静态变量的引用的函数:
class Faction {
// Characteristics etc.
};
const Faction& windows() {
static Faction f{ /* initialize with windows characteristics */ };
return f;
}
const Faction& mac() {
static Faction f{ /* initialize with mac characteristics */ };
return f;
}
const Faction& linux() {
static Faction f{ /* initialize with linux characteristics */ };
return f;
}
那么像Penguin
这样的类,而不是从Faction
继承的,可以使用Faction
的linux实例。例如,它可以保留对其派系的引用:
class Penguin {
const Faction& faction = linux();
public:
void someAction() {
// use faction reference
}
};
我建议你尽量避免像"isLinux"这样的检查,因为它会使代码变得脆弱,而是依赖于派系对象本身的特征。如果您引入新派系,必须更改的代码越少越好。如果您确实需要检测派系的类型,那么因为派系实例是单例的,您可以比较地址:
bool isWindows(const Faction& f) { return &f == &windows(); }
bool isLinux(const Faction& f) { return &f == &linux(); }
bool isMac(const Faction& f) { return &f == &mac(); }
如果这样做,最好防止复制Faction
对象,以便您可以依赖它位于正确的地址:
class Faction {
// ...
// uncopyable
Faction(const Faction&) = delete;
Faction& operator=(const Faction&) = delete;
};
现场演示。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法