Apostia de Jogos com Java

290 views
217 views

Published on

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.

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
290
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Apostia de Jogos com Java

  1. 1. Jogos de Nave Marco Antonio Arquiteto de Software Fevereiro/2009
  2. 2. EfeitoSonoro package 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; } }
  3. 3. UtilSom package 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(); } }
  4. 4. 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()); } }
  5. 5. Nave package 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;
  6. 6. 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; }
  7. 7. 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; } }
  8. 8. GerenteDaNave package 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); }
  9. 9. 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(); }
  10. 10. 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); }
  11. 11. GerenteDaNave public int getX() { return nave.getPosicaoX(); } public Image getImagem() { return nave.getIcone(); } }
  12. 12. SpaceInvaders package 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;
  13. 13. 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(); }
  14. 14. 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); } }); }
  15. 15. 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) { } } }
  16. 16. SpaceInvaders private void movimentoEsquerda() { if (!gerenteDaNave.confereColisaoEsquerda(0)) gerenteDaNave.caminhaEsquerda(); } private void movimentoDireita() { if (!gerenteDaNave.confereColisaoDireita(500)) gerenteDaNave.caminhaDireita(); }
  17. 17. 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) { } }
  18. 18. SpaceInvaders public static void main(String[] args) { new SpaceInvaders(); } }

×