适当的OO Pong

时间:2009-03-14 03:40:21

标签: oop

我应该如何设计一个“正确的”OO Pong?

正确的想法是任何元素都可以改变:球,球场和球拍的形状,增加障碍,甚至“加强”,比如“可以将球粘到球拍上”。

现在两个更紧迫的问题是:

  • 谁检查了结果?和
  • 当发生分裂时,谁告诉球如何反弹?

4 个答案:

答案 0 :(得分:10)

我想你可以制作一个物理引擎对象,你可以在给定的时间间隔内连续更新。它会检查碰撞,移动球,计算反弹角等等。

编辑#1:为了增加更多细节,“游戏物理”对象将存储对其他游戏对象(如球和球)的引用。游戏物理对象将具有“更新”方法,该方法将在游戏运行时被连续调用。该方法将执行的一些步骤是:

  • 获取拨片的当前位置(由玩家控制)。
  • 根据以前的速度和方向以及自上次更新后经过的时间更新球的位置。
  • 检测与其他物体(桨,墙等)的碰撞。
  • 根据任何碰撞重新计算球的速度和方向。

只是一些想法。

编辑#2:详细说明OO焦点...

各种物理对象,如球和桨,会将固有的物理状态和参数(位置,速度,质量等)存储为<​​strong>属性。游戏物理对象基本上将所有物理运动方程表示为方法

作为一个例子......假设你想模拟空气摩擦对球的影响。球对象将存储诸如“速度”和“阻力系数”的属性。游戏物理对象将有一种方法,通过获取该对象的必要属性并将其插入到fluid drag的给定方程中来计算对象上的空气阻力。

通过以这种方式封装内容,可以更轻松地更新代码。例如,如果要使用不同的方程进行流体拖动,则需要进行的唯一修改是游戏物理对象的相应方法。其他任何对象都不需要修改。

答案 1 :(得分:3)

在我看来,法庭将是进行检查的适当对象,或者取决于逻辑的复杂程度,是一个处理碰撞的单独类(即某种物理引擎,如gnovice所说)。

球和桨不应该彼此了解,因为它们在面向对象的意义上没有直接相关。一个不包含另一个,也不包含另一个。

答案 2 :(得分:1)

在这样的典型环境中。每个对象都有机会响应碰巧与其碰巧交互的每个其他对象的事件。在某种伪代码(python)中:

class Moveable:
     def Update(self):
          self.move()

class Ball(Moveable):
     def Collide(self, target):
          self.restore() # move out of the bounding box 
                         # of whatever we collided into from 
          self.reflect() # change direction after bouncing
          if target is a Paddle:
              self.speedup() # Make it a little harder after hitting a paddle

class Paddle(Moveable):
     def Collide(self, target):
         if target is a Ball:
             self.AwardSomePoints()

def main_loop():
    ...
    while True:
        for thing_one in Moveables:
            thing_one.Update()

            for thing_two in Moveables:
                if thing_one is not thing_two 
                        and thing_one is touching thing_two:
                    thing_one.collide(thing_two)

答案 3 :(得分:0)

我喜欢使用模型 - 视图 - 控制器方法,所以在这种情况下,你会有一个游戏控制器来处理控制碰撞,但是向下钻取只会控制一个控制器...这太复杂了,无法解释这里我不那么聪明,所以检查一下:

http://en.wikipedia.org/wiki/Model-view-controller