0

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

我有一个房间,我们称之为“客厅”。它的北边是“厨房”。它的南边是“Den”。“客厅”和“书房”之间有一扇门。用户可以说“N”,然后 goNorth() 将被调用,所有内容都将是桃色的。但是,如果用户说“S”,我希望它给他们某种“你不能走那条路”,直到他们打开门。这将要求我要么 1) 完全放弃我的 OOP 想法,而是将每个房间写成它自己的一组函数和变量(我过去会怎么做)或 2) 对我包含的头文件进行特定实现每个房间的所有这些函数和变量(理论上我想怎么做)但是我只是不知道这在技术上是否可行以及是否可以做到。

就像你知道的,我很清楚有完整的语言和引擎专门用于这个过程,我现在不想制作一个大型的完整游戏,我想做的只是提高我的编程技能,这就是为什么我走这条路。

4

1 回答 1

0

这可能会因为过于宽泛而被关闭,因为有很多方法可以解决它。这是我在类似情况下所做的大约:

Room有一个方法GetConnection(direction)并返回一个指向Connection对象的指针(如果没有办法,则返回一个空指针)。

Connection对象有一个虚Traverse()方法。basicConnection有一个指向目的地的成员,该Traverse()方法只是将玩家的位置更新到目的地。

对于Connection具有附加限制的派生类,比如说ConnectionThroughDoor有一个重写的方法,该方法在调用基类以实际移动玩家Traverse()之前检查门是否打开(或任何限制) 。Traverse()

概括地说,考虑编程接口并考虑是否需要额外的类来表示其他概念(如Connectionbetween Rooms)。

于 2016-04-26T23:38:28.540 回答