Ayuda con arreglo de objetos
Buenas a todos, soy programador principiante y tengo un problema dentro de un juego que estoy escribiendo.
El juego al principio es muy simple (una nave, un alien y disparos) pero despues intenté implementarle arreglos
de objetos para que pudieran aparecer varios aliens al mismo tiempo y pues al momento de querer crear
un nuevo objeto de tipo Laser(disparo de alien) me indica que el objeto no exite al momento de crearlo, no entiendo la redundancia del problema, aquí dejo el código por si alguien le hecha un vistazo, de antemano gracias.
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
import javax.swing.event.*;
public class GUI extends JFrame implements ActionListener, MouseListener, MouseMotionListener {
private JPanel panel;
private Timer tiempo;
private JButton botón = new JButton("Nuevo Juego");
private int nAlien = 0;
private Alien[] alien = new Alien[9];
private Nave nave;
private int nLaser = 0;
private Laser[] laser = new Laser[9];
private Bomba bomba;
private boolean juego = false, disparoNave = false;
private Random random;
public final int ANCHO = 500, ALTO = 400;
private ImageIcon fondo;
public GUI(){
}
public static void main (String[] args){
GUI marco = new GUI();
marco.setSize(550, 500);
marco.createGUI();
marco.setVisible(true);
}
public void createGUI() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container ventana = getContentPane();
ventana.setLayout(new FlowLayout());
panel = new JPanel();
panel.setPreferredSize(new Dimension(ANCHO, ALTO));
panel.setBackground(Color.BLACK);
ventana.add(panel);
tiempo = new Timer(10, this);
botón.addActionListener(this);
ventana.add(botón);
random = new Random();
}
public void actionPerformed(ActionEvent e) {
Graphics papel = panel.getGraphics();
Object origen = e.getSource();
if(origen == botón && juego == false){
nuevoJuego();
}
if(origen == tiempo){
gameLoop();
}
}
private void gameLoop() {
actualiza();
redibujar();
comprobarChoques();
}
private void comprobarChoques() {
ciclosAliens(3);
ciclosLaser(3);
}
private boolean coliosiona(Sprite uno, Sprite dos) {
if(uno == null || dos == null){
return false;
}
if(uno.getX() > dos.getX() && uno.getY() < (dos.getY() + dos.getAlto())
&& (uno.getX() + uno.getAncho()) < (dos.getX()+dos.getAncho())
&& (uno.getY() + uno.getAncho()) > (dos.getY())){
return true;
}
else{
return false;
}
}
private void juegoTerminado(String string) {
if(bomba != null){
bomba = null;
}
if(laser != null){
laser = null;
}
if(string.equals("nave")){
mensajeFinal("ganado");
}
if(string.equals("alien")){
mensajeFinal("perdido");
}
}
private void mensajeFinal(String string) {
Graphics papel = panel.getGraphics();
ImageIcon ganar = new ImageIcon("src/Ganado.png");
ImageIcon perder = new ImageIcon("src/Perdido.png");
nAlien = nAlien + 1;
nLaser = nLaser + 1;
if(string.equals("ganado")){
alien[nAlien] = new Alien();
laser[nLaser] = null;
}
if(string.equals("perdido")){
juego = false;
botón.setEnabled(true);
nave = null;
alien = null;
perder.paintIcon(this, papel, 0, 0);
tiempo.stop();
}
}
private void actualiza() {
ciclosAliens(0);
ciclosLaser(0);
ciclosLaser(1);
if(bomba != null){
bomba.mover();
}
}
private void redibujar() {
Graphics papel = panel.getGraphics();
fondo = new ImageIcon("src/FONDO.png");
fondo.paintIcon(this, papel, 0, 0);
ciclosAliens(1);
nave.mostrar(panel);
ciclosLaser(2);
if(bomba != null){
bomba.disparo(panel);
}
}
private void nuevoJuego() {
botón.setEnabled(false);
tiempo.start();
juego = true;
alien[0] = new Alien();
nave = new Nave();
panel.addMouseMotionListener(this);
panel.addMouseListener(this);
}
private void ciclosAliens(int clave){
int contador = 0;
if (clave == 0){
while(contador <= nAlien){
alien[contador].mover();
contador++;
}
}
if (clave == 1){
while(contador <= nAlien){
alien[contador].mostrar(panel);
contador++;
}
}
if (clave == 2){
while(contador <= nAlien){
alien[contador].mostrar(panel);
contador++;
}
}
if(clave == 3){
while(contador <= nAlien){
if(bomba != null){
if(bomba.getY() < 0){
bomba = null;
}
if (coliosiona(bomba, alien[contador])){
juegoTerminado("nave");
}
}
}
}
}
private void ciclosLaser(int clave){
if(clave == 0){
int contador = 0;
while (nLaser <= contador){
if(laser[contador] == null){
laser[contador] = new Laser(alien[contador].getX()+ (alien[contador].getAncho()/2));
}
contador++;
}
}
if(clave == 1){
int contador = 0;
while(nLaser <= contador){
laser[contador].mover();
contador++;
}
}
if(clave == 2){
int contador = 0;
while (nLaser <= contador){
if(laser[contador] != null){
laser[contador].dibujar(panel);
}
}
}
if(clave == 3){
int contador = 0;
while (nLaser <= contador)
if(laser[contador] != null){
if(laser[contador].getY() > 400){
laser[contador] = null;
}
if (coliosiona(laser[contador], nave)){
juegoTerminado("alien");
}
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
if(juego){
nave.mover(e.getX());
}
}
@Override
public void mouseClicked(MouseEvent e) {
if(juego){
if(bomba == null){
bomba = new Bomba(nave.getX()+25);
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
- Inicie sesión o regístrese para enviar comentarios
hola sería bueno que pusieras
hola sería bueno que pusieras tu código entre las etiquetas < code > y < / code > sin espacios para que se formatee el código
Gracias en breve lo arreglo
Gracias en breve lo arreglo
Donde aparece el error? Hay
Donde aparece el error? Hay algun stacktrace?
El error es un Java Exception
El error es un Java Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
Lo que pasa es que marca error en este método:
if(clave == 0){
int contador = 0;
while (nLaser <= contador){
if(laser[contador] == null){
laser[contador] = new Laser(alien[contador].getX()+ (alien[contador].getAncho()/2));
}
}
}
}
clave es para decirle al método que cree un nuevo Láser y pues dentro del ciclo indico que quiero que evalúe a laser[0] = null y si lo es que cree el objeto laser[0] = new Laser(cordenada x). El problema está en esta línea pues me marca la excepción de que el objeto no existe y pues es obvio que no existe porque lo estoy creando.
Gracias de antemano