我应该在哪个课程中放置此方法? C ++

时间:2013-04-14 01:40:27

标签: c++ class object inheritance implementation

我正在制作一款基于Nethack的Rogue Like游戏。我需要决定最好的类来放置在地牢中导航的方法。现在,我正在实施移动的方式是简单地向播放器询问字符输入。 (使用W,A,S,D作为箭头)。我有一段时间设置,所以它循环直到触发器char结束程序..在这个循环中,它开始打印地牢的状态。要求输入char,然后输入if语句以检查输入的字符。在每个if语句中,它将调用相对于想要移动的输入/方向的方法。所以我将拥有:moveUp(),moveRight()等等。我只需要确定哪个类最适合放入这些方法,这将决定如何调用方法,传递什么,以及等等。

我将以粗体列出类,并用缩进表示继承。以下是我的课程:

  • 实体:基类。它基本上代表任何/所有对象
    • 生物:基本上代表地牢中活生生的“东西”
      • 玩家:基本上是一个扩展的生物......这是谁在玩的类。
    • 项目:作为被视为项目的任何内容的基类
      • 武器:武器..
      • 护甲:一件盔甲..
      • 消耗品:可以消费的物品..还有其他几个类

我也有一些独立课程:

  • 平铺:“游戏板”上的空格。它拥有一个ptr到Creature,指向Items的向量,以及一个显示该空间代表的字符。
  • DungeonLevel :这是单个级别的游戏板/网格。它有一个 Tile 对象的2D矢量。

我已经正确地生成了地牢,什么不是。对于每个 DungeonLevel 对象,所有 Tiles 将保留在同一位置。因此,当玩家生物移动(1点)时,程序将调用这些方法来操纵 DungeonLevel 对象(的2D矢量> Tile's )通过将玩家/生物从Tile传递到Tile来反映玩家/生物移动到的位置。然后程序重新启动循环。

我不确定将这些方法放在哪个类中。我基本上需要生物和玩家能够移动。并且播放器基于char输入移动。游戏中生成的生物/怪物将向玩家移动1个空间(如果可能)。

所以我不确定是否应该使用相同的方法来控制任何实体,或者 DungeonLevel 应该控制移动,还是生成基类和派生的,玩家,类应该有相同的移动方法,或者如果Creature应该有自己的,而玩家应该拥有自己的。

连连呢?感谢。

1 个答案:

答案 0 :(得分:1)

因为你正在进行2D游戏。我假设你正在使用opengl。或者directx。

用于移动地牢的瓷砖。我建议你不要移动它们。但是相反,移动“相机”有很多关于opengl和directx的书籍,用于rending如何工作。这就是你需要做的一切。检查屏幕上是否有哪些瓷砖,只在屏幕上绘制。

至于决定谁应该控制什么。玩家控制他自己的移动是合乎逻辑的。但有功能允许外部类移动他。不允许直接进入他的私人,因为他们不是朋友;)。

现在应该如何布置课程。很难明确地回答这个问题。但是从呈现的内容。

像这样看,玩家和生物以及物品都从实体继承。他们都需要有什么共同点?他们都需要一个职位。功能是能够获得和设置他们的位置。他们的轮换。也许是一个识别他们的名字。还有一个更新函数来处理它们发生的任何动作?这是虚拟功能派上用场的地方。

因为你可以拥有virtual void Update(int a_iDeltaTime); 在你的基类。从它继承的每一个签名都有自己的更新类型。球员检查按键。而敌人只更新他们的轮换和移动。

编辑:那样你就可以存储所有敌人的玩家物品。作为实体*和当你调用更新因为它的虚拟。它会根据它的实际类型调用适当的更新。这意味着您只需要一个列表来存储游戏中的每种类型的实体。结束。

通过这种方式,您可以在基类中共享它们之间共享的所有内容。并且只将独特的东西放在主要的课程中。

我所说的一切都只是建议,因为你的实施应该是最适合你所面临的确切问题的。并且你唯一能够更好地了解实践中使用的实现方法,并且正如所提到的那样,你应该明确地了解更多有关设计模式的知识,因为它会让你开始思考如何编写代码。并允许您编写更简单易读的代码。希望这有帮助。