1. Este guião é sobre o primeiro jogo electrónico

Propaganda
Pong
1. Este guião é sobre o primeiro jogo electrónico (video
game em Inglês), o antepassado remoto (milénio
anterior ☺) dos jogos de computador actuais. Podem
ver um pouco da história dos jogos de vídeo em
http://www.pong-story.com/. O Pong é inspirado
obviamente no Ping-Pong, mas joga-se numa mesa
com paredes, ou seja, a bola nunca sai fora do recinto
rectangular, pelo que se aproxima mais de outros
jogos como o Bilhar ou o Squash. Na versão mais
simples do Pong, aquela que queremos que você
recrie usando Java, há apenas um jogador que joga
com uma raquete que se move apenas na horizontal,
ao longo da “parede” inferior do recinto (ou seja,
paralelamente ao eixo dos xx). Se, quando a bola vem
na direcção da parede inferior, não conseguir bater-lhe
com a raquete, o jogo termina. O objectivo do jogo é
maximizar o tempo de jogo. A bola é lançada
inicialmente da posição da raquete por aplicação de
uma dada força (para simular o lançamento) e com um
ângulo tal que não a faça ir directamente contra a
parede inferior. O movimento é uniformemente desacelerado para simular o atrito da bola
com a mesa. A bola, por sua vez, tem obviamente componentes de velocidade segundo xx
e yy. Repare que quando a bola bate numa parede, a única coisa que faz é mudar o sinal de
uma dessas componentes. No caso extremo de bater em ambas as paredes
simultaneamente (canto do recinto), então ambas as componentes mudam também
simultaneamente de sinal. Considera-se que uma bola bate numa parede quando a
distância do seu centro à parede for igual ao raio.
2. Na primeira linha do ficheiro de dados vêm quatro números reais representando as
coordenadas (x e y) dos dois cantos na extremidade da diagonal principal do recinto,
seguidos de um quinto que representa uma força não nula de atrito da mesa, que tem a
mesma direcção e o sentido oposto ao do movimento da bola. Este atrito, que para
simplificar se considera constante, provoca um movimento uniformemente desacelerado.
Na segunda linha do ficheiro de dados vem a posição inicial (coordenadas x e y), a massa
e o raio da bola, tudo números reais. Na terceira e última linha temos dois números reais: a
força aplicada e a direcção da mesma em graus (zero graus é o sentido do semi-eixo
positivo dos x e os graus crescem no sentido contrário ao dos ponteiros do relógio). Note
que, para garantir as regras do jogo indicadas no ponto anterior, este ângulo pertence ao
intervalo ]0º, 180º[. Considere, que a velocidade inicial é a que resultaria da aplicação da
força de lançamento indicada durante 1 segundo. Este ficheiro de dados é utilizado em
todas as tarefas que se seguem.
3. A tarefa A tem como objectivo representar apenas o “filme” do movimento de uma bola
no recinto de jogo, sem raquete. Para representar a bola aconselhamos que utilize a classe
Ball que herda de MovingParticle (desenvolvida no guião anterior). Não considere o atrito
nesta primeira tarefa, ou seja, considere que o movimento é uniforme. Assim sendo, a bola
nunca pára. O ficheiro de saída deverá ser constituído por 10 linhas, cada uma
correspondendo às coordenadas x e y da bola ao fim, sucessivamente, do 1º, 2º,…, 10º
segundos, separadas com um espaço e com duas casas decimais.
4. Na tarefa B o ficheiro de saída deverá conter 10 linhas, cada uma com três números reais
separados com um espaço e com duas casas decimais, representando, respectivamente, as
coordenadas x e y da bola e o momento (em segundos) dos primeiros 10 impactos da
mesma com as paredes.
5. Na tarefa C e em todas as que se seguem considere o atrito. Para já ainda não temos uma
raquete e a bola pode bater em todas as paredes livremente. O ficheiro de saída deve ter
apenas uma linha, representando as coordenadas x e y da bola, separadas por um espaço,
no momento em que ela pára, com duas casas decimais.
6. Na tarefa D o ficheiro de saída tem apenas uma linha contendo o tempo (em segundos,
com duas casas decimais) que demora até que a bola bata na parede inferior, ou seja, até
acabar o jogo. Caso a bola fique parada antes de atingir a parede inferior, deverá ser
escrito o tempo até à imobilização, seguido, com um espaço, da string “STOPPED”.
7. Na tarefa E adicionamos a raquete. Note que a raquete também poderá ser representada
pela classe MovingParticle, mas não tem componente de velocidade segundo o eixo dos
yy. A raquete desloca-se sobre a parede inferior, ou seja, tem a mesma coordenada y que
esta. A nossa raquete é para já controlada automaticamente pelo computador e nunca
“falha” ou seja, está sempre à espera da bola no ponto de impacto desta com a parede
inferior. Inicialmente está colocada na posição intermédia desta. Quando bate numa bola a
raquete fica imediatamente parada. Só inicia o seu deslocamento, uniformemente
acelerado, para a posição seguinte (aquela em que “apanha” a bola) no momento em que
ocorre a última colisão da bola antes desta se dirigir para a parede inferior. Pode deduzirse que a aceleração da raquete é dada por a = 2d/t2 e que a velocidade que ela tem no
momento do impacto é v = 2d/t, onde d é a distância, na horizontal, entre a posição inicial
da raquete e o ponto de impacto da bola na raquete e t o tempo que a bola demora desde o
último impacto na parede antes de atingir a raquete. Quando a raquete bate na bola esta
altera a sua velocidade. Considere o ângulo alfa de impacto da bola na raquete
(pertencente ao intervalo ]0º, 90º]). A componente de velocidade segundo xx da raquete
vezes o co-seno de alfa é adicionada à componente segundo xx da bola (note que a bola
até pode inverter o sentido segundo este eixo). A componente de velocidade segundo yy
da raquete vezes o seno de alfa é adicionada à componente segundo yy da bola.
8. A tarefa F é o seu trabalho para as férias de Natal e não implica submissão no mooshak.
Pretende-se que, com recurso à biblioteca Swing do Java, substitua a raquete automática
por uma manual controlada por duas teclas, para a mover para a esquerda e para a direita,
visualizando o jogo. Na 1ª aula prática de Janeiro deverá fazer uma demonstração do jogo.
Pode usar a sua imaginação na representação gráfica, permitir que o utilizador escolha
cores, alterar os parâmetros carregados do ficheiro de dados, guardar recordes e o que
mais lhe der prazer. Bom jogo!
Download