Adaptando código de jogo simples

Peguei um código simples no zetcode com um joguinho em java com uma nave, disparos e aliens. Estou tentando adaptá-lo para virar um jogo de “waves”, onde uma vez que todos os aliens são destruídos uma nova onda de inimigos surge. Estou no meu Estágio agora e sem nenhum editor de código, então começei a modificá-lo no bloco de notas mesmo. Poderiam me ajudar com o funcionamento atual após minhas modificações? Tenho dúvidas quanto ao while que coloquei quando a nave perde uma vida, não sei se é o jeito mais prático de respawnar os inimigos.

A classe que estou passando é a principal, as outras do projeto servem apenas para puxar os sprites ou determinar os movimentos de cada objeto, além da que determina o tamanho da janela.
Onde existem comentários foi onde modifiquei algo.

package com.zetcode;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Toolkit;
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.JPanel;
import javax.swing.Timer;

public class Board extends JPanel implements ActionListener {

    private Timer timer;
    private SpaceShip spaceship;
    private List<Alien> aliens;
    private boolean ingame;
    private final int ICRAFT_X = 40;
    private final int ICRAFT_Y = 60;
    private final int B_WIDTH = 400;
    private final int B_HEIGHT = 300;
    private final int DELAY = 15;

    //ALTEREI ALGUNS VALORES AQUI
    private final int[][] pos = {
        {690, 29}, {800, 59}, {890, 89},
        {780, 109}, {580, 139}, {680, 239},
        {790, 259}, {760, 50}, {790, 150},
        {980, 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}
    };

    public Board() {

        initBoard();
    }

    private void initBoard() {

        addKeyListener(new TAdapter());
        setFocusable(true);
        setBackground(Color.BLACK);
        setDoubleBuffered(true);
        ingame = true;
	//CRIEI ALGUMAS VARIÁVEIS AQUI
        private int VIDAS = 3;
        private int pontos = 0;
        private int wave = 1;

        setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));

        spaceship = new SpaceShip(ICRAFT_X, ICRAFT_Y);

        initAliens();

        timer = new Timer(DELAY, this);
        timer.start();
    }

    public void initAliens() {
        
        aliens = new ArrayList<>();

        for (int[] p : pos) {
            aliens.add(new Alien(p[0], p[1]));
        }
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        if (ingame) {
	    //MANTÉM INGAME = TRUE ENQUANTO AINDA TIVER VIDAS
	    while (VIDAS > 0) {
            drawObjects(g);
	    }
        } else {

            drawGameOver(g);
        }

        Toolkit.getDefaultToolkit().sync();
    }

    private void drawObjects(Graphics g) {

        if (spaceship.isVisible()) {
            g.drawImage(spaceship.getImage(), spaceship.getX(), spaceship.getY(),
                    this);
        }

        List<Missile> ms = spaceship.getMissiles();

        for (Missile missile : ms) {
            if (missile.isVisible()) {
                g.drawImage(missile.getImage(), missile.getX(), 
                        missile.getY(), this);
            }
        }

        for (Alien alien : aliens) {
            if (alien.isVisible()) {
                g.drawImage(alien.getImage(), alien.getX(), alien.getY(), this);
            }
        }

        g.setColor(Color.WHITE);
        g.drawString("Aliens left: " + aliens.size(), 5, 15);
	//ADICIONADO CONTAGEM DE VIDAS E DE PONTOS
	g.drawString("Vidas restantes: " + VIDAS, 10, 20);
	g.drawString("Score: " + pontos, 15, 25);
    }

    private void drawGameOver(Graphics g) {

        String msg = "Game Over";
        Font small = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics fm = getFontMetrics(small);

        g.setColor(Color.white);
        g.setFont(small);
        g.drawString(msg, (B_WIDTH - fm.stringWidth(msg)) / 2,
                B_HEIGHT / 2);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        inGame();

        updateShip();
        updateMissiles();
        updateAliens();

        checkCollisions();

        repaint();
    }

    private void inGame() {

        if (!ingame) {
            timer.stop();
        }
    }

    private void updateShip() {

        if (spaceship.isVisible()) {
            
            spaceship.move();
        }
    }

    private void updateMissiles() {

        List<Missile> ms = spaceship.getMissiles();

        for (int i = 0; i < ms.size(); i++) {

            Missile m = ms.get(i);

            if (m.isVisible()) {
                m.move();
            } else {
                ms.remove(i);
            }
        }
    }

    private void updateAliens() {
	//MODIFICADO PARA SPAWNAR MAIS ALIENS
        if (aliens.isEmpty() && VIDAS == 0) {

            ingame = false;
            return;
        }
	else if (aliens.isEmpty && VIDAS > 0){

	    wave++;
	    drawObjects(g);
	}

        for (int i = 0; i < aliens.size(); i++) {

            Alien a = aliens.get(i);
            
            if (a.isVisible()) {
                a.move();
            } else {
                aliens.remove(i);
            }
        }
    }

    public void checkCollisions() {

        Rectangle r3 = spaceship.getBounds();

        for (Alien alien : aliens) {
            
            Rectangle r2 = alien.getBounds();
	    //MODIFICADO PARA REDUZIR A QUANTIDADE DE VIDAS EM CASO DE COLISAO
            if (r3.intersects(r2) && VIDAS > 0) {
                
                spaceship.setVisible(false);
                alien.setVisible(false);
                VIDAS--;
            }
	    else{
                spaceship.setVisible(false);
                alien.setVisible(false);
                ingame = false;
            }
        }

        List<Missile> ms = spaceship.getMissiles();

        for (Missile m : ms) {

            Rectangle r1 = m.getBounds();

            for (Alien alien : aliens) {

                Rectangle r2 = alien.getBounds();
		//MODIFICADO PARA AUMENTAR A QUANTIDADE DE PONTOS
                if (r1.intersects(r2)) {
                    
                    m.setVisible(false);
                    alien.setVisible(false);
		    pontos += 75*wave;
            }
        }
    }

    private class TAdapter extends KeyAdapter {

        @Override
        public void keyReleased(KeyEvent e) {
            spaceship.keyReleased(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            spaceship.keyPressed(e);
        }
    }
}