【发布时间】:2013-05-17 11:37:14
【问题描述】:
我在为我的数据选择最相关的结构时遇到了麻烦,以下是解释:
我实际上正在为学校开发一个游戏项目,一个类似炸弹人的 C++ 游戏。 我正在设计包含炸弹、盒子、玩家和墙壁的地图对象。 地图是二维的,我已经有 2 个容器类型:
std::unordered_map<int, std::unordered_map<int, AEntity*> > *UMap;
一个包含墙壁,另一个包含可破坏的物体(炸弹、盒子)。 我已经在这里讨论过这个选择 -> Choice of unsorted_map。 这主要是为了快速访问时间,因为每个地图的盒子只能有一个元素。
现在正如标题所暗示的那样,我在为我的玩家选择数据容器时遇到了麻烦,因为一个地图的盒子上可以有多个玩家,unordered_maps 不能使用。
在第一次我打算使用std::list<AEntity*> 排序与std::sorted,AEntity 包含实体信息(坐标),但在编码我的
playerOn(const int x, const int y);
function 我发现这是一个糟糕的选择。我无法使用二分法足够快地检索给定盒子上的玩家,如果这个盒子没有玩家,那就浪费时间了。
我应该如何存储我的 (AEntity)Players 以便能够快速检索它们
(最让人头疼的是,在大地图上,一次可以有超过 500 名玩家,这就是我在寻找优化的原因)
我的脑汁快用完了。感谢您未来的回答。
修改我的问题
这主要是因为我想知道是否有另一种解决方案可以通过我的整个 std::list 来查找 box(x, y) 上是否有人。看起来很慢而且没有优化,但我想不出另一种方法来做到这一点。 (如果需要,我可以更改容器类型)
【问题讨论】:
-
1) 在实现 25 年以上的游戏时,您无需担心性能问题。 2)
std::unordered_map<int, std::unordered_map<int, AEntity*> > *UMap;用于存放盒子和墙壁听起来很傻。 -
嗯,这是一个年终项目,所以我们会尽力而为,这也将使用我们学校 5 年前编写的 tardLib 以 3D 形式呈现......
-
那么,你的坐标范围是多少?对象是否对齐网格?
-
@Pubby 是的,地图大小将在初始化时定义,但是“捕捉”是什么意思? (不是英语母语对不起)
-
看起来像this?
标签: c++ algorithm c++11 containers std