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.*;
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
                       
                }

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Shadonwk

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:

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));
                                                                 }
                                             }
                         }
}

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