`
qq_24665727
  • 浏览: 121322 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java小项目,重写实现血量的飞机大战

阅读更多
下面有图片,方便大家先看界面!
package 飞机大战;

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.RenderingHints.Key;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
 * 主类,线程,所有的事物重绘都在这个类
 * @author yan
 *
 */
public class WarUI extends Frame{
	public static final int WIDTH=410;
	public static final int HEIGHT=600;
	public ImageIcon img;
	public ImageIcon img2;
	public static WarUI warui;
	public boolean p=true;
	public static List<Panle> planes = new ArrayList<Panle>();// 敌人飞机容器
	public static List<Bullet> bullets = new ArrayList<Bullet>();//子弹容器 
	public static List<Explode> explodes=new ArrayList<Explode>();//爆炸对象
	public static int score=0;//计分
	
	private Image offScreenImage = null;//用来实现使用双缓冲,画一个缓冲画布
	public  Panle myplane=new Panle(150,500,warui,60,true);
	private Random random=new Random();
	public void lauchFrame() {
		setTitle("飞机大战");
		setBounds(380, 100, WIDTH, HEIGHT);
		// 匿名内部类,短,不涉及将来的扩展
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		
		img=new ImageIcon("背景\\back.jpg");//接口,getImage方法返回一个Image对象,repaint方法会调用paint方法
		img2=new ImageIcon("背景\\back2.jpg");//接口,getImage方法返回一个Image对象,repaint方法会调用paint方法
		setResizable(false);
		setVisible(true);
		MyKeyListener mkl=new MyKeyListener();
		this.addKeyListener(mkl);
		new Thread(new PaintThread()).start();
	}

	public static void main(String[] args) {
		warui =new WarUI();
		warui.lauchFrame();
		
	}	
	/**
	 	* 消除闪烁,使用双缓冲
	 	* 线程重画更加均匀,更能控制重化的速度。按键重画不能解决子弹自动飞行的问题;
	    * 每次重绘调用repaint方法时,必定会先调用update然后paint方法
	 */

		public void update(Graphics g) {
			if (offScreenImage == null) {
				offScreenImage = this.createImage(WIDTH, HEIGHT);
			}
			// 拿到图片上的画笔
			Graphics gOffScreen = offScreenImage.getGraphics();
			Color c = gOffScreen.getColor();
			gOffScreen.setColor(Color.blue);
			gOffScreen.fillRect(0, 0, WIDTH,HEIGHT);
			gOffScreen.setColor(c);
			paint(gOffScreen);// 画在背后图片上
			g.drawImage(offScreenImage, 0, 0, null);// 画在屏幕上
		}
		/**
		 * 根据线程里面的repaint方法,不断重画面板,飞机,子弹,爆炸效果,等待都是在里面画出来的
		 */
	public void paint(Graphics g){
		//	根据不同的分数层切换背景图片
		if(score>5000){
			g.drawImage(img2.getImage(), 0, 0, warui);
		}else{
			g.drawImage(img.getImage(), 0, 0, warui);
		}
		if(!myplane.isLive()){
			g.setColor(Color.red);
			Font f = g.getFont();
			g.setFont(new Font("宋体",Font.BOLD,60));
			g.drawString("GAME  OVER!!!", 20, 300);
			g.setFont(f);
			g.drawString("复活按B,重新开始按C!!!", 22, 340);
			p=false;
			
		}
		myplane.draw(g);
		myplane.move();
		
		/**
		 * 添加 / 重绘敌人
		 */
		if (planes.size()<3 ) {
			for (int j = 0; j < 3; j++) {
				Panle p = new Panle(false, warui);
				planes.add(p);
			}
		}
		if (planes.size() != 0) {
			for (int i = 0; i < planes.size(); i++) {
				Panle diren = planes.get(i);
				diren.draw(g);
				
				diren.dmove();
				int r1=random.nextInt(200);
				if(r1==20)
				diren.dfire();
			}
		}
		g.setColor(Color.BLUE);
		g.drawString("子 弹 个  数 :"+bullets.size(), 20,50);
		g.drawString("入侵敌机数:"+planes.size(), 20, 70);
		g.drawString("获得分数:"+score, 20, 90);
		g.drawString("A 开火,P 暂停", 20, 110);
		g.drawString("C重新开始,B 复活:", 20, 130);
		g.setColor(Color.BLACK);
		for(int i=0;i<bullets.size();i++){
			Bullet b1=bullets.get(i);
			b1.draw(g);
			b1.hitplane(planes);
			b1.hitplane(myplane);
			b1.move();
		}
		/**
		 * 创建爆炸对象
		 */
		for (int i = 0; i < explodes.size(); i++) {
			Explode e = explodes.get(i);
			e.draw(g);
		}
		
		/**
		 * 血块添加
		 * 添加飞机吃血块的方法
		 */
		if(myplane.life<30){
			Blood b=new Blood();
			b.draw(g);
			myplane.eat(b);
		}
		
	}
	/**
	 * // 内部类,,方便的访问包装类的方法,不方便公开,
	 * @author yan
	 *
	 */
	private class PaintThread implements Runnable {
		public void run() {
			while (true) {	
				if(p==true){
				 repaint();
				}
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
/**
 * 键盘事件,直接添加在面板上,然后对飞机的X,Y速度进行控制
 * @author yan
 *
 */
	class MyKeyListener extends KeyAdapter {
		public void keyPressed(KeyEvent e) {
			switch (e.getKeyCode()) {
			case 37:	// 左
				myplane.left();
				break;
			case 38:// 上
				myplane.up();
				break;
			case 39:// 右
				myplane.right();
				break;
			case 40:// 下
				myplane.down();
				break;
			case 65://A键
				if(myplane.isLive()){
				myplane.fire();
				}
				break;
			case 66://B建复活,清空子弹
				p=true;
				myplane=new Panle(150,500,warui,60,true);
				bullets.removeAll(bullets);
				break;
			case 67://C建重新开始
				p=true;
				myplane=new Panle(150,500,warui,60,true);
				bullets.removeAll(bullets);
				planes.removeAll(planes);
				break;
			case 80://P键,暂停
				if(p==false){
					p=true;
				}else{
					p=false;
				}
			break;
			}

		}
/**
 * 抬起键时,把速度为0
 */
		public void keyReleased(KeyEvent e) {
			if (e.getKeyCode() == 37 || e.getKeyCode() == 39) {
				myplane.initXc();
			} else if (e.getKeyCode() == 38 || e.getKeyCode() == 40) {
				myplane.initYc();
			}

		}
	}

}

 这只是一个主类,其他完整代码和图片在压缩包里面,需要的话,请下载!

  • 大小: 182.8 KB
2
1
分享到:
评论
4 楼 qq_24665727 2015-12-26  
451914442 写道
Exception in thread "main" java.lang.UnsupportedClassVersionError: 飞机大战/WarUI : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)




我的jre是1.8的,可能有点不兼容,你用eclipse把jre改成1.5的可以运行,我刚才别人电脑下载了,,,,有几个我没写,飞机与飞机碰撞,还有那个血块的大小太小,导致飞机吃血块有点难,,,然后场景添加少,或者没有动态
3 楼 qq_24665727 2015-12-26  
jdk的版本和class版本不一致,一般是jdk版本过低。检查你安装的jdk版本和当前的jdk版本。如果是安装了Oracle之类的软件,也不用重装,把环境变量重设下就好了。
补充----------
果然是装了Oracle,把最后一个C:\Program Files\Java\jdk1.6.0_16\bin;放最前面就行了,记得要重新打开一个命令行窗


网上找的,,希望有用
2 楼 rex0654335 2015-12-24  
451914442 写道
Exception in thread "main" java.lang.UnsupportedClassVersionError: 飞机大战/WarUI : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

jdk 1.6 运行时选GBK
1 楼 451914442 2015-12-24  
Exception in thread "main" java.lang.UnsupportedClassVersionError: 飞机大战/WarUI : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

相关推荐

    用Java实现的飞机大战小游戏

    总的来说,"用Java实现的飞机大战小游戏"是一个集成了Java核心概念的综合项目。通过这个项目,我们可以深入理解类的继承和多态在实际问题中的应用,掌握Swing组件的使用技巧,以及如何结合并发和资源管理来实现复杂...

    Java实现的飞机大战

    总之,"Java实现的飞机大战"项目是一个综合性的Java编程实践,涵盖了从基础语法到高级特性的众多知识点,对于初学者来说,不仅能够巩固Java编程技能,还能体验到游戏开发的乐趣,提升解决问题的能力。

    java实现飞机大战游戏

    在IT领域,开发一款游戏是技术与创意的结合,而本文将深入探讨如何使用Java Swing和MySQL来实现一个经典的“飞机大战”游戏。Java Swing作为Java GUI(图形用户界面)库,提供了丰富的组件和功能,可以创建出具有...

    JavaSwing实现飞机大战

    本项目"JavaSwing实现飞机大战"是一个基于JavaSwing开发的经典游戏,它展示了如何利用JavaSwing组件来创建一个交互式的、具有图形界面的游戏。 在JavaSwing中,我们可以使用组件(如JFrame、JButton、JLabel等)来...

    飞机大战java实现

    首先,要理解Java实现的飞机大战游戏涉及的基础知识点,需要从游戏设计和编程实现两个方面进行探讨。 在游戏设计方面,飞机大战属于射击类游戏,这类游戏强调流畅的画面表现和高难度的挑战性。在本游戏中,玩家控制...

    JAVA小游戏_飞机大战

    《JAVA小游戏:飞机大战》是一款基于JAVA编程语言开发的简单游戏,主要展示了JAVA在图形界面设计和多线程处理上的应用。这个游戏对于JAVA初学者来说,是一个很好的实践项目,可以帮助他们理解和掌握相关知识。 首先...

    基于java+swing的【飞机大战】游戏(源码+论文).zip

    【Java+Swing的飞机大战游戏】是一款基于Java编程语言,利用Swing库构建的桌面游戏,适合初学者和学生进行学习与实践。本项目涵盖了软件工程中的多个关键环节,包括需求分析、设计、编码、测试和文档编写,是进行...

    java面向对象(飞机大战)

    在开发"飞机大战"时,我们需要利用Eclipse的项目管理功能,创建一个新的Java项目,并设置好项目的编译路径和运行环境。编写代码时,Eclipse的自动提示和错误检查能帮助我们快速定位和修复问题。 在游戏的主体框架中...

    飞机大战(java)

    《飞机大战》是一款基于Java语言开发的简单游戏,适合初学者进行编程实践或者作为Java课程设计的项目。这个游戏虽然不复杂,但是包含了基础的游戏逻辑、图形绘制和事件处理等核心概念,是学习Java编程和游戏开发的一...

    JAVA_仿微信飞机大战

    【JAVA_仿微信飞机大战】是一款基于JAVA Swing库开发的桌面游戏,其灵感来源于流行的微信内置小游戏——"飞机大战"。此项目旨在提供一个类似的游戏体验,让玩家在非微信环境中也能享受到打飞机的乐趣。通过这个项目...

    java swing飞机大战小游戏

    在本项目"java swing飞机大战小游戏"中,开发者使用了Swing来创建一个简单的飞机大战游戏,这对于初学者来说是一个很好的实践项目,因为它涉及到了面向对象编程、事件处理和图形绘制等基本概念。 1. **Swing组件**...

    JAVA飞机大战源代码

    * 重构了move,方法实现播放销毁动画功能 */ public void move(){ if(state == ACTIVE){ y += step; return ; } if(state == DEAD){ //从子类对象中获取下一张照片 BufferedImage img = nextImage(); if...

    java开发小游戏,飞机大战--airFight.zip

    今天我们将探讨一款基于Java语言开发的小游戏——"飞机大战",它是一个深受玩家喜爱的经典射击游戏,同时也是Java初学者及爱好者提升技能的理想项目。本文将详细解析游戏的实现原理,以及如何利用Eclipse IDE进行...

    初学Java飞机大战代码

    【初学Java飞机大战代码】项目是一个非常适合Java初学者实践的编程练习,它涵盖了Java基础知识、面向对象编程、游戏开发等多个重要知识点。在这个项目中,你将有机会运用所学的Java语言特性,同时也能锻炼到逻辑思维...

    一个使用纯Java编写的《飞机大战》小游戏

    总的来说,这个《飞机大战》小游戏项目是学习和实践Java基础的宝贵资源,特别是对于那些希望了解如何用Java进行游戏开发的人来说。通过这个项目,开发者不仅可以巩固对类和对象的理解,还能掌握封装、继承和多态的...

    基于Java Swing实现的飞机大战游戏.zip

    在这个项目中,开发者利用Java Swing来设计和实现了一款经典的游戏——飞机大战。这个游戏的实现充分展示了Java Swing在游戏开发中的应用。 1. Java Swing基础 Java Swing是Java AWT(Abstract Window Toolkit)的...

    基于javaswing界面的飞机大战小游戏开发.zip

    《基于Java Swing界面的飞机大战小游戏开发》 Java Swing是一个用于构建桌面应用程序的Java库,它提供了丰富的用户界面组件,可以用于创建具有图形用户界面(GUI)的应用程序,包括我们熟知的游戏。在这个“飞机...

    Java飞机大战游戏源码

    Java飞机大战游戏是一款基于Java编程语言开发的简单游戏,它为初学者提供了很好的学习和实践平台,特别是对Java基础知识和游戏开发感兴趣的朋友们。这个源码包含了一系列的Java类和方法,用于实现游戏的核心功能,...

    基于Android的飞机大战游戏

    【基于Android的飞机大战游戏】是一款使用Java编程语言开发的移动平台游戏,它展示了Java在构建安卓应用,尤其是游戏方面的强大能力。在这个项目中,我们将深入探讨几个关键的知识点: 1. **Android开发环境**:...

Global site tag (gtag.js) - Google Analytics