Java(GUI)飞机大战

时间:2024.4.20

此小程序适合java初学者练手之用         

效果图

(Plane .java)

package beans;

import java.awt.Image;

import java.io.Serializable;

import javax.swing.ImageIcon;

public class Plane implements Serializable{

       private Image myImage;

       private int x;

       private int y;

       private int life;

       private boolean isRun;

       public Plane(Image myImage, int x, int y, int life, boolean isRun) {

              super();

              this.myImage = myImage;

              this.x = x;

              this.y = y;

              this.life = life;

              this.isRun = isRun;

       }

      

      

//     public Plane(ImageIcon imageIcon, int x2, int y2, int life2, boolean isRun2) {

              // TODO Auto-generated constructor stub

//     }

       public Image getMyImage() {

              return myImage;

       }

       public void setMyImage(Image myImage) {

              this.myImage = myImage;

       }

       public int getX() {

              return x;

       }

       public void setX(int x) {

              this.x = x;

       }

       public int getY() {

              return y;

       }

       public void setY(int y) {

              this.y = y;

       }

       public int getLife() {

              return life;

       }

       public void setLife(int life) {

              this.life = life;

       }

       public boolean isRun() {

              return isRun;

       }

       public void setRun(boolean isRun) {

              this.isRun = isRun;

       }

}

(FrmPlane .java)

package gui;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.LayoutManager;

import java.awt.Rectangle;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.prefs.BackingStoreException;

import javax.sound.midi.Receiver;

import javax.swing.ImageIcon;

import beans.Plane;

import com.common.FrmAdpter;

public class FrmPlane extends FrmAdpter{

       ImageIcon icon,backImg,background;

       int backy;//yzhou

       Image bufferImg;

       Plane hero,enemy,bullet;

       Random rd=new Random();

       int mark;

       ArrayList<Plane> emyList=new ArrayList<Plane>();//敌机

       ArrayList<Plane> bulList=new ArrayList<Plane>();//子弹

      

       public FrmPlane() {

              super("飞机大战", 400, 480, false, true,0, 0, null);

              //background=frmP.setIconImage("image/bgstar.gif");

              backImg=new ImageIcon("image/bgstar.gif");

              //this.setBackground(new Color(0, 130, 190));

              icon=new ImageIcon("image/logo.png");//logo

              super.setIconImage(icon.getImage());

             

              hero=new Plane(new ImageIcon("image/hero.png").getImage(),160,390,3,true);           

             

              //"敌机"线程

              Enemy am1=new Enemy();

              Thread t2=new Thread(am1);

              t2.start();

              //"子弹"线程

              Bullet b=new Bullet();

              Thread tbul=new Thread(b);

              tbul.start();

              //敌机与子弹

              EnemyBullet eb=new EnemyBullet();

              Thread tEB=new Thread(eb);

              tEB.start();

              //"移动"线程

              Move m=new Move();

              m.fp=this;

              Thread mThread=new Thread(m);

              mThread.start();

             

              this.addKeyListener(this);

              this.setFont(new Font("koko", 10, 25));

              this.setForeground(new Color(250,250,0));

              super.setVisible(true);

       }

       //双缓冲

       public void paint(Graphics g) {

              // super.paint(g);再绘,闪屏

               if(bufferImg==null) {

              //画笔

              bufferImg=this.createImage(this.getWidth(), this.getHeight());

              }

              //根据画笔创建一个画布,背景

              Graphics g2=bufferImg.getGraphics();              

              g2.drawImage(backImg.getImage(),0,backy,null);

              //英雄

              g2.drawImage(hero.getMyImage(),hero.getX(),hero.getY(),null);

              //敌机

              for (int i = 0; i < emyList.size(); i++) {

                     g2.drawImage(emyList.get(i).getMyImage(), emyList.get(i).getX(),emyList.get(i).getY(), null);

              }

              //子弹

              for(int i=0;i<bulList.size();i++) {

                     g2.drawImage(bulList.get(i).getMyImage(), bulList.get(i).getX(), bulList.get(i).getY(), null);

              }

              g2.drawString("分数:"+mark, 20, 450);

              //缓冲画布一次性画到

              g.drawImage(bufferImg,0,0,null);

       }

      

       //敌机生成

       class Enemy implements Runnable {

              //FrmPlane fp;

              @Override

              public void run() {

                     while(true) {

                            try {

                                   Thread.sleep(1000);

                                   Plane army=new Plane(new ImageIcon("image/enemy.png").getImage(), rd.nextInt(350)+30, 30, 1, true);//.getImage()

                                   emyList.add(army);      

                            } catch (InterruptedException e) {

                                   e.printStackTrace();

                            }

                     }

              }

       }

       //子弹生成

       class Bullet implements Runnable {

              public void run() {

                     while(true) {

                            try {

                                   Thread.sleep(600);

                                   Plane bullet=new Plane(new ImageIcon("image/bullet.png").getImage(),hero.getX()+40,hero.getY()-10,1,true);

                                   bulList.add(bullet);

                            } catch (InterruptedException e) {

                                   // TODO Auto-generated catch block

                                   e.printStackTrace();

                            }

                     }    

              }

       }

      

       //敌机与子弹

       class EnemyBullet implements Runnable {

              public void run() {

              while(true) {

                     for(int i=0;i<emyList.size();i++) {

                            Plane Renemy=emyList.get(i);

                            for(int j=0;j<bulList.size();j++) {        

                                   Plane Rbullet=bulList.get(j);

                                   if(Renemy==null||Renemy.getMyImage()==null) {

                                          break;

                                   }

                                   if(Rbullet==null||Rbullet.getMyImage()==null) {

                                          break;

                                   }

                                   //将图片转换为矩形以便判断

                                   Rectangle recEnemy=new Rectangle(Renemy.getX(),Renemy.getY(),Renemy.getMyImage().getWidth(null), Renemy.getMyImage().getHeight(null));

                                   Rectangle recBullet=new Rectangle(Rbullet.getX(),Rbullet.getY(),Rbullet.getMyImage().getWidth(null), Rbullet.getMyImage().getHeight(null));

                                   if(recEnemy.intersects(recBullet)) {//检测碰撞

                                          emyList.remove(i);

                                          bulList.remove(j);

                                          mark++;

                                          break;

                                   }

                            }

                     }

              }

              }

       }

      

       //所有移动

       class Move implements Runnable {

              FrmPlane fp;

              @Override

              public void run() {

                     while(true) {

                            //画布坐标动

//                          backy--;

//                          if(Math.abs(backy)==1800) {

//                                 backy=0;

//                          }

                            //敌人的飞机动

                            for (int i = 0; i < emyList.size(); i++) {

                                   emyList.get(i).setY(emyList.get(i).getY()+2);

                            }

                            //子弹的移动

                            for(int i=0;i<bulList.size();i++) {

                                   bulList.get(i).setY(bulList.get(i).getY()-2);

                            }

                            try {

                                   Thread.sleep(30);  

                            } catch (InterruptedException e) {

                                   e.printStackTrace();

                            }

                            fp.repaint();

                     }

              }    

       }

      

       //键盘移动事件

       @Override

       public void keyPressed(KeyEvent e) {

              super.keyPressed(e);

              char choice;

              choice=e.getKeyChar();

                     switch (choice) {

                     case 'w':

                            hero.setY(hero.getY()-3);

                            break;

                     case 's':

                            hero.setY(hero.getY()+3);

                            break;

                     case 'a':

                            hero.setX(hero.getX()-3);

                            break;

                     case 'd':

                            hero.setX(hero.getX()+3);

                            break;

                     }    

       }

      

       /*private class backThread implements Runnable {

              FrmPlane fp;

              @Override

              public void run() {

                     while(true) {

                            backy--;

                            if(Math.abs(backy)==1500) {//1500即一个数值<画布长度-窗体长度

                                   backy=0;

                            }

                            try {

                                   Thread.sleep(20);

                                  

                            } catch (InterruptedException e) {

                                   // TODO Auto-generated catch block

                                   e.printStackTrace();

                            }

                            fp.repaint();

                     }

              }    

       }*/

      

public static void main(String[] args) {

       new FrmPlane();

}

}

(FrmAdpter.java)

package com.common;

import java.awt.Container;

import java.awt.LayoutManager;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.JFrame;

public class FrmAdpter extends JFrame implements ActionListener,KeyListener,

                                                                                           MouseListener,MouseMotionListener,WindowListener,

                                                                                           FocusListener,ItemListener {

      

       protected Container container;

      

       public FrmAdpter(String title,int w,int h,boolean resize,boolean location,int x,int y,LayoutManager layout)

       {

              super.setTitle(title);

              super.setSize(w, h);

              super.setResizable(resize);

              if(location)

                     super.setLocationRelativeTo(null);

              else

                     super.setLocation(x, y);

              super.setDefaultCloseOperation(3);

              container=super.getContentPane();

              container.setLayout(layout);

       }

       @Override

       public void itemStateChanged(ItemEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void focusGained(FocusEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void focusLost(FocusEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowOpened(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowClosed(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowIconified(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowDeiconified(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowActivated(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowDeactivated(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseDragged(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseMoved(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseClicked(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mousePressed(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseReleased(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseEntered(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseExited(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyTyped(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyReleased(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void actionPerformed(ActionEvent e) {

              // TODO Auto-generated method stub

             

       }

}

(FrmDailogAdpter.java)

package com.common;

import java.awt.Container;

import java.awt.Frame;

import java.awt.LayoutManager;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.JDialog;

public class FrmDailogAdpter extends JDialog implements ActionListener,KeyListener,

MouseListener,MouseMotionListener,WindowListener,

FocusListener,ItemListener {

      

       protected Container container;

      

       public FrmDailogAdpter(Frame owner,String title,int w,int h,boolean resize,boolean location,int x,int y,LayoutManager layout)

       {

              super(owner, true);

              super.setTitle(title);

              super.setSize(w, h);

              super.setResizable(resize);

              if(location)

                     super.setLocationRelativeTo(null);

              else

                     super.setLocation(x, y);

              super.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

              container=super.getContentPane();

              container.setLayout(layout);

       }

       @Override

       public void itemStateChanged(ItemEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void focusGained(FocusEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void focusLost(FocusEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowOpened(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowClosed(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowIconified(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowDeiconified(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowActivated(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void windowDeactivated(WindowEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseDragged(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseMoved(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseClicked(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mousePressed(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseReleased(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseEntered(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void mouseExited(MouseEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyTyped(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void keyReleased(KeyEvent e) {

              // TODO Auto-generated method stub

             

       }

       @Override

       public void actionPerformed(ActionEvent e) {

              // TODO Auto-generated method stub

             

       }

}

更多相关推荐:
飞机大战项目总结

飞机大战项目总结学飞机大战好几天了今天就总结一下飞机大战所学的知识所遇到的困难还有常出现在错误一资源包的导入场景的搭建步骤不在阐述在这包的导入和创建新文件夹在回顾一下Scences存放场景视图Scripts存放...

飞机大战 java 源代码

packagecomimportjavaawtColorimportjavaawtFontimportjavaawtGraphicsimportjavaawtImageimportjavaawtRectangl...

Unity3D【飞机大战项目总结】

Unity3D——飞机大战项目总结学飞机大战好几天了,今天就总结一下飞机大战所学的知识,所遇到的困难,还有常出现在错误。一:资源包的导入,场景的搭建步骤不在阐述在这包的导入和创建新文件夹在回顾一下Scences…

《Java程序设计基础》项目设计报告

Java程序设计基础项目设计报告题目求三角形面积的实现专业班级学号姓名完成时间成绩课程设计说明书论文第I页目录1设计的目的111设计的目的112内容要求12系统基本框架结构图23系统功能设计331系统主界面设计...

Java Me 小项目报告

手机应用程序开发JavaME项目报告学院信息科学与技术班级学号姓名主要功能屏幕上有一个小球上下弹动按左键向左移动按右键向右移送按上键减速按下键加速中间的确定键变大其他键改变颜色在红绿蓝色之间变化右软件可以暂停或...

java计算器项目课程设计报告(包涵源文件与类图)

计算机网络技术专业专业代码590102动态网站基础程序设计课程设计班级网站1101班学号20xx352220xx184220xx221520xx515320xx352820xx289320xx352320xx3...

Java雷电游戏项目报告模板

北京青年政治学院小学期达内JAVA课程项目报告项目题目专业班级学生姓名学生学号雷电游戏的设计与实现指导教师姓名目录一系统目标X二系统设计思路X三系统详细设计X四系统实现X五系统设计总结XX六参考文献XX1一系统...

Java EE项目开发实验报告

实验一Struts框架技术及应用一实验目的掌握Struts框架技术的原理及其在项目中的应用掌握MVC开发模式二实验内容创建一个用于本次和后续JavaEE项目的名为test的数据库并在数据库中创建一个名为user...

java个人记事本总结报告

计算机学院工程实践总结报告个人记事本小组序号组员姓名年级班级指导教师姓名提交日期目录12引言2项目需求分析及方案2212223243程序的基本功能2输入输出要求3测试数据3设计方案3项目概要设计4313233抽...

Java项目报告模版

Java程序设计项目报告班级姓名学号指导教师20xx年06月3日1选题概述题目javaXX应用程序简介通过本程序可以实现XX的基本功能程序是Frame类的子类使用GridLayout的布局方式对组件进行布局用P...

Java小项目报告

HUNANUNIVERSITYJava小项目报告题目:学生成绩管理系统学生姓名吕良学生学号***专业班级计算机科学与技术(3)班指导老师文佳宝完成日期20**.12.23Java小项目:学生成绩管理系统一、项目…

java聊天室项目设计书

Java项目设计聊天室设计设计人XXX指导老师XXX设计时间20xx417到20xx424目录第一部分项目概况1项目说明42项目背景4第二部分项目计划1项目目标42项目范围43项目策略44项目开发周期45每项任...

java飞机大战项目总结(3篇)