Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该将此方法放在哪个类中?C++;_C++_Class_Object_Inheritance_Implementation - Fatal编程技术网

C++ 我应该将此方法放在哪个类中?C++;

C++ 我应该将此方法放在哪个类中?C++;,c++,class,object,inheritance,implementation,C++,Class,Object,Inheritance,Implementation,我正在制作一个基于Nethack的类似流氓的游戏。我需要决定放置在地牢中导航方法的最佳类。现在,我实现移动的方法是简单地向播放器请求字符输入。(使用W、A、S、D作为箭头)。我设置了一段时间,使其循环,直到触发字符结束程序。。在这个循环中,它首先打印地下城的状态。要求输入字符,然后是if语句以检查输入的字符。在每个if语句中,它将调用一个相对于要移动的输入/方向的方法。所以我有:moveUp(),moveRight(),等等。。我只需要找出哪个类最适合放入这些方法,它将决定如何调用这些方法,传递

我正在制作一个基于Nethack的类似流氓的游戏。我需要决定放置在地牢中导航方法的最佳类。现在,我实现移动的方法是简单地向播放器请求字符输入。(使用W、A、S、D作为箭头)。我设置了一段时间,使其循环,直到触发字符结束程序。。在这个循环中,它首先打印地下城的状态。要求输入字符,然后是if语句以检查输入的字符。在每个if语句中,它将调用一个相对于要移动的输入/方向的方法。所以我有:moveUp(),moveRight(),等等。。我只需要找出哪个类最适合放入这些方法,它将决定如何调用这些方法,传递什么,等等

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

  • 实体:基类。它本质上表示任何/所有对象
    • 生物:基本上代表地牢中的一个活物
      • 玩家:基本上是一种扩展生物。。这是为谁比赛而上的课
    • 项目:充当任何被视为项目的基类
      • 武器:武器
      • 盔甲:一件盔甲
      • 消耗品:可以消费的物品。。他还有几门课
我还有一些独立的课程:

  • 平铺:在“游戏板”上的一个空格。它包含一个指向生物的ptr、指向物品的指针向量和一个显示该空格所代表内容的字符
  • 地下城关卡:这是单关卡的游戏板/网格。它有一个二维向量平铺对象
我已经让地牢正常生成了,什么都没有。对于每个地下城级别的对象,所有平铺将保持在同一位置。因此,当一个玩家或生物移动(1点)时,程序将调用这些方法来操纵地下城级别的对象(地砖的2D向量),通过在地砖之间传递来反映玩家/生物移动到的位置。然后程序重新启动循环

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

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


建议?谢谢。

因为您正在玩2d游戏。我猜你正在使用opengl。或者directx

用来移动地牢的地砖。我建议你不要移动它们。但是,取而代之的是移动“相机”,opengl和directx有很多关于渲染工作原理的书籍。这样你就可以做了。检查屏幕上是否有瓷砖,只画屏幕上的瓷砖

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

现在来看看你们的课程应该如何安排。很难确定地回答这个问题。但是从呈现的内容来看

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

因为您可以进行
虚拟void更新(inta_ideltime)
在你的基础课上。从它继承的每个符号都有自己的更新类型。i、 电子播放器检查按键。而敌人只更新他们的旋转和移动

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

这样,您就可以将它们之间共享的所有内容都放在基类中。并且只把独特的东西放在主类中


我所说的一切只是建议,因为您的实现应该是最适合您所面临的确切问题的实现。唯一能让您更好地了解要在何处使用哪些实现的方法是通过实践,正如前面提到的,您应该明确地了解更多关于设计模式的知识,因为它将打开您的思路来编写代码。并允许您编写更简单易读的代码。希望这能有所帮助。

这不是对你问题的回答,但根据你所做的决定,如果你还没有一本关于设计模式的书,我强烈建议你买一本。我有设计模式:可重用面向对象软件的元素,并推荐它。这本书让我对设计类和类间交互的不同方式敞开了心扉。是的,这是个好主意。谢谢你的建议。有一个C++教程,用于使用LIbtood库编程RoGuiKe游戏,它有一个思想相当好的类HealCracy。C++教程是基于更完整的Python教程(我已经涉足其中)。Roguelikes是传统的基于文本的教程。