1
I got the following:
public class Bullet {
public enum Direcao { UP,DOWN,LEFT,RIGHT };
// Posição do tiro em pixels.
private int x,y;
// Direção do tiro.
private Direcao direção;
// Este tiro está ativo?
private boolean estáAtivo;
// Tamanho do tiro em pixels.
private int iw,ih;
// Imagem do tiro.
private Image icon;
// área do painel do jogo (para controlar movimento).
private Dimension area;
// Construtor, inicializa atributos, cria a bala.
public Bullet(Dimension a,Direcao dir, int x,int y){
area = a;
icon = new ImageIcon(getClass().getResource("/gamejava.Sprites/bullet.png")).getImage();
iw = icon.getWidth(null);
ih = icon.getHeight(null);
// x e y passados direto como argumentos
this.x = x;
this.y = y;
direção = dir;
estáAtivo = true;
}
// Método que movimenta a bala.
public void move(){
if (!estáAtivo) return;
switch(direção){
case LEFT:
{
x -= 3; if (x < 0) estáAtivo = false; break;
}
case RIGHT:
{
x += 3; if (x > area.width) estáAtivo = false; break;
}
case UP:
{
y -= 3; if (y < 0) estáAtivo = false; break;
}
case DOWN:
{
y += 3; if (y > area.height-100) estáAtivo = false; break;
}
}
}
and also:
public class Bomb {
public enum Direcao { UP,DOWN,LEFT,RIGHT };
// Posição da bomba em pixels.
private int x,y;
// Esta bomba está ativa?
private boolean estáAtivo;
// Tamanho da bomba em pixels.
private int iw,ih;
// Imagem da bomba.
private Image icon;
// área do painel do jogo (para controlar movimento).
private Dimension area;
// Construtor, inicializa atributos, cria a bomba.
public Bomb(Dimension a,int x,int y){
area = a;
icon = new ImageIcon(getClass().getResource("/gamejava.Sprites/bomb.png")).getImage();
iw = icon.getWidth(null);
ih = icon.getHeight(null);
// x e y passadas diretamente como parâmetros
this.x = x;
this.y = y;
estáAtivo = true;
}
// Método que movimenta o shooter, verificando se está na área válida.
public void move(Direcao dir){
if (dir == null) return;
switch(dir){
case LEFT:
{ x--;
if (x < iw/2) x = iw/2;
break; }
case RIGHT:
{ x++; if (x > area.width-iw/2) x = area.width-iw/2; break; }
case UP:
{ y--; if (y < area.height-100+ih/2) y = area.height-100+ih/2; break; }
case DOWN:
{ y++; if (y > area.height-ih/2) y = area.height-ih/2; break; }
}
}
// Método que movimenta a bomba.
public void move(){
if (!estáAtivo) return;
y = y-3;
if (y <= 0) estáAtivo = false;
}
// Método que desenha a bomba em um contexto gráfico.
public void draw(Graphics g){
if (estáAtivo) g.drawImage(icon,x-iw/2,y-ih/2,null);
}
// Precisamos saber se esta bomba está ativa!
public boolean estáAtivo() {
return estáAtivo;
}
// Verificamos se a bomba está perto de um Invader
public boolean acertouEm(Invader i){
int ox = i.getX(); int oy = i.getY();
return (Math.sqrt((x-ox)*(x-ox)+(y-oy)*(y-oy)) < 25);
}
// Explodimos a bomba (retornando bullets).
public ArrayList<Bullet> explode(){
ArrayList<Bullet> novasBalas = new ArrayList<Bullet>(4);
novasBalas.add(new Bullet(area, Direcao.LEFT, x, y));
novasBalas.add(new Bullet(area, Direcao.RIGHT, x, y));
novasBalas.add(new Bullet(area, Direcao.UP, x, y));
novasBalas.add(new Bullet(area, Direcao.DOWN, x, y));
estáAtivo = false;
return novasBalas;
}
}
Two separate classes, Bullet
and Bomb
. In the Bomb class, the explode method is showing the following error in my Netbeans:
How do I pass that parameter of Direcao
to the other class? Ali says it is incompatible.
what happens is that the Enum Direction of the Bullet class and the Bomb class are although similar, different due to the class, in terms of sole responsibility, the ideal would be for you to do this Enum in a separate class
– Lucas Miranda
I’ll test it! I didn’t know about Enum
– Giovane Machado
I managed, thank you very much, the solution was to create a class for same Direction.
– Giovane Machado