C++ 按生命对敌人进行分类
C++ Sort enemies by life
我在一本 c++ 书的帮助下编写的小游戏有问题。
因此,首先我有一个名为PlayerObject的类,以及一个存储了所有游戏对象的数组。当游戏开始时,我循环遍历数组中的所有对象。
while (true) {
for (auto i = 0; i < 100; i++) {
auto object = FuncObjectId(i);
if (PlayerObject.IsEnemy(object) &&
PlayerObject.Player.Position.Distance(object.Position) < 1000) {
// enemies found in range
FuncMoveTo(object)
}
}
}
但是,如果在给定范围内有几个敌人怎么办?如何订购?
例如,按生活或距离排序。以便我的玩家移动到最近的目标,或最低的生命值目标。
此外,整个事情必须以某种方式重置。玩家在杀死目标后不应停止,他应该自动去下一个生命值最低/位置最近的敌人。
首先将循环更改为
for (auto i = 0; i < FuncObjectId.size(); i++)
为什么只寻找100个敌人?
如果玩家应该一直移动,只是不要寻找比 1000 更近的敌人,但您必须按与玩家的距离对它们进行排序。为此,您应该使用 std::sorthttp://www.cplusplus.com/reference/algorithm/sort/您可以使用此功能按所需的参数对敌人进行排序。
对于你给出的问题,我假设你有一个相对较短的敌人列表,例如不到一千个。如果是这种情况,你真的不需要真正的排序,只需搜索最小的条目:
minimal health found = health of first enemy
corresponding index of enemy = index of first enemy
for all enemies:
if health enemy < minimal health found:
minimal health found = health enemy
corresponding index of enemy = index enemy
但是,如果由于某些原因您仍然需要对它们进行实际排序,最简单的方法是将它们存储在可排序的容器中(您可以编写一个,但只需使用 std::vector
或 std::list
)。在敌人类中定义一个定义"小于"关系(bool health_lower(const PlayerObject& a, const PlayerObject& b)
)的方法,然后将std::sort
与该方法一起使用作为比较器。
另一种方法是你编写一个存储敌人列表的类,每次创建一个敌人或一个敌人的生命值发生变化时,该类都会冒泡该特定敌人,因为其他敌人之间的顺序不会改变。
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 更改 C++ 中的组合分类变量
- 只有级联分类器会发出未定义的引用错误
- 分类还是划分枚举?
- 如何删除部分类?
- 使用 SVM 进行分类,使用来自 Bag of Word 的词汇构建
- 如何读取文件并将该文件分类为不同类型的数据,这些数据都存储在结构中的特定数组中
- 将svm分类器设置为HOG检测器
- 我正在使用快速 JSON 为C++回合制 RPG 解析对象敌人,并且遇到了一些奇怪的错误
- 使用类型特征的部分类专用化
- 将 CRTP 与部分类专用化结合使用?
- 为什么 C++17 标准没有带来部分类模板参数扣除?
- 神经网络和图像分类
- C++17 中的部分类模板参数推导
- 如何在这两个分类的链接列表之间获得开关的位置
- 向有射程的敌人发射子弹
- QTREEWIDGET子分类,停止下降指示器显示给定有不必要的DropIndicatorPosition
- 链接的列表字符串分类问题
- 在C /OBJ-C 中运行Tensorflow分类器模型与Python的结果不同
- C++ 按生命对敌人进行分类