Olá pessoal, estou com um projeto de um jogo bem simples de principio…
Um jogo de nave simples que atira misseis para destruir o inimigo, toda a
estrutura de colisao ja foi montada e esta funcionando.
o que gostaria de saber é como faço para mudar a imagem do inimigo, para
quando o missel entrar em contato com ele ele nao desaparecer e sim chamar uma
imagem .gif como se ele tivesse sido destruido, e depois sim, sumir do stage.
Se alguem tambem puder me ajudar, eu defini a posição dos inimigos fixas,
gostaria de fazer com que os inimigos viessem aleatoriamente do topo do jogo.
Segue o codigo da colisao e a classe inimigo
Codigo da classe FASE onde esta a estrutura de colisao em “Chegar colisoes”
package jogo;
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 {
private Image fundo;
private Nave nave;
private Timer timer;
private boolean emJogo;
private List<Inimigo> inimigos;
private List<Meteoro> meteoros;
private int[][] coordenadas = {
{ 2380, 29 }, { 2600, 59 }, { 1380, 89 },
{ 780, 109 }, { 580, 139 }, { 880, 239 }, { 790, 259 },
{ 760, 50 }, { 790, 150 }, { 1980, 209 }, { 560, 45 }, { 510, 70 },
{ 930, 159 }, { 590, 80 }, { 530, 60 }, { 940, 59 }, { 990, 30 },
{ 920, 200 }, { 900, 259 }, { 660, 50 }, { 540, 90 }, { 810, 220 },
{ 860, 20 }, { 740, 180 }, { 820, 128 }, { 490, 170 }, { 700, 30 },
{ 920, 300 }, { 856, 328 }, { 456, 320 }
};
public Fase() {
setFocusable(true);
setDoubleBuffered(true);
addKeyListener(new TecladoAdapter());
ImageIcon referencia = new ImageIcon("res\\fundo2.jpg");
fundo = referencia.getImage();
nave = new Nave();
emJogo = true;
inicializaInimigos();
inicializaMeteoros();
timer = new Timer(5, this);
timer.start();
}
public void inicializaMeteoros() {
meteoros = new ArrayList<Meteoro>();
for (int i = 0; i < coordenadas.length; i++) {
meteoros.add(new Meteoro(coordenadas[i][0], coordenadas[i][1]));
}
}
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) {
Graphics2D graficos = (Graphics2D) g;
graficos.drawImage(fundo, 0, 0, this);
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.getImagem(), m.getX(), m.getY(), this);
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
graficos.drawImage(in.getImagem(), in.getX(), in.getY(), this);
}
for (int i = 0; i < meteoros.size(); i++) {
Meteoro met = meteoros.get(i);
graficos.drawImage(met.getImagem(), met.getX(), met.getY(), this);
}
graficos.setColor(Color.WHITE);
graficos.drawString("INIMIGOS:" + inimigos.size(), 5, 15);
} else {
ImageIcon fimJogo = new ImageIcon("res\\gameover.png");
graficos.drawImage(fimJogo.getImage(), 0, 0, null);
}
g.dispose();
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (inimigos.size() == 0) {
emJogo = false;
}
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel m = (Missel) misseis.get(i);
if (m.isVisivel()) {
m.mexer();
} else {
misseis.remove(i);
}
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
if (in.isVisivel()) {
in.mexer();
} else {
inimigos.remove(i);
}
}
nave.mexer();
chegarColisoes();
repaint();
}
public void chegarColisoes() {
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.setVisivel(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.setVisivel(false);
tempMissel.setVisivel(false);
}
}
}
}
private class TecladoAdapter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
emJogo = true;
nave = new Nave();
inicializaInimigos();
}
nave.KeyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
nave.KeyReleased(e);
}
}
}
Aqui o codigo da classe inimigo
package jogo;
import java.awt.Image;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
public class Inimigo {
private Image imagem;
private Image imagem2;
private int x, y;
private int largura, altura;
private boolean isVisivel;
private static final int ALTURA_TELA = 620;
private static final int LARGURA_TELA = 600;
private static final int VELOCIDADE = 1;
private static int contador = 0;
public Inimigo(int x, int y) {
this.x = x;
this.y = y;
ImageIcon referencia;
ImageIcon referencia2;
if (contador++ % 3 == 0) {
referencia = new ImageIcon("res\\dvd.png");
} else {
referencia = new ImageIcon("res\\tv.png");
}
referencia2 = new ImageIcon("res\\Fogo.gif");
imagem = referencia.getImage();
imagem2 = referencia2.getImage();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
this.largura = imagem2.getWidth(null);
this.altura = imagem2.getHeight(null);
isVisivel = true;
}
public void mexer() {
if (this.y < 0) {
this.y += ALTURA_TELA;
} else {
this.y -= VELOCIDADE;
}
if (this.x > 1000) {
this.x -= LARGURA_TELA;
}
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean isVisivel() {
return isVisivel;
}
public void setVisivel(boolean isVisivel) {
this.isVisivel = isVisivel;
}
public Image getImagem() {
return imagem;
}
public Image getImagem2() {
return imagem2;
}
public void setImagem2(Image imagem2) {
this.imagem2 = imagem2;
}
public Rectangle getBounds() {
return new Rectangle(x, y, largura, altura);
}
}