【问题标题】:Using OOP when creating a text adventure在创建文本冒险时使用 OOP
【发布时间】:2016-04-26 21:51:56
【问题描述】:

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

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

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

【问题讨论】:

  • 1) 没有正确的方法。 2) 第 1 点适用于一切,而不仅仅是这个程序。
  • 同一个.h 通常不能有多个.cpp 文件。您可以创建一个抽象基类class Room,其中包含virtual void printDescription() = 0; 之类的虚函数,以及实现这些方法的派生类(class Kichen : public Room),并具有该房间状态的数据成员(bool drawerOpen)。
  • @tmlen 绝对没有理由你不能拥有比头文件更多的 cpp 文件。事实上,几乎每个项目都会有至少 一个main.cpp.
  • 同一个函数声明(.h)不能有多个函数定义(.cpp),这似乎是 OP 正在尝试的。除此之外,.cpp.h 文件的数量无关紧要。

标签: c++ oop adventure


【解决方案1】:

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

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

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

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

概括地说,从编程接口的角度考虑,并考虑是否需要额外的类来表示其他概念(例如 Connection 之间的 Rooms)。

【讨论】:

  • 我认为它可能过于宽泛,但我不确定还能用它做什么。我什至从未想过将连接作为自己的对象,这是一个非常有趣(如果不是听起来令人费解的话)的想法。我还没有真正理解为什么人们如此喜欢 OOP,它总是在我听来如此做作。不过感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多