实现类似的类

时间:2011-06-26 18:15:06

标签: c++ class

我是C ++编程的新手,我正在使用Visual C ++制作Pong。我的游戏将有两种游戏模式,多人游戏和单人游戏。现在,我打算为单人游戏和多人游戏拨打一个单独的课程。 (所以我会PaddleMP RpaddleMP, LpaddleMP;PaddleSP RpaddleSP, LpaddleSP;,其中R和L分别代表左右拨片)。但是,多人游戏板和单人游戏板的代码非常相似。为他们两个使用一个类是否更好,只需要一个初始化函数,允许我选择它是单人游戏还是多人游戏,或者我应该为两者创建一个新类?

5 个答案:

答案 0 :(得分:6)

桨是一个桨,无论你放在哪里,无论谁控制它。

控件(AI或人为控制)应该成为桨的一部分,因此不应影响桨类。

同样,如果您需要重写课程以便将其放在屏幕的另一端,那么这是一个非常糟糕的划桨

答案 1 :(得分:3)

这在很大程度上取决于类中的代码类型。根据这一点,您可以:

  • 使用相同的类,并在初始化时传递详细信息(如果它们与大部分共享代码非常相似)
  • 编写实现共享代码的基类,并派生特定功能的类

在大多数情况下,后者会更有意义。

答案 2 :(得分:2)

IMO,你有两个问题。首先,我认为你选择的名字(单人和多人)都很差。其次,我认为桨叶本身应该独立于移动桨叶的输入。

因此,实际上应该只有一种桨式。你可以告诉它向上或向下移动,它会移动你告诉它的方向,但是桨叶本身对移动命令的来源一无所知。

然后我会创建/发送输入到paddle的东西。在我看来,这里的相关区别在于玩家输入和AI输入之间的相对区别,而不是单人游戏与多玩家。

因此,我们有一个播放器输入,可以从鼠标,键盘,操纵杆等读取相关数据,并将其转换为相关命令以发送到球拍。我们还有一个AI输入,它可以产生类似的命令,但是基于它自己的计算而不是来自用户的输入。

这是您希望继承的地方 - AI输入和播放器输入都继承自可生成命令的通用输入类型。根据您的喜好,您可能不需要实际的播放器输入 - 相反,您可能有一个键盘输入,操纵杆输入和鼠标输入彼此分开。例如,如果您决定添加对多触摸屏之类的支持,这可能会更容易一些,这可能至少与上述任何一个不同(但仍然遵循相同的协议/实现相同的界面)。

答案 3 :(得分:1)

从面向对象的角度来看,在Paddle类中填充多人游戏或单人游戏数据毫无意义。 Paddle类应仅描述特定于桨的行为,例如大小,动作,以及你有什么。

使用一个或多个拨片的方式应该在一个单独的类中定义,可能在Behavior级内,例如拨片的位置是否应该取决于另一个拨片的位置。您可能应该有MultiplayerBehaviorSinglePlayerBehavior

最终,您可以使用粘合这两个的代码,即一组Paddle个实例和一个特定的Behavior。这可以是Setup类,它聚合这两个。

答案 4 :(得分:0)

嗯,我认为最合适的决定是创建一个抽象基类Paddle,它将包含所有类型的桨的所有通用代码,然后从中派生出多人游戏和单人游戏。您的层次结构可能如下所示:

class Paddle {};
class PaddleMP : public Paddle {};
class PaddleSP : public Paddle {};

您可以从RpaddleMP以及LpaddleMP PaddleMPRpaddleSP推导LpaddleSPPaddleSP。如果这种方法对您来说似乎不熟悉,我建议您阅读更多有关C ++继承的内容。

相关问题