Правильный OO Понг - PullRequest
       14

Правильный OO Понг

10 голосов
/ 14 марта 2009

Как мне создать "Правильный" OO Pong?

Идея Правильного существа заключается в том, что любой элемент может быть изменен: форма мяча, площадки и весла, добавление препятствий и даже «бонусы», например, «может прилипнуть к мячу» *

Два наиболее насущных вопроса сейчас:

  • Кто проверяет наличие коллизий? и
  • Когда происходит сговор, кто говорит мячу, как отскакивать?

Ответы [ 4 ]

10 голосов
/ 14 марта 2009

Я полагаю, вы могли бы создать объект физического движка, который вы будете постоянно обновлять через заданные промежутки времени. Он будет проверять наличие столкновений, перемещать мяч, вычислять углы отскока и т. Д.

РЕДАКТИРОВАТЬ # 1: Чтобы добавить немного больше деталей, объект "физика игры" будет хранить, среди прочего, ссылки на другие игровые объекты, такие как мяч и весла. Объект физики игры будет иметь метод «обновления», который будет вызываться непрерывно во время игры. Вот некоторые из шагов, которые должен выполнить этот метод:

  • Получить текущую позицию весла (которые контролируются игроками).
  • Обновить положение мяча на основе его предыдущей скорости и направления и времени, прошедшего с момента последнего обновления.
  • Обнаружение столкновений с другими объектами (веслами, стенами и т. Д.).
  • Пересчитать скорость и направление мяча на основе любых столкновений.

Всего несколько идей.

РЕДАКТИРОВАТЬ # 2: Разработать с немного больше OO фокус ...

Различные физические объекты, такие как шар и весла, будут хранить врожденные физические состояния и параметры для себя (положение, скорость, масса и т. Д.) Как свойства . Объект физики игры по существу представляет все уравнения физического движения в виде методов .

В качестве примера ... Допустим, вы хотите смоделировать влияние воздушного трения на мяч. Объект Ball будет хранить такие свойства, как «скорость» и «коэффициент сопротивления». У объекта игровой физики был бы метод вычисления силы сопротивления воздуха на объекте путем извлечения необходимых свойств этого объекта и включения их в заданное уравнение сопротивление жидкости .

Инкапсулируя вещи таким способом, обновления кода могут быть проще. Например, если вы хотите использовать другое уравнение для сопротивления жидкости, единственное изменение, которое вам нужно сделать, - это соответствующий метод объекта физики игры. Ни один из других объектов не нуждается в модификации.

3 голосов
/ 14 марта 2009

Мне кажется, что суд был бы подходящим объектом для проверки или, в зависимости от того, насколько сложна логика, отдельным классом для обработки столкновений (то есть какой-то физический движок, как сказал gnovice).

Мячи и весла не должны знать друг о друге, поскольку они не связаны напрямую в объектно-ориентированном смысле. Один не содержит другого и не является производным от другого.

1 голос
/ 14 марта 2009

В типичной обстановке, как это. Каждый объект получает возможность реагировать на событие столкновения с каждым другим объектом, с которым они взаимодействуют. В каком-то коде psuedo (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)
0 голосов
/ 11 апреля 2009

Мне нравится использовать методологию Model-View-Controller, так что в этом случае у вас будет игровой контроллер, который будет обрабатывать контроль столкновения, но при детализации он будет просто контролировать контроллер ... это слишком сложно объяснить здесь и я не такой умный, так что проверь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...