安徽科技学院 信网学院网络文化节 陈宁波

package 主程序;

import java.awt.Graphics;
import java.awt.Image;

import java.awt.Rectangle;
public class BaseObject {
Image img;
int x, y;
int speed;
int width, height;

public void drawSelf(Graphics g) {
	g.drawImage(img, x, y, null);
}

BaseObject(){
	
}
BaseObject(Image img,int x,int y,int speed,int width,int hight){
	this.img= img;
	this.x= x;
	this.y=y;
	this.width= width;
	this.height= height;
}
BaseObject(Image img,int x,int y,int speed){
	this.img= img;
	this.x= x;
	this.y=y;
}

public Rectangle getRec(){
	return new Rectangle(this.x,this.y,this.width,this.height);
}

}
package 主程序;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.plaf.SliderUI;

public class Explode {
double x, y;
static Image[] imgs = new Image[16];
static {
for (int i = 0; i < 16; i++) {
imgs[i] = GainImage.getImage(“images/explode/e” + (i + 1) + “.gif”);
//imgs[i].getWidth(null);
}
}

int count;

public void draw(Graphics g) {
	if (count <= 15) {
		g.drawImage(imgs[count], (int) x, (int) y, null);
		count++;
	}
}

public Explode(double x, double y) {
	this.x = x;
	this.y = y;
}

}
package 主程序;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.print.DocFlavor.URL;

public class GainImage {
private GainImage(){

}
public static Image getImage(String path) {
	BufferedImage bi =null;
	try{
	java.net.URL u = GainImage.class.getClassLoader().getResource(path);
	bi = ImageIO.read(u);
	}catch(IOException e){
		e.printStackTrace();
	}
	return bi;
}

}
package 主程序;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Date;

import javax.swing.*;

public class MainFrame extends JFrame{

Image planeimg = GainImage.getImage("images/plane.png");//获取图片
Image bg = GainImage.getImage("images/bg.jpg");
Image shellimg = GainImage.getImage("images/shell.jpg");

Plane plane = new Plane(planeimg,250,350,6);//定义飞机
Shell []shell = new Shell[50];//50发炮弹
Explode bao;//爆炸

Date start_time = new Date();//用来计算开始时间
Date end_time;//用来计算结束时间
double live_time;//存放存活时间

boolean peng = false;


public void paint(Graphics g){//自动被调用      用来画游戏内容
	Color c = g.getColor();
	Font f = g.getFont();
	
	g.drawImage(bg, 0,0,500,500,null);//画背景
	plane.drawSelf(g);//画飞机
	for(int i=0;i<shell.length;i++){
		shell[i].draw(g);
		boolean peng = shell[i].getRec().intersects(plane.getRec());
		if(peng){
			plane.live=false;
			if(bao==null){
				bao = new Explode(plane.x,plane.y);
			}
			bao.draw(g);//画爆炸
			if(end_time==null)
			end_time = new Date();
			
			live_time = (end_time.getTime()-start_time.getTime())/1000;//计算时间

		}
		if(!plane.live){
		g.setColor(Color.RED);
		if(live_time<30)//输出结果
			g.drawString("存活时间:"+(end_time.getTime()-start_time.getTime())/1000+"秒(你是菜鸡)", plane.x, plane.y);
		else if(live_time<120)
			g.drawString("存活时间:"+(end_time.getTime()-start_time.getTime())/1000+"秒(你是普通玩家)", plane.x, plane.y);
		else
			g.drawString("存活时间:"+(end_time.getTime()-start_time.getTime())/1000+"秒(你是大师)", plane.x, plane.y);
		g.setColor(c);	
		g.setFont(f);
		}

	}
	g.setColor(Color.RED);//设置字体格式
	g.setFont(new Font("宋体",Font.BOLD,20));
}

//键盘监听类
class KeyMonitor extends KeyAdapter{
	public void keyPressed(KeyEvent e){
		plane.addDirection(e);
	}
	public void keyReleased(KeyEvent e){
		plane.minusDirection(e);
	}
	
}

//线程反复重画窗口
class PaintThread extends Thread{
	public void run(){
		while(true){
			repaint();//调用repaint 方法
			try {
				Thread.sleep(40);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public void launchFrame(){//初始化窗口
	this.setTitle("飞机小游戏—作者:陈宁波");
	this.setVisible(true);
	this.setBounds(200, 300, 500, 500);//设置窗口位置和大小
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	new PaintThread().start();//启动线程重画
	addKeyListener(new KeyMonitor());//增加键盘监听
	
	for(int i=0;i<shell.length;i++)
		shell[i]= new Shell(shellimg);
}


public static void main(String[] args) {
	MainFrame f = new MainFrame();
	f.launchFrame();
}

}
package 主程序;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;

public class Plane extends BaseObject{
boolean up,down,right,left;

boolean live = true;

public void drawSelf(Graphics g){
	if(live){
		g.drawImage(img, x,y,null);
		if(up&&y>30){
			y-=speed;
		}
		if(down&&y<500-this.height){
			y+=speed;
		}
		if(right&&x<500-this.width){
			x+=speed;
		}
		if(left&&x>this.width){
			x-=speed;
		}
	}
	
}

public Plane(Image img,int x,int y,int speed){
	this.img=img;
	this.x=x;
	this.y=y;
	this.speed=speed;
	this.height= img.getHeight(null);
	this.width= img.getWidth(null);
}

//按下增加方向
public void addDirection(KeyEvent e){
	switch(e.getKeyCode()){
	case KeyEvent.VK_DOWN:
		down = true;
		break;
	case KeyEvent.VK_UP:
		up = true;
		break;
	case KeyEvent.VK_RIGHT:
		right = true;
		break;
	case KeyEvent.VK_LEFT:
		left = true;
		break;
	}
}

//抬起减少方向
public void minusDirection(KeyEvent e){
	switch(e.getKeyCode()){
	case KeyEvent.VK_DOWN:
		down = false;
		break;
	case KeyEvent.VK_UP:
		up = false;
		break;
	case KeyEvent.VK_RIGHT:
		right = false;
		break;
	case KeyEvent.VK_LEFT:
		left = false;
		break;
	}
}

}
package 主程序;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

public class Shell extends BaseObject{
double degree;

Shell(Image img){
	this.img = img;
	this.x = 200;
	this.y = 200;
	this.speed = 3;
	this.width =15;
	this.height = 15;
	degree =Math.random()*2*Math.PI;//生成0-2pi之间的一个随机数
}

void draw(Graphics g){
	
	Color c = g.getColor();
	
	g.setColor(Color.yellow);
	
	g.drawImage(img,x,y,width,height,null);
	this.x += this.speed*Math.cos(degree);
	this.y += this.speed*Math.sin(degree);
	
	if(x>500-this.width||x<0){
		degree  = Math.PI - degree;
	}
	if(y>500-this.height||y<0){
		degree  = - degree;
	}
	
	g.setColor(c);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值