【发布时间】:2013-04-14 01:40:26
【问题描述】:
我正在制作基于 Nethack 的 Rogue Like 游戏。我需要决定最好的班级来放置在地牢中导航的方法。现在我实现移动的方式是简单地向 Player 询问字符输入。 (使用 W、A、S、D 作为箭头)。我设置了一段时间,所以它循环直到触发字符结束程序。在这个循环中,它从打印地牢的状态开始。要求输入字符,然后是 if 语句以检查输入的字符。在每个 if 语句中,它将调用一个相对于要移动的输入/方向的方法。所以我将拥有:moveUp()、moveRight() 等等。我只需要弄清楚哪个类最适合放置这些方法,这将决定如何调用这些方法、传递什么以及以此类推。
我将用粗体列出类并用缩进表示继承。以下是我参与的课程:
-
实体:基类。它本质上代表任何/所有对象
-
生物:基本上代表地牢中的活“东西”
- Player:基本上是一个扩展的 Creature.. 这是谁在玩的类。
-
Item:作为任何被视为 Item 的东西的基类
- 武器:武器..
- 盔甲:一件盔甲..
- 消耗品:可以消耗的物品。还有其他几个类别
-
生物:基本上代表地牢中的活“东西”
我也有几个独立的类:
- Tile:“游戏板”上的空间。它包含一个指向 Creature 的 ptr、指向 Items 的指针向量和一个显示该空间所代表内容的字符。
- DungeonLevel:这是单个关卡的游戏板/网格。它有一个平铺对象的二维向量。
我已经可以正常生成地牢了,还有什么不可以的。对于每个 DungeonLevel 对象,所有 Tiles 将保持在同一位置。因此,当 Player 或 Creature 移动(1 个点)时,程序将调用这些方法来操作 DungeonLevel 对象( >Tile's) 以反映玩家/生物移动到的位置,方法是将它们从 Tile 传递到 Tile。然后程序重新开始循环。
我不确定将这些方法放在哪个类中。我基本上需要 Creatures 和 Player 才能移动。玩家根据字符输入移动。游戏中生成的生物/怪物将向玩家移动 1 个空间(如果可能)。
所以我不确定是否应该使用相同的方法来控制任何 Entity 或者 DungeonLevel 是否应该控制移动,或者 Creature 基类和派生类,玩家,类应该有相同的移动方法,或者如果 Creature 应该有自己的,Player 应该有自己的。
建议?谢谢。
【问题讨论】:
-
这不是您问题的答案,但根据您所做的决定,如果您还没有一本关于设计模式的书,我强烈建议您购买。我有 Design Patterns: Elements of Reusable Object-Oriented Software 并推荐它。这本书让我对设计类和类之间交互的不同方式敞开了心扉。
-
是的,这是个好主意。感谢您的建议。
-
codeumbra.eu/… 有一个使用 libtcod 库编写 roguelike 游戏的 c++ 教程,它有一个经过深思熟虑的类层次结构。 c++ 教程基于roguebasin.roguelikedevelopment.org/… 上更完整的python 教程(我参与了一些)。
标签: c++ class object inheritance implementation