叫我钝或任何你喜欢的名字。我的大学从来没有正确地教我OOP,因此我更喜欢用C编码。然而,为了分支和教自己一些新技能,我决定尝试教自己一些更多的对象面向技巧,以及参与我的其他激情/爱好,文本冒险。我将在C ++中尝试这个,因为这是我大部分本科生使用的语言,所以我知道它是最好的。我要挂断的是我已经为“位置”应该具有的基本属性和方法编写了一个通用的.h文件。如果我想做的就是创建一堆房间并且能够将N / S / E / W转到另一个通用房间并打印房间描述,这一切都很好。我不知道该怎么做是为了更具体地实现这个头文件。我担心我没有很好地解释我的问题,所以让我用一个例子来说明:
我有一个房间,我们称之为“客厅”。它的北边是“厨房”。它的南边是“Den”。 “客厅”和“书房”之间有一扇门。用户可以说“N”和goNorth()将被调用,所有都将是桃子。但是,如果用户说“S”,我希望它能给他们一些“你不能那样”,直到他们打开门。这需要我1)完全放弃我的OOP想法,只是将每个房间写成它自己的一组函数和变量(过去我将如何做)或2)制作我所包含的头文件的具体实现每个房间的所有这些功能和变量(理论上我喜欢这样做)但是我不知道这在技术上是否可行以及是否如何做到这一点。如果有人可以指出我正确的方向,保持名称呼叫至少我会非常感激它。
而且你知道,我很清楚有完整的语言和引擎专门用于这个过程,我现在不是想制作一个大型的全尺寸游戏,我想做的就是提高我的编程技巧,这就是我采取这条路的原因。
答案 0 :(得分:0)
这可能会因为过于宽泛而被关闭,因为有很多方法可以解决它。这是我在类似情况下所做的大致:
Room
有一个方法GetConnection(direction)
并返回一个指向Connection
对象的指针(如果无法通过那种方式,则返回一个空指针)。
Connection
对象具有虚拟Traverse()
方法。基本Connection
有一个指向目的地的成员,而Traverse()
方法只是将玩家的位置更新到目的地。
对于带有其他限制的Connection
,派生类(例如ConnectionThroughDoor
)有一个重写的Traverse()
方法,可以在调用门之前检查门是否打开(或任何限制)基类Traverse()
实际移动玩家。
要概括,请考虑编程接口,并考虑是否需要其他类来表示其他概念(例如Connection
之间的Rooms
)。