View
170
Download
4
Category
Tags:
Preview:
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.
Citation preview
Jogos de NaveMarco AntonioArquiteto de SoftwareFevereiro/2009
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;
}
}
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();
}
}
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());
}
}
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;
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;
}
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;
}
}
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);
}
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();
}
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);
}
GerenteDaNave public int getX() {
return nave.getPosicaoX();
}
public Image getImagem() {
return nave.getIcone();
}
}
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;
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();
}
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);
}
});
}
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) {
}
}
}
SpaceInvaders private void movimentoEsquerda() {
if (!gerenteDaNave.confereColisaoEsquerda(0))
gerenteDaNave.caminhaEsquerda();
}
private void movimentoDireita() {
if (!gerenteDaNave.confereColisaoDireita(500))
gerenteDaNave.caminhaDireita();
}
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) {
}
}
SpaceInvaders public static void main(String[] args) {
new SpaceInvaders();
}
}
Recommended