Pular para o conteúdo principal

Atividade 10 - Tutorial Java Game Programming - Mini Tennis - LPB

-Tutorial 01-

Nesse passo tem como objetivo ensinar como se usa o Swing para podermos criar uma janela, então para isso criamos classes para criar a janela, são duas classes, Game que é uma tela vazia, e Game2.
Usei o Swing para criar uma janela como a JFrame, onde mudei algumas propriedades como tamanho da janela, visibilidade e definir de fechar o programa. Para fazer a forma 2d é necessário um canvas, para que fosse desenhada as formas utilizei o Graphics e Graphics2d e utilizei o pacote color para pintar essas formas.

-Tutorial 02-

Para animar nosso jogo irei usar as coordenadas x e y e para isso criei uma função que aumenta  o valor de duas variáveis criadas, x e y são as coordenadas de um círculo. Para criar esse círculo usamos a setRenderingHint, e o anti-aliasing para deixar a imagem melhor, então para evitar que o círculo fique marcado por onde passa utilizei o comando super.paint() que limpa a tela.

Depois adicionei um Game Loop para que o jogo funcione, fique em um ciclo infinito e não pare. Foi preciso uma repetição dos métodos para que o jogo se atualizasse o tempo todo.


-Tutorial 03-

Nessa parte fiz a bolinha bater na tela como se fosse uma barreira e que ela fosse para outro lado ao bater assim ficaria delimitada apenas na janela na qual visualizamos, para isso comecei criando uma lógica para  bolinha as coordenadas dela e com isso vou definir a velocidade na qual ela vai se mover dentro da janela, coordenadas x e y. Para que a bolinha perceba que está perto da borda e assim retorne usei "if" que vai checar se a coordenada fica negativa ou passa do limite, e se acontecer, a bolinha receberá um valor que coloque ela para se mover ao contrário.

Depois disso criei uma classe para a bola onde vão estar suas funcionalidades e só vai precisar chamar os seus métodos na classe Game. Então criei uma classe chamada Ball e passei todo o código para ela, para que tudo funcionasse certinho criei uma variável game do tipo Game dentro da classe Ball. Depois criei um método para que pintasse a bolinha da tela dentro da classe Ball e dentro da classe Game chamei um método construtor da classe Ball.

O joguinho funciona como antes, só que agora deixamos mais organizado.

                               -Tutorial 04-

Nessa parte trabalhei em como usar o teclado no joguinho, utilizamos dois recursos o KeyEvent, que trabalha com o código da tecla pressionada, e o KeyListener, que trabalha detectando os eventos que irão acontecer ao pressionar ou soltar. Criei um método construtor para a classe e nela criei um objeto do KeyListener (MyKeyListener), na classe KeyboardExample criei outra, e nela coloquei tres metodos, keyTyped, keyReleased e keyPressed.

E agora quando executamos o programa e apertamos uma tecla ou solta ela, o NetBeans receberá uma informação dessa ação realizada e o evento selecionado irá acontecer.


-Tutorial 05-

Agora vou juntar o conceito de utilizar teclas e eventos do teclado e executar algo com isso.

Criei uma classe que vai ser a raquete que vamos controlar e utilizar para rebater a bolinha, para criá-la utilizar variáveis para marcar as coordenadas e um construtor para definir a variável do tipo Game e usarmos seus métodos, para raquete será utilizada apenas a coordenada x, ela vai se mover apenas na horizontal. Depois disso vou implementar a detecção dos eventos ao teclar no teclado e usar eles para mover a raquete, para isso precisei que a classe game conseguisse acionar os eventos do teclado, dentro dos eventos que quero utilizar vou chamar métodos dentro da classe Raquete, esses métodos são os intuitos, sempre que por apertada/soltada um teclado evento vai acionar o método da tecla e usar de parâmetro essa tecla.


-Tutorial 06-

Aqui vi como pode utilizar a colisão no programa, a bolinha tem que rebater na raquete e para isso precisa-se da colisão entre elas, o programa precisa saber o momento certo de executar a colisão entre elas, então para isso utilizei a classe Rectangle do pacote Awt para definir a área de  colisão da bolinha e da raquete, então criei um método desse tipo nas classes da Raquete e da bolinha.

Depois disso criei o método que vai informar a área da raquete e da bolinha, esse método vai retornar o objeto do tipo Rectangle que tem valores e posições iguais dos elementos das classes. Agora será preciso criar um método que vai identificar que a bolinha e a raquete está colidindo ou não e que esse método tem que alterar a posição da bolinha, os dois métodos serão implementados na classe Ball.

Para isso coloquei um if para verificar se a colisão é verdadeira, se for a aceleração de y da bolinha vai ser negativo. O método de identificar colisão identifica se é verdadeiro ou falso. Dentro da classe game tem um método de gameover que será acionado caso a bolinha passe da raquete e atinja o fundo da janela, isso informa que o jogo acabou e aparecerá um botão de OK e ao clicar sairá do jogo. Ao concluir esse processo o programa vai estar funcionando, mas precisa de mais alguns passos para se tornar realmente um jogo.


-Tutorial 07-

Para se transformar em um jogo completo implementei mais duas coisas, um sistema para complicar o jogo quanto mais jogar e outro para ter som no jogo.Então para se ter o som no jogo precisei primeiro dos áudios, usando um pacote Applet pude usar as classes Applet e Audioclip, com elas consegui armazenar o áudio dentro de uma variável Audioclip e usar métodos dela para tocar ou loopar o áudio, para cada um deles criei uma variável e com esses métodos é possível mexer com os áudios, nesse caso usei a classe Url do pacote Net para ter uma variável na qual armazena o caminho de um arquivo, para instanciar essa variável usei um comando SoundTest.class.getResource que vai suar o diretório do arquivo da classe com o nome que coloquei.

-Tutorial 08-

Depois do passo anterior agora vou introduzir os sons no jogo, mas agora criei uma classe Audio para se armazenar todos os áudios. Cada audio vai tocar em um momento específico do jogo, Ball vai tocar quando a bola bater, gameover quando a bola encostar no fundo da tela, e back vai tocar durante todo o jogo, primeiro alteração é tocar o back várias vezes, para isso usei o método de loop dentro do construtor da classe Game. Para o som da Bola precisei mexer apenas em quando ela se move.
Sempre que a bolinha atualizar vai ser criada uma variável que informa que a bola trocou de direção ou não, a variável vai determinar se o som deve tocar ou não. O gameover eu implementei um método gameover da classe Game, e nesse método chamei outro para o loop back tocar o áudio de gameover.

-Tutorial 09-

Nesse passo vou deixar o jogo mais difícil quanto mais o jogador jogar, a raquete vai se movendo mais rápido assim como a bolinha. Na classe game, dentro dela criei uma variável de interagir (speed), ela que vai representar a pontuação do jogador e vou alterar a velocidade da bolinha e da raquete, ela começa com 1 para mostrar a pontuação do jogo. Para usar essa variável preciso apenas usar no lugar de 1 e -1 que estava alterando as coordenadas da bolinha e da raquete, depois precisei fazer a speed aumentar ao bater com a raquete e nisso eu usei o ++ para colocar 1 no valor dessa variável.

Para mostrar a pontuação no método paint da Game usei o drawstring que possibilita desenhar um texto na tela, dentro da drawString usei  o String.ValueOf para definir a posição x e y do texto. 

Agora na tela é mostrada a quantidade de pontos que o jogador consegue fazer.


-Tutorial 10-

No ultimo passo aprendi a usar um compilador  do Java é possivel conseguir um codig bytecode e pode-se executar esse codigo atravez do Java Virtual Machine. Sobre a compilação do .jar e .zip. Com isso salvei o arquivo do jogo, compactei em .jar e enviei o jogo pronto.

Comentários

  1. Oi Thays, se atente à maneira como o enunciado pede: um post para cada parte. Isso tem um por quê!!! Além disso, não sei de onde tiraram que só bastava entregar o JAR quando eu pedi no enunciado para compactarem a pasta do projeto e entregarem a pasta compactada, ou seja, os fontes.

    ResponderExcluir
  2. O ultimo trabalho era o mais completo e que exigia um pouco mais da autoria de vocês. Não foi interessante vocês desistirem de entregar o resultado. Afinal, eu praticamente resolvi o trabalho na aula de 01/07. Ficou faltando pouca coisa.

    ResponderExcluir

Postar um comentário