我应该把这个方法放在哪个类中?c++

Which class should I place this method in? C++

本文关键字:c++ 方法 我应该      更新时间:2023-10-16

我正在制作一款基于《Nethack》的Rogue类游戏。我需要决定最好的类来放置导航地牢的方法。现在我实现移动的方式是通过简单地要求Player输入字符。(使用W,A,S,D作为箭头)。我设置了一个while循环,直到触发字符结束程序。在这个循环中,它从打印地下城的状态开始。要求输入字符,然后用if语句检查输入了哪个字符。在这些if语句中,它将调用一个相对于想要移动的输入/方向的方法。所以我有:moveUp(), moveight()等等。我只需要弄清楚哪个类最适合放置这些方法,这将决定如何调用这些方法,传递什么,等等。

我将以粗体列出这些类,并用缩进表示继承。以下是我所涉及的类:

  • Entity:基类。它本质上代表任何/所有的对象
    • Creature:基本上代表一个活的"东西"在地下城
      • 玩家:基本上是一个扩展的生物…这是谁在玩的类。
    • Item:作为任何被认为是Item的基类
      • Weapon: A Weapon .
      • Armor: A piece Armor .
      • Consumable:一个可以被消耗的物品。有其他几个类

我也有一些独立的类:

  • Tile:"gameboard"上的一个空间。它保存了一个指向生物的ptr,指向物品的矢量指针,以及一个显示该空格所代表内容的字符。
  • DungeonLevel:这是单个关卡的游戏板/网格。它有一个2D向量Tile对象。

我已经有地牢生成正确和不。对于每个DungeonLevel对象,所有Tiles将停留在相同的位置。所以当PlayerCreature移动(1个点)时,程序将调用这些方法来操纵DungeonLevel对象(Tile的的2D向量),以通过将玩家/生物从一个Tile传递到另一个Tile来反映他们移动到的位置。然后程序重新开始循环。

我不确定把这些方法放在哪个类中。我需要生物和玩家能够移动。玩家根据字符输入移动。在游戏中生成的生物/怪物将向玩家移动1个空间(如果可能的话)。

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

建议吗?谢谢。

因为你做的是2d游戏。我假设你正在使用opengl。或举。

用于移动地下城的贴图。我建议你不要移动它们。但是移动"相机"有很多关于opengl和directx如何渲染的书。这样你只需要做。检查哪些贴图在屏幕上或不在屏幕上,只绘制屏幕上的那些。

来决定谁应该控制什么。玩家控制自己的移动是合乎逻辑的。但是具有允许外部类移动他的函数。不要让别人直接接触他的隐私,因为他们不是朋友;)

现在为您的类应该如何布局。很难明确地回答这个问题。而是从所呈现的。

这样看,玩家、生物和物品都继承自实体。它们都需要有什么共同点?他们都需要一个职位。函数能够获得和设置它们的位置。他们的旋转。也许可以用名字来识别他们。还有一个更新函数来处理发生在它们身上的任何操作?这就是虚函数派上用场的地方。

因为你可以有virtual void Update(int a_iDeltaTime);在基类中。所有从它继承的东西都有自己的更新类型。即玩家检查按键。而敌人只能更新他们的旋转和移动。

编辑:这样你就可以存储所有敌人的玩家道具。当你调用update时,因为它是虚拟的。它将根据它的实际类型调用适当的更新。这意味着你只需要一个列表来存储游戏中的所有实体类型。结束。

这样你就把它们之间共享的所有东西都放在基类中。并且只把唯一的东西放在主类中。

我所说的一切都只是建议,因为您的实现应该最适合您所面临的确切问题。唯一能让你更好地了解在什么地方使用什么实现的方法是通过实践,正如前面提到的,你应该学习更多关于设计模式的知识,因为它会打开你的思维,让你有更多的编码方式。并允许您编写更容易阅读的代码。