[b]Olá pessoal, sou estudante na area de T.I no Senai Londrina e fiz um joguinho estilo aqueles de navinha com asteroides e tal!
Estou tentando deixar ele o mais bacana possivel e adicionei algúns métodos para adicionar sons ao Jogo, só que o lance é …
O compilador diz que o código está correto e tal mais creio que coloquei algo no lugar errado e gostaria de uma ajuda de vc’s, por favor!
Coloquei esses métodos no final da Classe Fase (la no finalzinho), não sei se é o lugar certo, preciso de ajuda, qualquer tipo de ajuda…
Segue-se o código: (Tais métodos em Negrito no final dos códigos)
[/b]
package aplicativojavajogo;
import java.io.;
import java.applet.;
import java.net.MalformedURLException;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Fase extends JPanel implements ActionListener {
/// "extends JPanel << >>> pra que ela possa ser reconhecida com uma piuntura a ser adicionada no conteiner de janelas
private AudioClip musica; //musica pra tocar
private String caminho; //caminho da musica
private static final long serialVersionUID = 1L;
private Image fundo;// "private" pois a imagem será só para ela, toda vez que for private serpa PRIVADO apenas para aquela class eu objeto
private Nave nave; // personagem da tela
private Timer timer; // MUITO IMPORTANTE <<>>> é o TIMER que será responsavel em atualizar o que está sendo "PINTADO" na tela, ou seja, ele atualizara apintura a cada movimento de qualquer objeto
private boolean emJogo;
private boolean pausado = false;
private List<Inimigo> inimigos;
private int[][] coordenadas = {{2380, 29}, {2600, 59}, {1380, 89},
{2111, 109}, {4000, 139}, {880, 239}, {790, 259},
{920, 200}, {3120, 259}, {660, 50}, {540, 90}, {810, 220},
{860, 20}, {740, 180}, {820, 128}, {490, 170}, {700, 30},
{920, 300}, {856, 328}, {556, 320}, {570, 200}, {2220, 500},
{3000, 589}, {3150, 689}, {2894, 600}, {3457, 614}, {2119, 587},
{1459, 542},{954, 423}, {1000, 509}, {478, 647}, {1753, 357},
{2590, 325}, {2470, 300},{1658,441},{1887,549},{3000,295},{1245,321}};// Coordenadas em PIXELS de onde mieus inimigos ficaram em ALTURA E LARGURA
public Fase() {
setFocusable(true); // Para colocar a tela em foco
setDoubleBuffered(true); // Este mpetoddo vai sempre deixar a proxima tela armazenada para evitar BUGS futuros
addKeyListener(new TecladoAdapter()); //Método para receber o teclado na "FASE"
ImageIcon referencia = new ImageIcon("C:\\Documents and Settings\\Matheus\\Meus documentos\\AplicativoJavaJogo\\src\\res\\Jogo_Colorido.jpg");
fundo = referencia.getImage();
nave = new Nave();
emJogo = true;
inicializaInimigos();
timer = new Timer(5, this); // Quanto maior for o numero (5) mais devagar a pintura se´ra atualizada, ou seja, mais lenta ficara o jogo!
timer.start();// Método que inicia o nosso Timer
// Aqui vc defini o tempo que será atualizado a pintuira em Milisegundos e da onde que vai vir essa atualização, eu usei o "this" que qeur dizer que a atualização virá da propia classe ou metodo que estiver desenvolvendo
// Isso depende do método "repaint" olhar abaixo no ActionPerformed
}
public void inicializaInimigos() {
inimigos = new ArrayList<Inimigo>();
for (int i = 0; i < coordenadas.length; i++) {
inimigos.add(new Inimigo(coordenadas[i][0], coordenadas[i][1]));
}
}
public void paint(Graphics g) {
// Aqui eu defino o que eu quero que PINTE na tela
Graphics2D graficos = (Graphics2D) g; /// Para pintar Graficos 2D na tela
graficos.drawImage(fundo, 0, 0,null);// Aqui eu estou indicando posicoes e modos de como será pintado o fundo na janela
if (emJogo) {
graficos.drawImage(nave.getImagem(), nave.getX(), nave.getY(), this);
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel m = (Missel) misseis.get(i);
graficos.drawImage(m.getImage(), m.getx(), m.gety(), this);
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
graficos.drawImage(in.getImage(), in.getX(), in.getY(), this);
}
graficos.setColor(Color.WHITE);
graficos.drawString("INIMIGOS: " + inimigos.size(), 5, 15);
if (inimigos.size() == 1) {
}
} else {
ImageIcon fimJogo = new ImageIcon("C:\\Documents and Settings\\Matheus\\Meus documentos\\AplicativoJavaJogo\\src\\res\\Fim de jogo.jpg");
graficos.drawImage(fimJogo.getImage(), 0, 0, null);
}
g.dispose(); // Este método é o que limpa a imagem para a proxima pintura, exemplo a movimentação da nave tem que ser prepintada a otodo momento
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (inimigos.size() == 0) {
/*Aqui deveria ficar o camando para fechar a fase 1 e iniciar a segunda*/
emJogo = false;
}
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel m = (Missel) misseis.get(i);
if (m.isVísivel()) {
m.mexer();
} else {
misseis.remove(i);
}
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
if (in.isVísivel()) {
in.mexer();
} else {
inimigos.remove(i);
}
}
nave.mexer();
checarColisoes();
repaint(); // Ele será responsavel pela atualização das minhas imagens na interface interagindo de acordo com o "TIMER" método que está acima
}
public void checarColisoes() {
Rectangle formaNave = nave.getBounds();
Rectangle formaInimigo;
Rectangle formaMissel;
for (int i = 0; i < inimigos.size(); i++) {
Inimigo tempInimigo = inimigos.get(i);
formaInimigo = tempInimigo.getBounds();
if (formaNave.intersects(formaInimigo)) {
nave.setVisivel(false);
tempInimigo.setVísivel(false);
emJogo = false;
}
}
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel tempMissel = misseis.get(i);
formaMissel = tempMissel.getBounds();
for (int j = 0; j < inimigos.size(); j++) {
Inimigo tempInimigo = inimigos.get(j);
formaInimigo = tempInimigo.getBounds();
if (formaMissel.intersects(formaInimigo)) {
tempInimigo.setVísivel(false);
tempMissel.setVísivel(false);
}
}
}
}
private class TecladoAdapter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_P) {
pausado = !pausado;
if (pausado) {
timer.stop();
} else {
timer.start();
}
}
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
emJogo = true;
nave = new Nave();
inicializaInimigos();
}
nave.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
nave.keyReleased(e);
}
}
[b]public class Musica extends Thread {
public Musica(String base) {
caminho = base; //atribui caminho
}
public void run() {
try {
musica = Applet.newAudioClip(new File("C:\\Documents and Settings\\Matheus\\Meus documentos\\AplicativoJavaJogo\\src\\Music\\JPC - Céu e Mar - YouTube.wav").toURL()); //instancia o obj e...
musica.loop(); // .... toca sem parar
}
catch (MalformedURLException e) {
System.out.println("Erro. Verifique o diretorio de sons"); //erro no arquivo
}
}
public AudioClip getMusica() { //retorna a musica
return musica;
}
[/b]
}
}