在创建文本冒险时使用 OOP

Using OOP when creating a text adventure

叫我钝或任何你喜欢的名字。我的大学从未正确地教过我 OOP,因此我更喜欢用 C 编写代码。但是,为了扩展和自学一些新技能,我决定尝试自学更多对象面向技能以及参与我的其他 passions/hobbies 文字冒险之一。我将在 C++ 中进行尝试,因为这是我大部分本科生使用的语言,所以我最了解它。我挂断的是我已经为 "location" 应该具有的基本属性和方法编写了一个通用的 .h 文件。如果我想做的只是创建一堆房间并能够去 N/S/E/W 到另一个普通房间并打印房间的描述,那就太好了。我不知道该怎么做是对该头文件进行更具体的实现。恐怕我没有很好地解释我的问题,所以让我用一个例子来说明:

我有一个房间,就叫它"Living Room"吧。它的北边是"Kitchen"。它的南面是 "Den"。 "Living Room"和"Den"之间有一扇门。用户可以说 "N" 并且 goNorth() 将被调用并且一切都将是完美的。但是,如果用户说 "S",我希望它给他们某种 "you can't go that way",直到他们打开门。这将要求我要么 1) 完全放弃我的 OOP 想法,只是将每个房间写成它自己的一组函数和变量(我过去是怎么做的)或 2) 对我包含的头文件进行特定的实现每个房间的所有这些功能和变量(理论上我想怎么做)但是我只是不知道这在技术上是否可行以及如何做到这一点。如果有人能给我指出正确的方向,尽量少用名字,我将非常感激。

如你所知,我很清楚有完整的语言和引擎专门用于此过程,我现在不想制作一款大型的全面游戏,我只想提高我的水平编程技能,这就是我走这条路的原因。

这可能会因为范围太广而被关闭,因为有很多方法可以解决它。以下是我在类似情况下所做的大致操作:

Room 有一个方法 GetConnection(direction) 和 returns 一个指向 Connection 对象的指针(或者一个空指针,如果没有办法的话)。

Connection 对象有一个虚拟 Traverse() 方法。基本的 Connection 有一个指向目的地的成员,而 Traverse() 方法只是将玩家的位置更新为目的地。

对于具有额外限制的 Connection,派生的 class,比如说 ConnectionThroughDoor 有一个覆盖的 Traverse() 方法来检查门是否打开(或任何限制是)在调用基地 class Traverse() 以实际移动玩家之前。

总而言之,考虑编程接口并考虑是否需要额外的 classes 来表示其他概念(例如 Rooms 之间的 Connection)。