我是C++编程的新手,我在Visual C++中制作Pong。我的游戏将有两种游戏模式,多人游戏和单人游戏。目前,我计划为单人桨和多人桨制定单独的课程。 (所以我会有PaddleMP RpaddleMP, LpaddleMP;
和PaddleSP RpaddleSP, LpaddleSP;
,其中R和L分别代表右桨和左桨)。但是,多人桨和单人桨的代码将非常相似。对他们来说,使用一个类会更好吗?只需要一个初始化函数,让我可以选择是单人游戏还是多人游戏,还是为两者创建一个新类?实现类似的类
实现类似的类
回答
IMO的另一端的类,你这里有两个问题。首先,我认为你选择的名字(单人和多人)很差。其次,我认为桨本身应该独立于移动桨的输入。
因此,应该只有一种桨类型。你可以让它向上或向下移动,它会移动你所说的方向,但是桨本身对移动命令的来源一无所知。
然后我会有创建/发送输入到桨的东西。在我看来,不是单人玩家与多玩家,而是玩家输入与AI输入之间的相关区别。因此,我们有一个播放器输入,可以从鼠标,键盘,游戏杆等中读取相关数据,并将其转换为相关命令发送给桨。我们也有一个AI输入产生类似的命令,但是基于它自己的计算而不是来自用户的输入。
这就是你想要继承的地方 - AI输入和播放器输入都可以继承可以产生命令的通用输入类型。根据你的口味,你可能不需要真正的玩家输入 - 相反,你可能有一个键盘输入,游戏杆输入和鼠标输入相互分开。举例来说,如果您决定添加对多点触控屏幕的支持,这可能会稍微容易一些,这可能与以上任何一点至少有所不同(但仍遵循相同的协议/实施相同的界面)。
这在很大程度上取决于什么样的代码进入类。根据这一点,您可以:
- 使用相同的类,并且在初始化传递信息(如果它们在本质上与共享大部分代码非常相似)
- 写它实现了一个基类共享代码和派生类的特定功能
在大多数情况下,后者将是更有意义的。
嗯,我认为最适合你的决定是创建一个抽象基类Paddle
,它将拥有所有类型的paddles的所有通用代码,然后从中派生多人和单人paddles。您的层次结构看起来是这样的:
class Paddle {};
class PaddleMP : public Paddle {};
class PaddleSP : public Paddle {};
你可以从PaddleSP
获得RpaddleMP
和PaddleMP
LpaddleMP
和RpaddleSP
和LpaddleSP
以同样的方式。如果这种方法对你来说似乎是新的,我建议你阅读一些关于C++继承的内容。
从一个面向对象的角度来看,在一个Paddle
类中填充多人或单人数据是没有意义的。 A Paddle
类应该只描述特定于桨的行为,例如,大小,运动,你有什么。
一个或多个桨的使用方式应该在单独的类中定义,可能在类内,例如桨的位置是否应该依赖于另一个桨的位置。你或许应该有一个MultiplayerBehavior
和SinglePlayerBehavior
最终,你可以有胶合这两个代码,即一组Paddle
实例和特定Behavior
的。这可能是Setup
类,它将这两个聚合起来。
- 1. 如何实现一堆类似的类
- 2. 实现拖放类似
- 3. 如何实现类似数据类型
- 4. 类似于C#的XmlDocument的Java实现
- 5. 实现类似Excel的公式引擎
- 6. 如何实现类似gmail的热键
- 7. OpenERP - 实现与stock.picking.in类似的东西
- 8. javascript:实现类似python的__getattribute__?
- 9. 如何实现类似iTunes的界面?
- 10. 实现每个vanila JS类似的jQuery
- 11. 实现类似Eclipse的OSGi启动器
- 12. 实现类似Google+圈子的功能
- 13. 如何实现类似Facebook的API?
- 14. 如何实现类似gravatar的算法?
- 15. 实现类似于UICollectionView的“registerClass”
- 16. 实现类似jibjab卡的效果
- 17. 实现类似于Stackoverflow的计时器
- 18. 实现类似于视图的星系
- 19. 类似于PEP 354的枚举实现
- 20. Android - 实现类似Unix的cronjob
- 21. hibernate和nhibernate的实现有多类似?
- 22. GWT实现类似桌面图标
- 23. 使用类似的输入字段实现许多类似的视图
- 24. 组合两个类似的数字类实现
- 25. 寻找实现C#接口的所有类 - 类似于Java
- 26. 如何实现类似于std :: vector的自定义类
- 27. 如何重构实现类似方法的模型类?
- 28. 警告避免使用类似'HashMap'的实现类型;改用
- 29. 实现类似于非可修改类型的功能
- 30. 如何实现具有类似行为的两个类
我明白了。我的多人桨和单人桨比他们如何被控制有更多的不同,但我看到继承是我所期待的。谢谢! – Draksis