JAVA飞机大战小游戏求解答

JAVA小白的大作业写了个飞机大战小游戏,现在想加一个按下键盘上某个键可以重新开始游戏的功能,求大佬解答。
下面是我游戏窗口实现的代码。
package Game;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Date;

//建立游戏的主窗口

public class GameFrame extends Frame{ //GameFrame继承了Frame
private volatile boolean flag = true; //volatile指线程之间可以共享变量
Image plane = GameUtil.getImage("image/plane.png");
Image bg = GameUtil.getImage("image/bg1.jpg");

Plane p = new Plane(plane,350,400,60,60);
Shell[] shells = new Shell[30];  //30为炮弹个数  

Date startTime = new Date();
Date endTime;
int period;

public void paint(Graphics g) {    //变量g相当于一支画笔
    super.paint(g);   //调用父类的paint
    g.drawImage(bg, 0, 0, 700, 500, null);
    p.drawSelf(g);     //画飞机

    //碰撞检测
    for(int i = 0; i < shells.length; i++) {
        shells[i].draw(g); 
        boolean peng = shells[i].getRect().intersects(p.getRect());
        if(peng) {
            p.live = false;
            Color c = g.getColor();
            g.setColor(Color.RED);
            Font f = new Font("黑体",Font.PLAIN,30);
            g.setFont(f);
            g.drawString("GAME OVER!",320,250);
            g.setColor(c);
            endTime = new Date();
            period =(int)((endTime.getTime()-startTime.getTime())/1000);
            flag = false;
        }
        if(!p.live) {
        Color a = g.getColor();
        g.setColor(Color.WHITE);
        Font f1 = new Font("黑体",Font.PLAIN,15);
        g.setFont(f1);
        g.drawString("持续时间:"+ period + "秒",(int)p.x, (int)p.y);
        g.setColor(a);
        }
    }
}
//反复重画窗口  线程
class PaintThread extends Thread{  //内部类
    public void run() {
        while(flag) {
            repaint();  //重画
            try {
                Thread.sleep(50);  //50ms
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

//定义键盘监听的内部类
class KeyMonitor extends KeyAdapter {

    @Override
    public void keyPressed(KeyEvent e) {
        super.keyPressed(e);
        p.addDirection(e);
    }

    @Override
    public void keyReleased(KeyEvent e) {
        super.keyReleased(e);
        p.minusDirection(e);
    }

}

public void launchFrame(){          //初始化窗口
    this.setTitle("飞机大作战");   //窗口的标题
    this.setVisible(true);     // 窗口默认不可见,此步是让其可见。
    this.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);  //设置窗口大小
    this.setLocation(300,100);   //设置窗口位置
    this.addWindowListener(new WindowAdapter() {  //匿名内部类,让关闭窗口时程序也关闭

        public void windowClosing(WindowEvent e) {
            System.exit(0);         // 0表示正常结束
        }
    });
new PaintThread().start();    //启动重画窗口的线程
addKeyListener(new KeyMonitor());  //给窗口增加键盘的监听


//初始化炮弹
for(int i = 0; i < shells.length; i++) {
    shells[i] = new Shell();
    }

}

//添加双缓冲技术,让游戏窗口不闪
private Image offScreenImage = null;
public void update(Graphics g) {
    if(offScreenImage == null)
        offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
    Graphics goff = offScreenImage.getGraphics();
    paint(goff);
    g.drawImage(offScreenImage, 0, 0, null);
}


public static void main(String[] args) {
    GameFrame f = new GameFrame();   //创建窗口对象
    f.launchFrame();    //调用launchFrame方法
}

}


求大佬解答。

给你提供一点思路,供参考:
游戏初始化时,界面上的东西实际都是一个个对象new出来的,重新开始游戏,无非就是想办法把界面上的元素关闭掉、
或者删掉、清空等等,然后重新初始化游戏界面。
awt的一些对象应该都有设置不显示的方法,或者你也可以试试把当前frame关掉,然后重新初始化一个界面。