E02 Bilhar solitário
Estude inicialmente o programa BouncingBall.java de IntroCS, também disponibilizado em
https://www.ime.usp.br/~yoshi/2021ii/mac0121/sandbox/2021.08.26/
Estude a seguir os programas MouseFollower.java e OneSimpleAttractor.java de IntroCS, disponibilizados no item "User interaction" da Seção 1.5 de IntroCS:
https://introcs.cs.princeton.edu/java/15inout/
Aproveitando, execute também os programas Springs.java e SimpleAttractors.java disponibilizados naquele item.
Neste exercício, você deve escrever uma variante de BouncingBall.java, chamado Billiards.java, como descrito a seguir.
Billiards.java deve ser tal que a bola sofre atrito e perde velocidade ao longo do tempo (veja a implementação de "drag" em OneSimpleAttractor.java).
Billiards.java deve ficar escutando o mouse. Quando o mouse é pressionado, uma força deve agir sobre a bola, acelerando-a. Essa força deve ser na direção da bola, a partir da posição do mouse. Assim, essa força deve impulsionar a bola para longe da posição do mouse.
A força que age na bola ao se pressionar o mouse deve ter intensidade inversamente proporcional ao quadrado da distância entre o mouse e a bola. Assim, quando a bola está longe do mouse, pressionar o mouse tem um efeito mais reduzido. Se o mouse está bem perto da bola, ao se pressionar o mouse, a bola sofre uma força grande e ela sofre uma aceleração grande.
O pequeno vídeo anexo (Billiards.mov) mostra o comportamento desejado de Billiards.java. Para que fique claro quando o mouse foi pressionado, neste vídeo o fundo da imagem torna-se branco quando o usuário pressiona o mouse. Não implementar este comportamento em seu programa.
Entrega. Entregue apenas seu programa Billiards.java.
Diversão adicional. Em alguma edição anterior desse exercício, um aluno entregou uma solução incrementada. O pequeno vídeo BilliardsDeluxe.mov anexo mostra o funcionamento do programa desse aluno. Você pode considerar produzir versões parecidas, como diversão.
- 29 août 2021, 22:04
- 29 août 2021, 22:08