2011-06-26 207 views
1

我是C++编程的新手,我在Visual C++中制作Pong。我的游戏将有两种游戏模式,多人游戏和单人游戏。目前,我计划为单人桨和多人桨制定单独的课程。 (所以我会有PaddleMP RpaddleMP, LpaddleMP;PaddleSP RpaddleSP, LpaddleSP;,其中R和L分别代表右桨和左桨)。但是,多人桨和单人桨的代码将非常相似。对他们来说,使用一个类会更好吗?只需要一个初始化函数,让我可以选择是单人游戏还是多人游戏,还是为两者创建一个新类?实现类似的类

回答

2

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

因此,应该只有一种桨类型。你可以让它向上或向下移动,它会移动你所说的方向,但是桨本身对移动命令的来源一无所知。

然后我会有创建/发送输入到桨的东西。在我看来,不是单人玩家与多玩家,而是玩家输入与AI输入之间的相关区别。因此,我们有一个播放器输入,可以从鼠标,键盘,游戏杆等中读取相关数据,并将其转换为相关命令发送给桨。我们也有一个AI输入产生类似的命令,但是基于它自己的计算而不是来自用户的输入。

这就是你想要继承的地方 - AI输入和播放器输入都可以继承可以产生命令的通用输入类型。根据你的口味,你可能不需要真正的玩家输入 - 相反,你可能有一个键盘输入,游戏杆输入和鼠标输入相互分开。举例来说,如果您决定添加对多点触控屏幕的支持,这可能会稍微容易一些,这可能与以上任何一点至少有所不同(但仍遵循相同的协议/实施相同的界面)。

+0

我明白了。我的多人桨和单人桨比他们如何被控制有更多的不同,但我看到继承是我所期待的。谢谢! – Draksis

3

这在很大程度上取决于什么样的代码进入类。根据这一点,您可以:

  • 使用相同的类,并且在初始化传递信息(如果它们在本质上与共享大部分代码非常相似)
  • 写它实现了一个基类共享代码和派生类的特定功能

在大多数情况下,后者将是更有意义的。

0

嗯,我认为最适合你的决定是创建一个抽象基类Paddle,它将拥有所有类型的paddles的所有通用代码,然后从中派生多人和单人paddles。您的层次结构看起来是这样的:

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

你可以从PaddleSP获得RpaddleMPPaddleMPLpaddleMPRpaddleSPLpaddleSP以同样的方式。如果这种方法对你来说似乎是新的,我建议你阅读一些关于C++继承的内容。

6

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

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

同样地,这是一个非常不好的桨,如果你需要重写,以便将其放置在屏幕

+0

我希望我可以多次投票! – davka

+0

当 - 通过更简洁,你击败了我4分钟! –

+0

好的。我现在拥有这种方式,我有一个初始化函数让我可以决定桨板的哪一侧,而且我有一个独立的AI类。 – Draksis

1

从一个面向对象的角度来看,在一个Paddle类中填充多人或单人数据是没有意义的。 A Paddle类应该只描述特定于桨的行为,例如,大小,运动,你有什么。

一个或多个桨的使用方式应该在单独的类中定义,可能在类内,例如桨的位置是否应该依赖于另一个桨的位置。你或许应该有一个MultiplayerBehaviorSinglePlayerBehavior

最终,你可以有胶合这两个代码,即一组Paddle实例和特定Behavior的。这可能是Setup类,它将这两个聚合起来。