我正在制作一款基于Nethack的Rogue Like游戏。我需要决定最好的类来放置在地牢中导航的方法。现在,我正在实施移动的方式是简单地向播放器询问字符输入。 (使用W,A,S,D作为箭头)。我有一段时间设置,所以它循环直到触发器char结束程序..在这个循环中,它开始打印地牢的状态。要求输入char,然后输入if语句以检查输入的字符。在每个if语句中,它将调用相对于想要移动的输入/方向的方法。所以我将拥有:moveUp(),moveRight()等等。我只需要确定哪个类最适合放入这些方法,这将决定如何调用方法,传递什么,以及等等。
我将以粗体列出类,并用缩进表示继承。以下是我的课程:
我也有一些独立课程:
我已经正确地生成了地牢,什么不是。对于每个 DungeonLevel 对象,所有 Tiles 将保留在同一位置。因此,当玩家或生物移动(1点)时,程序将调用这些方法来操纵 DungeonLevel 对象(的2D矢量> Tile's )通过将玩家/生物从Tile传递到Tile来反映玩家/生物移动到的位置。然后程序重新启动循环。
我不确定将这些方法放在哪个类中。我基本上需要生物和玩家能够移动。并且播放器基于char输入移动。游戏中生成的生物/怪物将向玩家移动1个空间(如果可能)。
所以我不确定是否应该使用相同的方法来控制任何实体,或者 DungeonLevel 应该控制移动,还是生成基类和派生的,玩家,类应该有相同的移动方法,或者如果Creature应该有自己的,而玩家应该拥有自己的。
连连呢?感谢。
答案 0 :(得分:1)
因为你正在进行2D游戏。我假设你正在使用opengl。或者directx。
用于移动地牢的瓷砖。我建议你不要移动它们。但是相反,移动“相机”有很多关于opengl和directx的书籍,用于rending如何工作。这就是你需要做的一切。检查屏幕上是否有哪些瓷砖,只在屏幕上绘制。
至于决定谁应该控制什么。玩家控制他自己的移动是合乎逻辑的。但有功能允许外部类移动他。不允许直接进入他的私人,因为他们不是朋友;)。现在应该如何布置课程。很难明确地回答这个问题。但是从呈现的内容。
像这样看,玩家和生物以及物品都从实体继承。他们都需要有什么共同点?他们都需要一个职位。功能是能够获得和设置他们的位置。他们的轮换。也许是一个识别他们的名字。还有一个更新函数来处理它们发生的任何动作?这是虚拟功能派上用场的地方。
因为你可以拥有virtual void Update(int a_iDeltaTime);
在你的基类。从它继承的每一个签名都有自己的更新类型。球员检查按键。而敌人只更新他们的轮换和移动。
通过这种方式,您可以在基类中共享它们之间共享的所有内容。并且只将独特的东西放在主要的课程中。
我所说的一切都只是建议,因为你的实施应该是最适合你所面临的确切问题的。并且你唯一能够更好地了解实践中使用的实现方法,并且正如所提到的那样,你应该明确地了解更多有关设计模式的知识,因为它会让你开始思考如何编写代码。并允许您编写更简单易读的代码。希望这有帮助。