Constant.java
package cn.tet.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Date;
import javax.swing.JFrame;
/**
* 飞机游戏主窗口
* @author 刘庆东
* 版本0.1
*/
//让本类继承窗口方法类 导入包名 添加窗口方法
public class MyGameFrame extends Frame{
Image planeImg=GameUtil.getImage("images/plane.png"); //加载图片对象 下面要将图片画进窗口
Image bg=GameUtil.getImage("images/bg.jpg"); //加载图片对象 下面要将图片画进窗口
//窗口的绘制
//使飞机图片动起来 先给定飞机的初始值 然后改变飞机的数值进行改变
//创建飞机对象 已经将飞机对象进行了封装,创建对象进行调用
Plane plane=new Plane(planeImg,250,250);
//创建炮弹对象
//创建数组 生成多个炮弹
Shell[] shells=new Shell[30];
//创建爱你爆炸的方法 声明爆炸对象
Explode bao;
//增加起始时间和结束时间 显示玩家游戏
Date startTime=new Date(); //开始时间
Date endTime; //结束时间
int period; //游戏持续的时间
@Override
public void paint(Graphics g) {
//其中的绘制方法都是属于确定起点和终点进行绘制
//改变颜色 注意:因为g方法中本身带有颜色,要将颜色进行保存,然后绘制颜色,最后要将颜色修改为原来的颜色
Color c=g.getColor();
g.drawImage(bg, 0, 0, null); //将图片画进窗口 游戏背景图片 注意游戏的覆盖顺序 从底层往上覆盖
plane.drawSelf(g); //用创建的封装方法plane进行画飞机 用画笔g进行传递
//将炮弹画入窗口
//进行画很多飞机的方法调用实现
//画出所有的炮弹
for(int i=0;i<shells.length;i++) {
shells[i].draw(g);
//飞机与小球的碰撞检测
boolean peng=shells[i].getRect().intersects(plane.getRect());
if(peng) {
System.out.println("碰撞了!!!");
//如果碰撞飞机死掉 飞机消失
if(peng) {
plane.live=false;
//创建爆的方法 参数为飞机的坐标 遇到飞机爆炸
if(bao==null) {
//等于空只碰撞一次 只生成一个对象
bao =new Explode(plane.x,plane.y);
endTime=new Date(); //飞机死亡对象创建
period=(int)((endTime.getTime()-startTime.getTime())/1000);
}
//将爆炸方法画出来
bao.draw(g);
}
}
//计算时间给出提示
if(!plane.live) {
//画出 游戏的时间
//设置打印的颜色
Font f=new Font("宋体",Font.BOLD,50);
g.setFont(f);
g.setColor(Color.RED);
g.drawString("时间:"+period+"秒", (int)plane.x, (int)plane.y);
}
}
g.setColor(c);
}
//线程 程序要有多个线程进行配合
//定义内部类 内部类好处 和直接使用外部类的方法 Thread为线程的意思 继承此方法
//此方法进行返回重画窗口
class PaintThread extends Thread{
@Override
public void run() {
while(true) {
repaint(); //此方法为 JFrame中的方法 重画
//一秒钟进行放映动画40次 Thread.sleep(40); 进行异常捕获
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //程序暂停一下
}
}
}
//键盘监听机制 定义内部类方法实现
//S+A+D快捷键 实现om方法
class KeyMonitor extends KeyAdapter{
//按上键 实现功能
@Override
public