Apostia de Jogos com Java

18
Jogos de Nave Marco Antonio Arquiteto de Software Fevereiro/2009

description

Como criar um jogo de nave, estilo Space Invaders, usando Java. Utiliza Swing para criar as telas. A nave tem as funções para deslocamento e colisão.

Transcript of Apostia de Jogos com Java

Page 1: Apostia de Jogos com Java

Jogos de NaveMarco AntonioArquiteto de SoftwareFevereiro/2009

Page 2: Apostia de Jogos com Java

EfeitoSonoropackage com.javagames.util;

public enum EfeitoSonoro {

MUSICA_DO_JOGO("audio/musica.wav"), TIRO("audio/tiro.wav"), COLISAO(

"audio/boop2.wav"), GAME_OVER("audio/sound_electric.wav");

private String som;

private EfeitoSonoro(String som) {

this.som = som;

}

public String getSom() {

return som;

}

}

Page 3: Apostia de Jogos com Java

UtilSompackage com.javagames.util;

import java.applet.*;

import java.io.*;

import java.net.*;

import javax.sound.sampled.*;

public class UtilSom {

public void toca(String musica) {

try {

File f = new File(musica);

AudioInputStream audioIn = AudioSystem.getAudioInputStream(f);

Clip clip = AudioSystem.getClip();

clip.open(audioIn);

clip.loop(1);

Thread.sleep(2000);

clip.close();

// clip.stop();

} catch (Exception e) {

e.printStackTrace();

}

}

Page 4: Apostia de Jogos com Java

UtilSom public void tocaApplet(String musica) {

try {

URL url = new URL("file://" + new File(musica).getAbsolutePath());

AudioClip clip = Applet.newAudioClip(url);

clip.play();

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

// new UtilSom().toca(EfeitoSonoro.GAME_OVER.getSom());

// new UtilSom().toca(EfeitoSonoro.COLISAO.getSom());

new UtilSom().tocaApplet(EfeitoSonoro.COLISAO.getSom());

}

}

Page 5: Apostia de Jogos com Java

Navepackage com.javagames.arcade;

import java.awt.Image;

public class Nave {

/**

* Atributo que recebe a referência de um arquivo de imagem,

* para exibir o objeto controlado pelo jogador.

* */

private Image icone;

/**

* Emite ou não beep nas movimentações da nave.

*/

private boolean beep;

/**

* Atributo que define a coordenada X para exibição da imagem.

* */

private int posicaoX;

Page 6: Apostia de Jogos com Java

Nave /**

* Atribui uma imagem ao atributo aImagemEsfera.

* @param objeto Image, geralmente carregado com ToolKit.

*/

public void setIcone(Image icone) {

this.icone = icone;

}

/**Retorna a imagem alocada ao objeto, para exibição na tela.

* @return imagem alocada ao objeto.

*/

public Image getIcone() {

return this.icone;

}

/**Define um valor ao atributo da coordenada X.

* @param inteiro que representa a coordenada X.

*/

public void setPosicaoX(int pX) {

this.posicaoX = pX;

}

Page 7: Apostia de Jogos com Java

Nave /**Retorna o valor para indicação da coordenada a ser exibida

* a imagem.

* @return inteiro que representa a coordenada X.

*/

public int getPosicaoX() {

return this.posicaoX;

}

public void setBeep(boolean beep) {

this.beep = beep;

}

public boolean isBeep() {

return beep;

}

}

Page 8: Apostia de Jogos com Java

GerenteDaNavepackage com.javagames.arcade;

import java.awt.*;

import com.javagames.util.*;

public class GerenteDaNave {

private static final int DESLOCAMENTO = 4;

private Nave nave;

public GerenteDaNave() {

nave = new Nave();

nave.setIcone(UtilImagem.getImagem("spaceship.png"));

nave.setPosicaoX(100);

}

Page 9: Apostia de Jogos com Java

GerenteDaNave public GerenteDaNave(boolean beep) {

this();

nave.setBeep(beep);

}

public boolean confereColisaoEsquerda(int limite) {

if (nave.getPosicaoX() > limite) {

return false;

} else {

return true;

}

}

private void emiteBeep() {

Toolkit.getDefaultToolkit().beep();

}

Page 10: Apostia de Jogos com Java

GerenteDaNave public boolean confereColisaoDireita(int limite) {

if ((nave.getPosicaoX() + nave.getIcone().getWidth(null)) < limite) {

return false;

} else {

return true;

}

}

public void caminhaEsquerda() {

if (nave.isBeep()) {

emiteBeep();

}

nave.setPosicaoX(nave.getPosicaoX() - DESLOCAMENTO);

}

public void caminhaDireita() {

if (nave.isBeep()) {

emiteBeep();

}

nave.setPosicaoX(nave.getPosicaoX() + DESLOCAMENTO);

}

Page 11: Apostia de Jogos com Java

GerenteDaNave public int getX() {

return nave.getPosicaoX();

}

public Image getImagem() {

return nave.getIcone();

}

}

Page 12: Apostia de Jogos com Java

SpaceInvaderspackage com.javagames.arcade;

import java.awt.*;

import java.awt.event.*;

import com.javagames.util.*;

public class SpaceInvaders extends Frame implements Runnable {

private static final int ALTURA_DA_JANELA = 500;

private static final int LARGURA_DA_JANELA = 500;

private Thread animadorDoJogo;

private GerenteDeInteracaoComUsuario gerenteInteracao;

private GerenteDaNave gerenteDaNave;

private Image imagemChao;

private Image imagemFundo;

Page 13: Apostia de Jogos com Java

SpaceInvaders public SpaceInvaders() {

super("Space Invaders");

imagemChao = UtilImagem.getImagem("chao.png");

imagemFundo = UtilImagem.getImagem("fundo.png");

gerenteDaNave = new GerenteDaNave(true);

gerenteInteracao = new GerenteDeInteracaoComUsuario();

animadorDoJogo = new Thread(this);

animadorDoJogo.start();

}

Page 14: Apostia de Jogos com Java

SpaceInvaders public void criaTela() {

setSize(new Dimension(LARGURA_DA_JANELA, ALTURA_DA_JANELA));

setLocation(100, 50);

setFocusable(true);

addKeyListener(gerenteInteracao);

requestFocus();

setResizable(false);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

Page 15: Apostia de Jogos com Java

SpaceInvaders public void paint(Graphics pGph) {

pGph.drawImage(imagemFundo, 0, 0, this);

pGph.drawImage(imagemChao, 0, 460, this);

pGph.drawImage(gerenteDaNave.getImagem(), gerenteDaNave.getX(), 400, this);

}

public void run() {

criaTela();

setVisible(true);

paint(getGraphics());

while (true) {

repaint();

try {

Thread.sleep(20);

} catch (InterruptedException ex) {

}

}

}

Page 16: Apostia de Jogos com Java

SpaceInvaders private void movimentoEsquerda() {

if (!gerenteDaNave.confereColisaoEsquerda(0))

gerenteDaNave.caminhaEsquerda();

}

private void movimentoDireita() {

if (!gerenteDaNave.confereColisaoDireita(500))

gerenteDaNave.caminhaDireita();

}

Page 17: Apostia de Jogos com Java

SpaceInvaders /**Inner class para tratamento dos comandos do teclado,

* para interação com o usuário.

*/

private class GerenteDeInteracaoComUsuario implements KeyListener {

public void keyPressed(KeyEvent eventoTecla) {

if (eventoTecla.getKeyCode() == KeyEvent.VK_LEFT) {

movimentoEsquerda();

}

if (eventoTecla.getKeyCode() == KeyEvent.VK_RIGHT) {

movimentoDireita();

}

}

public void keyReleased(KeyEvent arg0) {

}

public void keyTyped(KeyEvent arg0) {

}

}

Page 18: Apostia de Jogos com Java

SpaceInvaders public static void main(String[] args) {

new SpaceInvaders();

}

}