飞机大战小游戏

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值