【问题标题】:Tracking item and monster positions追踪物品和怪物位置
【发布时间】:2014-07-03 09:05:02
【问题描述】:

我一直在研究 libtcod/C++ roguelike,但遇到了一个小问题。

当玩家在楼层之间移动时,上一层的物品会留在新地图上,最终会出现在墙壁上,每次我在楼层之间移动时,都会生成更多物品,直到地图被淹没。

有什么方法可以保存特定楼层(可能使用种子),以便保留演员当前的 x/y 以供以后重新加载?

【问题讨论】:

  • 您如何存储地图及其内容?
  • 现在只是根据PRNG放置物品,然后在玩家下关时将其删除。我尝试将它们存储在我的地图->保存(保留地图的 FOV)中,但我遇到了十几个无法修复的错误。

标签: c++ actor reloading libtcod


【解决方案1】:

创建一个Map 类来存储地图详细信息(墙壁、楼梯等)、地板上的物品和任何怪物。然后你可以创建一个std::map<int, Map>,键是楼层号。

然后,每当您更改楼层时,您都会检查std::map 以查看该楼层的Map 对象是否存在,如果确实加载它,则创建一个新的Map

【讨论】:

  • 因为我已经有一个 Tile 结构体,它使用 bool 来存储地图上的哪些图块已被探索,我可以添加一个 withActors bool 来检查哪些图块上有演员吗?
  • 你可以,但我真的不明白你为什么要将它存储在 Tile 结构中。
  • 嗯,生成地图的 BSP 函数通过创建地图,然后检查 isExplored 是否为真来实现;我想我可以对演员做同样的事情(构建地图,然后检查是否有演员改变了位置)。
  • 我仍然不明白您这样做的目的是什么。为什么一个图块需要知道它上面是否有演员?
  • 每个图块都有一个“已探索”标志和一个“阻挡视线”图块。通过检查一个图块上是否有演员站在上面,我可以告诉地图生成器是加载新演员还是只是重新放置现有演员....(我可能还差得很远...) :)
猜你喜欢
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多