您的当前位置:首页正文

java小游戏,打飞机

来源:华佗健康网

废话少说,先上结果图:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;

public class GameFrame extends JFrame {
	int frameWidth=800;
	int frameHeight=640;
	Image backgroundimage=Toolkit.getDefaultToolkit().getImage("F:\\JAVA\\gamepciture\\sky.jpg");
	
	int state=0;
	int a=0;
	PlayerPlane Plyer=new PlayerPlane("F:\\JAVA\\gamepciture\\planePlayer.png",200,400,this);
	//子弹列表
	ArrayList<Bullet> bulletList=new ArrayList<Bullet>();
	//敌方飞机列表
	ArrayList<EnemyPlane> enemyList=new ArrayList<EnemyPlane>();
	//清除出界和击中子弹
	ArrayList<Bullet> removebullet=new ArrayList<Bullet>();
	
	int count=0;
	int timecount=0;
	public  GameFrame() {
		setTitle("飞机游戏");
		setSize(frameWidth, frameHeight);
		//是屏幕居中
		setLocationRelativeTo(null);
		//添加关闭事件
		setDefaultCloseOperation(3);
		//用户不能调整窗口大小
		setResizable(false);
		//添加键盘监听器
		addKeyListener(new GameFrame.KeyMonitor());
		setVisible(true);
		while(true) {
		repaint();
		if(enemyList.size()<4 && timecount%20==1) {
			Random random=new Random();
			int rnum=random.nextInt(700);
			EnemyPlane enemy =new EnemyPlane("F:\\JAVA\\gamepciture\\emenyplane.png",rnum ,100,this);
			enemyList.add(enemy);
		}
		timecount++;
		try {
			Thread.sleep(100);
		}catch(Exception e) {
			e.printStackTrace();
		}
		}
		
	}
	
	
	
	class KeyMonitor extends KeyAdapter{//添加监听器
		public void keyPressed(KeyEvent e) {
			int key=e.getKeyCode();
			if(key==KeyEvent.VK_ENTER) {
				state=1;
			}else {
				//玩家控制飞机
				Plyer.keyPressed(e);
			}
		}
		
		public void keyReleased(KeyEvent e) {
			Plyer.keyReleased(e);
		}
	}



	Image offScreem=null;
	
	public void paint(Graphics g) {
		
		if(offScreem==null) {
			offScreem=this.createImage(frameWidth, frameHeight);
		}
		Graphics Gimage=offScreem.getGraphics();
		Gimage.setColor(Color.blue);
		Gimage.setFont(new Font("黑体",Font.BOLD,50));
		Gimage.drawImage(backgroundimage, 0, 0,getWidth(),getHeight(), null);
		if(state==0) {
		Gimage.drawString("打飞机", 325, 150);
		Gimage.drawString("开始游戏", 300, 300);
		}else if(state==1) {
			//Gimage.drawString("游戏进行中", 300, 300);
			//绘制自己飞机
			Plyer.paintSelf(Gimage);
			
			//绘制敌方飞机
			for(EnemyPlane enemy:enemyList) {
				enemy.paintSelf(Gimage);
			}
			
			//绘制子弹
			bulletList.remove(removebullet);
			for(Bullet bullet :bulletList) {
				bullet.paintSelf(Gimage);
			}
		}
		
		//最后把图片画出来
		g.drawImage(offScreem,0,0,null );
	}
	
	public static void main(String[] args) {
		GameFrame gameframe=new GameFrame();
	}
}

下面是游戏物体的位置类:

 import java.awt.Image;
import java.awt.Toolkit;

public class GameLocation {
	int x,y;
	Image img;
	GameFrame gameFrame;
	
	public GameLocation(String img,int x,int y,GameFrame gameFrame){
		this.img=Toolkit.getDefaultToolkit().getImage(img);
		this.x=x;
		this.y=y;
		this.gameFrame=gameFrame;
		
	}
	
}

再写飞机的父类:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;

public abstract class Plane extends GameLocation{
		
		int speed=15;
		
		
		public Plane(String img,int x,int y ,GameFrame gameFrame) {
			super(img,x,y,gameFrame);
		}
		
		
		
		public abstract void attack();
		
		public abstract void paintSelf(Graphics g);
		
		public abstract Rectangle getRec();
		public abstract Point getHeadPoint();
}

再写玩家飞机的类,即飞机类的一个子类:

import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;


public class PlayerPlane extends Plane {
	
	boolean up,down,left,right;
	
	public PlayerPlane(String img, int x, int y, GameFrame gameFrame) {
		super(img, x, y, gameFrame);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void paintSelf(Graphics g) {
		g.drawImage(img,x,y,null);
		move();
		attack();
		
		// TODO Auto-generated method stub

	}

	

	@Override
	public Rectangle getRec() {
		// TODO Auto-generated method stub
		return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
	}
	
	public void right() {
		if(x-speed>-50) {
		x=x-speed;
		}
	}
	
	public void left() {
		if(x+speed<700) {
		x=x+speed;
		}
	}
	
	public void up() {
		if(y-speed>-50) {
		y=y-speed;
		}
	}
	
	public void down() {
		if(y+speed<550) {
		y=y+speed;
		}
	}
	
	public void keyPressed(KeyEvent e) {//当键盘按下的时候
		int key=e.getKeyCode();
		switch(key) {
		case KeyEvent.VK_A:
			right=true;
			break;
		case KeyEvent.VK_S:
			down=true;
			break;
		case KeyEvent.VK_D:
			left=true;
			break;
		case KeyEvent.VK_W:
			up=true;
			break;
		default:
			break;
		
		}
	}
	
	public void keyReleased(KeyEvent e) {//当键盘按下释放的时候
		int key=e.getKeyCode();
		switch(key) {
		case KeyEvent.VK_A:
			right=false;
			break;
		case KeyEvent.VK_S:
			down=false;
			break;
		case KeyEvent.VK_D:
			left=false;
			break;
		case KeyEvent.VK_W:
			up=false;
			break;
		default:
			break;
		
		}
	}
	
	private void move() {
		if(up) {
			up();
		}else if(down) {
			down();
		}else if(left) {
			left();
		}else if(right) {
			right();
		}
		// TODO Auto-generated method stub
		
	}
	
	//攻击冷却状态
		private boolean attackCoolDown=true;
		//攻击冷却时间毫秒间隔1000ms
		private int attackCoolDownTime=400;
	
	@Override
	public void attack() {
		// TODO Auto-generated method stub
		Point p=this.getHeadPoint();
		if(attackCoolDown) {
		String s="F:\\JAVA\\gamepciture\\bullet1.png";
		PlayerBullet bullet1=new PlayerBullet(s,p.x+15,p.y+40,this.gameFrame);
		PlayerBullet bullet2=new PlayerBullet(s,p.x+135,p.y+40,this.gameFrame);
		this.gameFrame.bulletList.add(bullet1);
		this.gameFrame.bulletList.add(bullet2);
		new AttackCD().start();
		}
	}
	
	class AttackCD extends Thread{
		//攻击设为冷却状态
		public void run() {
			attackCoolDown=false;
			
			//休眠
			try {
				Thread.sleep(attackCoolDownTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//攻击冷却解除
			attackCoolDown=true;
		}
	}

	@Override
	public Point getHeadPoint() {
		// TODO Auto-generated method stub
		
		return new Point(x,y) ;
	}

}

敌方飞机的代码类:

import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;

public class EnemyPlane extends Plane {

	public EnemyPlane(String img, int x, int y, GameFrame gameFrame) {
		super(img, x, y, gameFrame);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void attack() {
		// TODO Auto-generated method stub
		

	}

	@Override
	public void paintSelf(Graphics g) {
		// TODO Auto-generated method stub
		g.drawImage(img, x, y, gameFrame);
		down();
		attack();
	}
	
	public void down() {
		if(flyspeed) {
		y=y+5;
		}
		new FlySpeed().start();
	}
	
	
	//敌机飞行速度控制
	private boolean flyspeed=true;
	//攻击冷却时间毫秒间隔1000ms
	private int flyspeedTime=100;
	
	class FlySpeed extends Thread{
		//攻击设为冷却状态
		public void run() {
			flyspeed=false;
			
			//休眠
			try {
				Thread.sleep(flyspeedTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//攻击冷却解除
			flyspeed=true;
		}
	}
	
	@Override
	public Rectangle getRec() {
		// TODO Auto-generated method stub
		return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
	}

	@Override
	public Point getHeadPoint() {
		// TODO Auto-generated method stub
		return null;
	}

}

子弹类:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

public abstract class Bullet extends GameLocation  {
	int speed=15;
	
	public Bullet(String img,int x,int y, GameFrame gameFrame) {
		super(img,x,y,gameFrame);
			
	}
	
	
	public abstract  void paintSelf(Graphics g) ;
	
	public abstract Rectangle getRec();
	
	public abstract  void bulletMove() ;
	
}

玩家子弹的类需要继承子弹类:

import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;

public class PlayerBullet extends Bullet {

	public PlayerBullet(String img,int x,int y,GameFrame gameFrame) {
		super(img, x, y,gameFrame);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void paintSelf(Graphics g) {
		// TODO Auto-generated method stub
		g.drawImage(img, x, y, null);
		bulletMove();
		bullethot();
		bulletBorder();
	}

	public void bullethot() {
		// TODO Auto-generated method stub
		ArrayList<EnemyPlane> enemyList =this.gameFrame.enemyList;
		for(EnemyPlane enemy:enemyList) {
		if(this.getRec().intersects(enemy.getRec())) {
			enemyList.remove(enemy);
			this.gameFrame.removebullet.add(this);
			break;
		}
		}
		
	}
	
	public void bulletBorder() {
		if(y+img.getHeight(null)<0) {
			this.gameFrame.removebullet.add(this);
		}
	}

	@Override
	public Rectangle getRec() {
		// TODO Auto-generated method stub
		return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
	}

	@Override
	public void bulletMove() {
		// TODO Auto-generated method stub
		for(int i=0;i<=100;i++) {
			if(i==100) {
			y=y-speed;
			}
		}
		
		
	}

}

最后一个类(可用可无)启动游戏的类:

public class StatrUpGame {
	public static void main(String[] args) {
		GameFrame gameframe=new GameFrame();
	}
}

游戏所需要的图片这是图片尺寸,飞机和子弹照片,大家可以自己找:

因篇幅问题不能全部显示,请点此查看更多更全内容