java小游戏,打飞机

废话少说,先上结果图:开始界面
游戏界面
我这个游戏设置了子弹撞击敌机事件,移动事件,其他的暂时事件还没有增加。
现在是代码展示:
1,准备资源,图片资源,我把所有图片放在这个目录下面:在这里插入图片描述
接着是所需要创建的类:
在这里插入图片描述
第一个类:开始游戏界面类:

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();
	}
}

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

在这里插入图片描述
游戏还有写方法没写,懒得写,等有激情了,想起来写。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JAVA飞机游戏毕业设计(源代码+论文). 1 绪论 1.1 手机软件现状 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端: 1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。 2. 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。 而Java技术在无线应用方面的优势非常明显: 1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); 3. Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。 基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。 1.2 J2ME介绍 虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。 J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。支持Java的设备就是任何运行Java虚拟机器的计算机。Motorola、Nokia等生产厂商都生产支持Java的设备。、 J2ME平台是由配置(Configuration)和简表(Profile)构成的。配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。简表是针对一系列设备 提供的开发包集合。在J2ME中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持。 目前,J2ME中有两个最主要的配置,分别是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。 作为第一个面对小型设备的Java应用开发规范,CLDC是由包括Nokia,Motorola和Siemens在内的18家全球知名公司共同协商完成的。CLDC是J2ME核心配置中的一个,可以支持一个或多个profile。其目标主要面向小型的、网络连接速度慢、能源有限(主要是电池供电)且资源有限的设备,如手机、PDA等。 而CDC则是主要用于运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机机顶盒 (set-top box)) 1.3 手机游戏应具有的特征 一个手机游戏应该具有以下特征: 易于学习: 既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个3元的手动操作的游戏。保持游戏的简单是最基本的要求。 可中断性: 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜了再学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值