breakout game - jak wywołać różne zachowania

0

Cześć,

Piszę klona gry breakout. Mam klasę Ball, Brick, Paddle, Board itp. Chciałbym aby w grze, podczas zderzenia piłki (Ball) z rożnymi cegiełkami (Brick) wywoływane były różne akcje, np. zmniejszenie paletki która odbija piłkę (Paddle), bonusowe punkty, zmiana szybkości piłki czy włączenie opcji strzelania. Na tę chwilę rozwiązałem to tak, że istnieje kilka podklas klasy Brick w której zaimplementowana jest funkcja destroy() która niszczy cegiełkę w wyniku zderzenia z piłką i wywołuje określone akcje np.:
klasa HardBrick - metoda destroy() powoduje że cegiełka jest usuwana po czwartym zderzeniu z piłką,
klasa ImmutableBrick - powoduje ze cegiełki nie można usunąć
klasa BrickSpeed- po usunięciu cegiełki zwiększona zostaje prędkość piłki
itp.

I tutaj pytanie, czy takie rozwiązanie jest OK? Klasa Brick zawiera referencje do klasy Paddle, Ball itd. i przy wywołaniu metody destroy() wywołuje określone akcje na Ball,Paddle , np.

class HArdBrick extends Brick{
    int numberOfHit = 4;
    @Override
    public void destroy(){
        if(numberOfHit > 0){
            setColor(new Color(255/numberOfHit,255/numberOfHit,255/numberOfHit));
            numberOfHit--;
        }else{
            super.destroy();
        }
    }
 class HardBrick extends Brick{
        Ball ball;
        Paddle paddle;

        @Override
        public void destroy(){
            super.destroy();
            ball.changeSpeed();
            paddle.changeSize();
            stats.addPoints();
        }
    }
...

czy lepiej zaimplementować to silniku gry gdzie będzie fragment:

    if(Ball.collision(specific_brick)

    {
        ball.changeSpeed();
        paddle.changeSize();
        paddle.turnOnShootOption()
        ...
    }

}

dzięki za wszelkie sugestie.

0

Ja bym robił tak (z grubsza) jak Ty -- robienie ifami słabe chyba jest, a im większa aplikacja, tym słabsze...

PS. HArdBrick i HardBrick? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1