E03 Bouncing balls OO
Introdução. O programa CollidingBalls.java, dado abaixo, simula \(N\) bolas colidindo em uma caixa quadrada. Ele pode ser executado com ou sem gravidade:
$ java-introcs CollidingBalls <seed> <N>
$ java-introcs CollidingBalls <seed> <N> <G>
O primeiro argumento ($seed$) inicializa o gerador de números aleatórios, o segundo ($N$) é o número de bolas, e o terceiro ($G$) é a gravidade (opcional). Experimente executar CollidingBalls.java das seguintes formas:
$ java-introcs CollidingBalls 314314 50
$ java-introcs CollidingBalls 314314 50 .2
Motivação. A implementação em CollidingBalls.java usa arrays paralelos ($px$, $py$, $vx$, $vy$, etc) para representar as $N$ boas. O uso de uma classe Ball.java, encapsulando o estado e o comportamento de uma bola, possibilita a escrita de um programa mais claro. Usando Ball.java, podemos reescrever CollidingBalls.java pensando em um nível de abstração mais alto.
Sua tarefa. Implemente a classe Ball.java seguindo exatamente o esqueleto Ball.java fornecido abaixo. Esse esqueleto define a API de Ball.java. A classe Ball.java deve implementar o tipo abstrato de dados (TAD / ADT) para representar uma bola, suficiente para reescrevermos CollidingBalls.java.
A classe Ball.java deve ter variáveis de instância privativas para posição ($px$, $py$), velocidade ($vx$, $vy$), raio ($radius$), cor ($color$), e um flag booleano ($bouncedFloor$) para indicar se a bola colidiu com o chão no último passo de checagem de colisão horizontal (este detalhe só ficará claro depois de você estudar CollidingBalls.java). A simulação opera com um passo de tempo $dt = 1.0$.
A simulação reescrita. O programa CollidingBallsOO.java é fornecido abaixo e não deve ser alterado. CollidingBallsOO.java usa sua classe Ball.java. Ele foi escrito para reproduzir o comportamento de CollidingBalls.java (programa original). Quando você terminar de implementar Ball.java, você poderá compilar e executar CollidingBallsOO.java para obter o mesmo resultado que CollidingBalls.java. Por exemplo, as execuções
$ java-introcs CollidingBallsOO 314314 50 .2
$ java-introcs CollidingBalls 314314 50 .2
devem ter o mesmo resultado.
Sua tarefa. Sua única tarefa é escrever Ball.java, completando o esqueleto fornecido.
Entrega. Entregue apenas o arquivo Ball.java.
- 3 abril 2025, 18:48 PM
- 3 abril 2025, 18:48 PM