我应该把这个方法放在哪个类中?c++
Which class should I place this method in? C++
我正在制作一款基于《Nethack》的Rogue类游戏。我需要决定最好的类来放置导航地牢的方法。现在我实现移动的方式是通过简单地要求Player输入字符。(使用W,A,S,D作为箭头)。我设置了一个while循环,直到触发字符结束程序。在这个循环中,它从打印地下城的状态开始。要求输入字符,然后用if语句检查输入了哪个字符。在这些if语句中,它将调用一个相对于想要移动的输入/方向的方法。所以我有:moveUp(), moveight()等等。我只需要弄清楚哪个类最适合放置这些方法,这将决定如何调用这些方法,传递什么,等等。
我将以粗体列出这些类,并用缩进表示继承。以下是我所涉及的类:
-
Entity:基类。它本质上代表任何/所有的对象
- Creature:基本上代表一个活的"东西"在地下城
- 玩家:基本上是一个扩展的生物…这是谁在玩的类。
- Item:作为任何被认为是Item的基类
- Weapon: A Weapon .
- Armor: A piece Armor .
- Consumable:一个可以被消耗的物品。有其他几个类
- Creature:基本上代表一个活的"东西"在地下城
我也有一些独立的类:
- Tile:"gameboard"上的一个空间。它保存了一个指向生物的ptr,指向物品的矢量指针,以及一个显示该空格所代表内容的字符。
- DungeonLevel:这是单个关卡的游戏板/网格。它有一个2D向量Tile对象。
我已经有地牢生成正确和不。对于每个DungeonLevel对象,所有Tiles将停留在相同的位置。所以当Player或Creature移动(1个点)时,程序将调用这些方法来操纵DungeonLevel对象(Tile的的2D向量),以通过将玩家/生物从一个Tile传递到另一个Tile来反映他们移动到的位置。然后程序重新开始循环。
我不确定把这些方法放在哪个类中。我需要生物和玩家能够移动。玩家根据字符输入移动。在游戏中生成的生物/怪物将向玩家移动1个空间(如果可能的话)。
所以我不确定我是否应该使用相同的方法来控制任何实体或者如果DungeonLevel应该控制移动,或者生物基类和派生类,玩家类应该有相同的移动方法,或者如果生物应该有自己的和玩家应该有自己的。
建议吗?谢谢。
因为你做的是2d游戏。我假设你正在使用opengl。或举。
用于移动地下城的贴图。我建议你不要移动它们。但是移动"相机"有很多关于opengl和directx如何渲染的书。这样你只需要做。检查哪些贴图在屏幕上或不在屏幕上,只绘制屏幕上的那些。
来决定谁应该控制什么。玩家控制自己的移动是合乎逻辑的。但是具有允许外部类移动他的函数。不要让别人直接接触他的隐私,因为他们不是朋友;)
现在为您的类应该如何布局。很难明确地回答这个问题。而是从所呈现的。
这样看,玩家、生物和物品都继承自实体。它们都需要有什么共同点?他们都需要一个职位。函数能够获得和设置它们的位置。他们的旋转。也许可以用名字来识别他们。还有一个更新函数来处理发生在它们身上的任何操作?这就是虚函数派上用场的地方。
因为你可以有virtual void Update(int a_iDeltaTime);
在基类中。所有从它继承的东西都有自己的更新类型。即玩家检查按键。而敌人只能更新他们的旋转和移动。
编辑:这样你就可以存储所有敌人的玩家道具。当你调用update时,因为它是虚拟的。它将根据它的实际类型调用适当的更新。这意味着你只需要一个列表来存储游戏中的所有实体类型。结束。
这样你就把它们之间共享的所有东西都放在基类中。并且只把唯一的东西放在主类中。
我所说的一切都只是建议,因为您的实现应该最适合您所面临的确切问题。唯一能让你更好地了解在什么地方使用什么实现的方法是通过实践,正如前面提到的,你应该学习更多关于设计模式的知识,因为它会打开你的思维,让你有更多的编码方式。并允许您编写更容易阅读的代码。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法