`
qq_24665727
  • 浏览: 121282 次
  • 性别: 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;

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("飞机大战");
		ImageIcon Icon=new ImageIcon("背景\\Icon.jpg");
		setIconImage(Icon.getImage());
		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.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);
		}
		
	}
	/**
	 * // 内部类,,方便的访问包装类的方法,不方便公开,
	 * @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();
			}

		}
	}

}

 

  • 大小: 151.2 KB
6
2
分享到:
评论

相关推荐

    飞机大战java源码

    《飞机大战Java源码解析与学习指南》 在IT领域,游戏开发是一项充满挑战和乐趣的任务,而"飞机大战"作为一款经典的飞行射击游戏,深受开发者喜爱。本篇将深入探讨"飞机大战"的Java源码,旨在为初学者提供一个良好的...

    java版全民飞机大战

    《Java版全民飞机大战:深度解析游戏开发技术》 全民飞机大战是一款深受玩家喜爱的休闲游戏,而使用Java语言开发的版本则展示了编程技术在游戏领域的广泛应用。本篇将深入探讨Java版全民飞机大战的游戏机制,包括多...

    Java版飞机大战

    Java版飞机大战是一款基于Java编程语言开发的简单游戏,它展示了Java基础知识在实际项目中的应用。这款游戏的核心功能包括玩家控制飞机移动、射击敌机、躲避障碍以及得分系统等。通过这个游戏,开发者可以学习到如何...

    java版简单飞机大战

    java简单版飞机大战 请勿在未经授权的情况下上传任何涉及著作权侵权的资源,除非该资源完全由您个人创作 • 点击上传资源即表示您确认该资源不违反资源分享的使用条款,并且您拥有该资源的所有版权或者上传资源的...

    Java飞机大战图片素材

    在Java编程领域,小项目是学习和巩固基础知识的常见方式,而"Java飞机大战"就是一个典型实例。这个项目主要用于锻炼开发者的游戏逻辑构建、图形处理以及用户交互能力。在这个项目中,"图片素材"扮演了至关重要的角色...

    JAVA实现的飞机大战小游戏.zip

    JAVA实现的飞机大战小游戏.zipJAVA实现的飞机大战小游戏.zip JAVA实现的飞机大战小游戏.zipJAVA实现的飞机大战小游戏.zip JAVA实现的飞机大战小游戏.zipJAVA实现的飞机大战小游戏.zip JAVA实现的飞机大战小游戏.zip...

    java实现飞机大战图片素材.rar

    在Java编程语言中,开发一款名为“飞机大战”的游戏,图像素材是不可或缺的一部分。这个"java实现飞机大战图片素材.rar"压缩包文件包含了用于构建游戏视觉元素的各种图像资源,如飞机、敌人、子弹、背景等。为了成功...

    java开发的飞机大战项目

    《Java开发的飞机大战项目详解》 在编程领域,Java是一种广泛应用且易学易用的编程语言,尤其适合初学者入门。"飞机大战"项目是一个经典的案例,它以游戏的形式,巧妙地融入了Java的基础知识,让学习者在实践中理解...

    Java编写游戏飞机大战

    使用java编写的飞机大战游戏,包含源代码。适合初学者,通过对java语言中的面向对象、界面的表示等内容进行练习,以达到充分熟悉开发平台及代码编写。同时掌握并实践游戏项目设计规范及其开发流程:概要设计、详细...

    java课程设计作业-基于java实现的飞机大战小游戏

    java课程设计作业——基于java实现的飞机大战小游戏 java课程设计作业——基于java实现的飞机大战小游戏 java课程设计作业——基于java实现的飞机大战小游戏 java课程设计作业——基于java实现的飞机大战小游戏 ...

    JAVA飞机大战 ,附所有图片以及实验报告

    使用Java编程实现飞机大战游戏。游戏功能是使用鼠标操纵一架飞机,发射子弹击毁不断来袭的敌机。 游戏规则:在游戏中,英雄机初始生命为2,每击中一架小型敌机加5分,击中一架大型敌机加10分。另外有1/10的概率出现...

    Java Swing飞机大战小游戏.zip

    Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java Swing飞机大战小游戏Java ...

    java swing飞机大战游戏(源码+视频+文档+ppt)_亲测有效

    基于Java的飞机大战游戏主要需要我方飞机和敌方飞机,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞机可以随意移动,敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动,我方飞机在游戏开始时...

    Java版飞机大战游戏.zip

    Java版飞机大战游戏.zipJava版飞机大战游戏.zipJava版飞机大战游戏.zip Java版飞机大战游戏.zipJava版飞机大战游戏.zipJava版飞机大战游戏.zip Java版飞机大战游戏.zipJava版飞机大战游戏.zipJava版飞机大战游戏.zip...

    java飞机大战源码

    《Java飞机大战源码解析与技术探讨》 Java飞机大战是一款基于Java SE平台开发的经典射击游戏,它展示了Java语言在游戏开发中的应用能力。通过分析这款游戏的源代码,我们可以深入理解Java编程的基本原理,以及如何...

    老Java程序员花一天时间写了个飞机大战,很舒服!

    标题中的“老Java程序员花一天时间写了个飞机大战”揭示了一个资深的Java开发者利用一天的时间开发了一款名为“飞机大战”的游戏。这个标题暗示了Java作为一种编程语言在开发游戏方面的应用,同时也展示了高级程序员...

    JAVA 飞机大战游戏

    《JAVA 飞机大战游戏:深入解析与学习指南》 在编程世界中,游戏开发是一种极好的实践方式,能够帮助开发者深入理解编程语言的特性、图形处理、事件响应等核心概念。Java作为一门广泛应用于各种领域的编程语言,...

    java飞机大战游戏.zip

    java飞机大战游戏.zipjava飞机大战游戏.zipjava飞机大战游戏.zip java飞机大战游戏.zipjava飞机大战游戏.zipjava飞机大战游戏.zip java飞机大战游戏.zipjava飞机大战游戏.zipjava飞机大战游戏.zip java飞机大战游戏....

    Java飞机大战

    游戏现在还只是半成品(只有第一关),花了一个月的时间,只用Java Swing开发的单机版飞机大战游戏,代码量大,层次结构多。其中也使用了之前自己写的基于Java swing小游戏引擎gametool,封装了鼠标键盘以及时间监听...

Global site tag (gtag.js) - Google Analytics