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方法
}
}
求大佬解答。