Java飞机大战实现--fntp开源(项目源码以及成品展示)

在这里插入图片描述
当下疫情严重,让笔者出不了门,哪都去不了,实在是太无聊了,想想女朋友想想寝室的那帮逗比,退一步,越想越气,那个吃蝙蝠的哥们是不是该反思一下,哎,生气之余,我开发了一款以消灭蝙蝠为背景,以飞机大战样式来实现的一款Java程序,开放所有资源以及源代码供想写java游戏的同学参考。全套的设计思路以及设计方法都会详细的展示出来,部分笔者催我没有更新Python的学习,我在这里给大家道个歉,疫情原因,我要在家上课,上课阶段,可能会更新较慢,见谅~嘻嘻嘻嘻


注意奥!要看懂此源码你需要掌握java IO,java 多线程,javaGUI,java 集合类,java基础,java流程结构,java循环结构知识

项目名称:消灭蝙蝠

项目大小:3.0MB

项目语言:Java

项目难度:简单

JDK版本:JDK 1.8

编译工具:Eclipse 4.4.0

测试环境:Windows 10 Professional

源码下载地址:点击下载飞机大战java项目源码(内含所有资源素材以及步骤分析)

======================================================================
好了,废话不多说,直接上图上代码:
在这里插入图片描述
这里详细介绍了飞机大战的流程处理细节的注意问题:
在这里插入图片描述
这是界面布局效果图示:
在这里插入图片描述

在这里插入图片描述
看到这里大家还是一脸懵逼?没事,我来介绍一下,其实,整个项目应该使用面向对象的思路去开发,我这里给出的源码并不是真正意思以上的面向对象开发,而是基于内部类实现的简单程序。也仅仅只是为了给大家参考一下写的过程以及思路,好的,首先来看源码第一个:About.java:(关于本软件页面):
在这里插入图片描述
代码:

package com.fntp.mainFrame;
import java.util.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class About {
//在这里创建一个初始化变量Image的对象,用于后续程序的赋值
	private static Image image;
	//这块的版本号可要可不要
	private static final long serialVersionUID=-1588458291133087637L;
public static void main(String[] args) {
//调用下面的about()方法
	about();
}
public static void about() {
//创建新窗口并且设置标题
	JFrame yuFrame = new JFrame("关于蝠式战机");
	//设置窗口大小
	yuFrame.setSize(498,900);
	//设置软件图像
	ImageIcon icon = new ImageIcon("images/logoZS.png");
	yuFrame.setIconImage(icon.getImage());
//	控制面板======画图板(容器)
	JPanel contentPane=new JPanel(){
		public void paint(Graphics g) {
		//画背景
			ImageIcon icon=new ImageIcon("images/about.png");
	 image=icon.getImage();
	 //绘图位置
	 g.drawImage(image, 0,0,null);
			// TODO Auto-generated method stub
		}
	};
//	最后设置窗口关闭事件:
	yuFrame.addWindowListener(new WindowAdapter() {	 
public void windowClosing(WindowEvent e) {
super.windowClosing(e);}});
	yuFrame.add(contentPane);
	//	==============立即设置窗口可见
	yuFrame.setVisible(true);}}

这里给大家展示一下一个简单的随机数生成算法,用来随机飞机的出现位置:
代码:

package com.fntp.mainFrame;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Random;
public class diRen_Random {
	public static void main(String[] args) {
		System.out.println(suijishu().toString());
	}
		static ArrayList<Integer> suijishu() {
			ArrayList<Integer> GD=new ArrayList<Integer>();
			 ArrayList<Integer> SCX=new ArrayList<Integer>();
	       for(int a=0;a<11;a++){
	           GD.add(a);
	           System.out.print(a+"  ");
	       }
	       System.out.println();
	       for(int b=0;b<4;b++){
	           Random r=new Random();
	             int a=r.nextInt(GD.size());
//	             [0,11)个伪随机数
	             System.out.print(GD.get(a)+","); 
	             SCX.add(GD.get(a));
	             GD.remove(a);
	       }
	       System.out.println();
	       return SCX;
		}
}


我来解释一下这个随机数生成算法吧,很简单的,就是第一步,创建了两个ArrayList对象,根据这个ArrayList对象也就是两个集合对象,来存储和提取数据。
1.创建对象
2.使用for循环遍历生成并且添加数据进ArrayList的一个对象中去
3.另一个对象使用for循环遍历,使用Random类来创建对象
4.将生成的数据添加进ArrayList的另一个对象,并且使用remove方法,将原有数据剔除重复数据
5.循环后换行打印出来

注意奥,这个方法返回的是一个ArrayList对象,所以上面的才有suijishu.toString()这一写法,目的就是将返回的数据打印输出
以下为完整的项目主程序代码:

package com.fntp.mainFrame;
import java.awt.*;
import   java.applet.*; 
import java.awt.event.*;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.*;
import com.fntp.mainFrame.*;
import java.awt.Robot;  
import java.util.Date;
public class Game1
{
	//TODO:变量“声明”在此
	PlayMusic p=new PlayMusic();
	String gameBg ="bg";
	String feijitu="hero0";
	int dzh_diren_X0,dzh_diren_X1,dzh_diren_X2,dzh_diren_X3,dzh_diren_Y0,dzh_diren_Y1,dzh_diren_Y2,dzh_diren_Y3;
	int feijiqihuan_zidanxianzaiweizhi_X1;
	int feijibaozhanumber[]= new int []{0,1,2,3};
	String diRen0 = "airplane"+feijibaozhanumber[0];
	String diRen1 = "airplane"+feijibaozhanumber[0];
	String diRen2 = "airplane"+feijibaozhanumber[0];
	String diRen3 = "airplane"+feijibaozhanumber[0];
	//	所以这里出问题了,不应该创建数组,多此一举,注释掉
	//	String diRen[]= new String[] {"airplane0","airplane0","airplane0","airplane0","airplane0","airplane0","airplane0"};
	//	测试项目时候使用一个敌人作为测试样例,实际需要使用数组进行for遍历添加,
	//	同时使用Random()随机数产生不同坐标位置的敌人
	String ziDan_SRC;
	boolean 	baozhahouzidan = false;
	boolean jianpanbukeyong= true;
	//	子弹爆炸有四种情况
	boolean   zidanjizhongdiren_0 = false;
	boolean   zidanjizhongdiren_1 = false;
	boolean   zidanjizhongdiren_2 = false;
	boolean   zidanjizhongdiren_3 = false;
	int beiJing1X = 0;
	int beiJing2X = 0;
	int beiJing1Y= 0;
	int beiJing2Y = -852;
	int ziDan_KaishiWeiZhi_X=244;
    int ziDan_KaishiWeiZhi_Y=723;
    int feiJiWeiZhi_X = 198;
    int feiJiWeiZhi_Y = 732;
    int diRen_X0,diRen_X1,diRen_X2,diRen_X3,diRen_Y0,diRen_Y1,diRen_Y2,diRen_Y3=0;
//	boolean处理
	boolean kaishi_zanting = false;
	窗口	ck	= null;
	定时器	ds1	= null;
	String player[] = new String [] {"player01","player02","player03","player04","player05","player06","player07","player08","player09","players10"};
	boolean yingXiongQieHuan = false;
	int index = 0;
	int ranDomNumber = 0;
	Game1()
	{
		//TODO:程序初始化在此
		p.play();
		ck = new 窗口();
		//窗口 宽+2*立体边, 高+2*立体边+标题栏
		ck.setSize(498,923);
		ck.setLocation(400,40);
		ck.setTitle("消灭蝙蝠	");
		//设定窗口可见性setVisible  true/fGDse
		ck.setVisible(true);
		//延时的毫秒
//		TODO:设置图像
		ImageIcon icon1 = new ImageIcon("images/logoZS.png");
		ck.setIconImage(icon1.getImage());
		ds1 = new 定时器(80); 
		
	}
	class 窗口 extends JFrame
	{
		菜单		cd		= null;
		面板		mb		= null;
		窗口监听器	exit	= null;
		键盘监听器	jp		= null;
		窗口()
		{
			jp = new 键盘监听器();
			this.addKeyListener(jp);

			cd = new 菜单();
			this.setJMenuBar(cd);

			mb = new 面板();
			this.add(mb);

			exit = new 窗口监听器();
			this.addWindowListener(exit);

			this.repaint();
		}
//==========================内部类:菜单类
		class 菜单 extends JMenuBar
		{
			JMenu		dan;	//菜单
			JMenuItem	xiang1; //菜单项
			菜单监听器		cdjtq;
			菜单()
			{
				dan = new JMenu("关于游戏"); //菜单
				xiang1 = new JMenuItem("声明"); //菜单项
				this.add(dan);
				dan.add(xiang1);
				cdjtq = new 菜单监听器();
				xiang1.addActionListener(cdjtq);
			}
//===============菜单监听
			class 菜单监听器 implements ActionListener
			{
				public void actionPerformed(ActionEvent e)
				{
					//TODO:菜单事件处理
					if (e.getSource() == xiang1)
					{
						About yuAbout= new About();
							yuAbout.about();
					}
				}
			}
		}
//================窗口监听
		class 窗口监听器 extends WindowAdapter
		{
			public void windowClosing(WindowEvent e)
			{
				ds1.xc.stop();
				System.exit(0);
			}
		}
		class 键盘监听器 implements KeyListener
		{
			//TODO:键盘处理,可加入KeyEvent.VK_XXX
			public void keyPressed(KeyEvent e)
			{
				switch (e.getKeyCode())
				{
//				开始写控制蝠式战机移动:
//				抽取蝠式战机的X_Y坐标变量,抽取子弹的X_Y坐标变量:
				case KeyEvent.VK_LEFT://if (jianpanbukeyong) {
						feiJiWeiZhi_X-=5;
						ziDan_KaishiWeiZhi_X-=5;
					}
					break;
				case KeyEvent.VK_RIGHT://if (jianpanbukeyong) {
						feiJiWeiZhi_X+=5;
						ziDan_KaishiWeiZhi_X+=5;
					}
					break;
				case KeyEvent.VK_UP://if (jianpanbukeyong) {
						feiJiWeiZhi_Y-=5;
						ziDan_KaishiWeiZhi_Y-=5;
					}
					break;
				case KeyEvent.VK_DOWN://if (jianpanbukeyong) {
						feiJiWeiZhi_Y+=5;
						ziDan_KaishiWeiZhi_Y+=5;
					}
					break;
				case KeyEvent.VK_SPACE:
					if (jianpanbukeyong) {
						kaishi_zanting = !kaishi_zanting;
						if (kaishi_zanting) {
								gameBg = "background";                         
							}else {
								gameBg = "pause";
							}
					}
					break;
				case KeyEvent.VK_ENTER:////					按下Enter切换战飞机
					yingXiongQieHuan = !yingXiongQieHuan;
					break;
					case KeyEvent.VK_ESCAPE:
						   System.exit(0);
						   break;
				}
				repaint();
			}

			public void keyReleased(KeyEvent e)
			{
			}
			public void keyTyped(KeyEvent e)
			{
			}
		}
		class 面板 extends JPanel
		{
			鼠标监听器	sb	= null;
			面板()
			{
				sb = new 鼠标监听器();
				this.addMouseListener(sb);
				this.addMouseMotionListener(sb);
			}
			class 鼠标监听器 extends MouseAdapter implements MouseMotionListener
			{
				public void mousePressed(MouseEvent e)
				{
				}

				public void mouseDragged(MouseEvent e)
				{
				}

				public void mouseMoved(MouseEvent e)
				{
				}

				public void mouseReleased(MouseEvent e)
				{
				}

				public void mouseClicked(MouseEvent e)//鼠标单击
				{
					//mx my鼠标的位置
					int mx = e.getX();
					int my = e.getY();
					//鼠标左键	BUTTON1、右键BUTTON3
					if (e.getButton() == MouseEvent.BUTTON1)
					{
						//TODO:鼠标左键单击 

					}

					repaint();
				}
			}

			public void paint(Graphics g)
			{
				//g.setColor(Color.BLUE);	//设定颜色:RED GREEN  BLUE  ORANGE  WHITE  GRAY BLACK PINK
				//g.drawRect(左,上,宽,高);	//矩形
				//g.fillRect(左,上,宽,高);	//实心矩形
				//g.drawOvGD(左,上,宽,高);	//椭圆
				//g.fillOvGD(左,上,宽,高);		//实心椭圆

				//Image  tu=(new ImageIcon( 路径 )).getImage();	//路径:图片-右键-属性-路径src/	
				//g.drawImage(tu,x,y,null);						

				//((Graphics2D)g).setStroke(new BasicStroke(线粗));//设置线的粗细
				//g.drawLine(点1X, 点1y, 点2X, 点2y);//画线
				
				//g.setFont(new Font("华文新魏", Font.BOLD, 22));//设置字体
				//g.drawString("文字", x, y);//设置文字
				
				//TODO:绘图在此
//				设置软件背景
				Image  background1=(new ImageIcon( "images/"+gameBg+".png" )).getImage();	//路径:图片-右键-属性-路径src/	
				g.drawImage(background1,0,beiJing1Y,null);		
					Image  background2=(new ImageIcon( "images/"+gameBg+".png" )).getImage();	//路径:图片-右键-属性-路径src/	
					g.drawImage(background2,0,beiJing2Y,null);
//				使用开始游戏讯号:boolean
//					开始游戏,可以,切换战斗机,开始发射弹药,添加战斗机(diren:敌人)
				Image  bianFuImage=(new ImageIcon( "images/"+feijitu+".png" )).getImage();	//路径:图片-右键-属性-路径src/	
				Image  ZIDAN=(new ImageIcon( "images/"+ziDan_SRC+".png" )).getImage();	//路径:图片-右键-属性-路径src/	
				if (zidanjizhongdiren_0) {
					System.out.println("敌人1未击中!");
				}else {
					Image  diren0=(new ImageIcon( "images/"+diRen0+".png" )).getImage();	
					g.drawImage(diren0,diRen_X0,diRen_Y0,null);
				}
				if (zidanjizhongdiren_1) {
					System.out.println("敌人2未击中!");
				}else {
					Image  diren1=(new ImageIcon( "images/"+diRen0+".png" )).getImage();	
					g.drawImage(diren1,diRen_X1,diRen_Y1,null);
				}
				if (zidanjizhongdiren_2) {
					System.out.println("敌人3未击中!");
				}else {
					Image  diren2=(new ImageIcon( "images/"+diRen0+".png" )).getImage();	
					g.drawImage(diren2,diRen_X2,diRen_Y2,null);
				}
				if (zidanjizhongdiren_3) {
					System.out.println("敌人2未击中!");
				}else {
					Image  diren3=(new ImageIcon( "images/"+diRen0+".png" )).getImage();	
					g.drawImage(diren3,diRen_X3,diRen_Y3,null);
				}	
				if (kaishi_zanting) {
					ziDan_SRC = "bullet";
//					当判断游戏是否暂停还是继续的时候,利用boolean变量控制是否绘制战机
//					在这里抽取战机的X_Y坐标变量
//					198,732,
					g.drawImage(bianFuImage,feiJiWeiZhi_X,feiJiWeiZhi_Y,null);
					g.drawImage(ZIDAN,ziDan_KaishiWeiZhi_X,ziDan_KaishiWeiZhi_Y,null);
//					在这里直接写出现的敌人:为了让游戏逼真,使用数组遍历random随机一下:
//					for循环遍历只是限定敌人个数,random才是令x,y坐标位置随机的算法
					
				}
			}
		}
	}	
	class 定时器 implements Runnable//实现Runnable接口
	{
		Thread	xc	= null;
		long	jianGe;

		定时器(long jianGe)
		{
			this.jianGe = jianGe;
			xc = new Thread(this);
			xc.start();
		}

		public void run()
		{
			while (true)
			{
				try
				{
					xc.sleep(jianGe);

					if (this == ds1)
					{
						//TODO:定时处理	
						if (yingXiongQieHuan) {
							feijiqihuan_zidanxianzaiweizhi_X1 = feiJiWeiZhi_X;
							if (index<9) {
								feijitu=player[index];
								index++;	
							}else if ( index==9 ) {
								feijitu=player[index];
								index=0;
//								这里必须加上,不然会有图片切换的卡顿
								feijitu=player[index];
							}
						}else {
							feijitu = "hero0";
						}
						if (yingXiongQieHuan) {
//							子单位置跟着换
						}

					
//						======================
//						======================
								if (kaishi_zanting) {
									if (beiJing1Y<850&&beiJing2Y<850) {
										beiJing1Y+=2;
										beiJing2Y+=2;
									}else if (beiJing1Y==850&&beiJing2Y<850) {
										beiJing2Y+=2;
										beiJing1Y = -850;
									}else if(beiJing1Y<850 && beiJing2Y==850) {
										beiJing1Y+=2;
										beiJing2Y = -850;
									}
								}
//================================
//								开始写子弹的自动移动:
								if (kaishi_zanting||yingXiongQieHuan) {
//									问题在这:不能一直小于,否则一直减下去
									int zidanweizhi_X = feiJiWeiZhi_X;
									if (yingXiongQieHuan) {
										ziDan_KaishiWeiZhi_X = zidanweizhi_X+98;
										if (ziDan_KaishiWeiZhi_Y <= 723 && ziDan_KaishiWeiZhi_Y>0) {
											ziDan_KaishiWeiZhi_Y-=10;
										}else if(ziDan_KaishiWeiZhi_Y<0){
											ziDan_KaishiWeiZhi_Y=723;
											ziDan_KaishiWeiZhi_Y-=10;
											System.out.println("测试提醒:子弹已经返回原处");
										}
									}else {
										if (ziDan_KaishiWeiZhi_Y <= 723 && ziDan_KaishiWeiZhi_Y>0) {
											ziDan_KaishiWeiZhi_Y-=10;
										}else if(ziDan_KaishiWeiZhi_Y<0){
											ziDan_KaishiWeiZhi_Y=723;
											ziDan_KaishiWeiZhi_Y-=10;
											System.out.println("测试提醒:子弹已经返回原处");
										}
								}
								}
//	===========================================
//								写敌人坐标		
								if (kaishi_zanting) {
									diRen_X0 = diRen_X0*4;
									diRen_X1 = diRen_X0+49;
									diRen_X2 = diRen_X1+98*2;
									diRen_X3 = diRen_X1+98*3;
//									坐标缓存:
									dzh_diren_X0=diRen_X0;
									dzh_diren_X1=diRen_X1;
									dzh_diren_X2=diRen_X2;
									dzh_diren_X3=diRen_X3;
									dzh_diren_Y0 = diRen_Y0;
									dzh_diren_Y1 = diRen_Y1;
									dzh_diren_Y2 = diRen_Y2;
									dzh_diren_Y3 = diRen_Y3;
//									第一个飞机
									if (diRen_Y0>=0&&diRen_Y0<852) {
										diRen_Y0+=5;
									}else if (diRen_Y0>852) {
										diRen_Y0 = 0;
										diRen_X0 = diRen_X0*4;
									}
//									第二个飞机
									if (diRen_Y1>=0&&diRen_Y1<852) {
										diRen_Y1+=6;
									}else if (diRen_Y1>852) {
										diRen_Y1 = 0;
										diRen_X1 = diRen_X0+49;
									}
//									第三个飞机
									if (diRen_Y2>=0&&diRen_Y2<852) {
										diRen_Y2+=11;
									}else if (diRen_Y2>852) {
										diRen_Y2 = 0;
										diRen_X2 = diRen_X1+49;
									}
//									第四个飞机
									if (diRen_Y3>=0&&diRen_Y3<852) {
										diRen_Y3+=8;
									}else if (diRen_Y3>852) {
										diRen_Y3 = 0;
										diRen_X3 = diRen_X1+98;
									}
								}			
								
//								打死
								Rectangle DIRen0 = new Rectangle(diRen_X0,diRen_Y0,40,40);
								Rectangle DIRen1 = new Rectangle(diRen_X1,diRen_Y1,40,40);
								Rectangle DIRen2 = new Rectangle(diRen_X2,diRen_Y2,40,40);
								Rectangle DIRen3 = new Rectangle(diRen_X3,diRen_Y3,40,40);
								Rectangle ZiDan = new Rectangle(ziDan_KaishiWeiZhi_X,ziDan_KaishiWeiZhi_Y,8,14);
								Rectangle Hreo = new Rectangle(feiJiWeiZhi_X,feiJiWeiZhi_Y,97,124);
//==========================================
//								子弹打中了敌人4
								if (kaishi_zanting) {
									if (DIRen3.intersects(ZiDan)) {
										int i;
//										局部变量:获取子弹的位置
										baozhahouzidan=true;
										zidanjizhongdiren_3 =  !zidanjizhongdiren_3;
										int  zidanxianzaiweizhi_X = feiJiWeiZhi_X;
										for ( i = 0; i < 4; i++) {
											diRen3 =  "airplane"+feijibaozhanumber[i];
											if (i==3) {	
//												只需要不绘制就可以
												diRen3 = null;
												ziDan_KaishiWeiZhi_X=zidanxianzaiweizhi_X+46;
												ziDan_KaishiWeiZhi_Y=723;
												diRen_Y3 = 0;
												break;}}}}
//==========================================
//								子弹打中了敌人1
								if (kaishi_zanting) {
									if (DIRen0.intersects(ZiDan)) {
										int i;
//										局部变量:获取子弹的位置
										baozhahouzidan=true;
										zidanjizhongdiren_0 = !zidanjizhongdiren_0;
										int  zidanxianzaiweizhi_X = feiJiWeiZhi_X;
										for ( i = 0; i < 4; i++) {
											diRen0 =  "airplane"+feijibaozhanumber[i];
											if (i==3) {	
												diRen0 = null;
												ziDan_KaishiWeiZhi_X=zidanxianzaiweizhi_X+46;
												ziDan_KaishiWeiZhi_Y=723;
												diRen_Y0 = 0;
												break;
											}}}}
								
//								============================
								//==========================================
//								子弹打中了敌人2
								if (kaishi_zanting) {
									if (DIRen1.intersects(ZiDan)) {
										int i;
//										局部变量:获取子弹的位置
										baozhahouzidan=true;
										zidanjizhongdiren_1 = !zidanjizhongdiren_1;
										int  zidanxianzaiweizhi_X = feiJiWeiZhi_X;
										for ( i = 0; i < 4; i++) {
											diRen1 =  "airplane"+feijibaozhanumber[i];
											if (i==3) {	
												diRen1 = null;
												ziDan_KaishiWeiZhi_X=zidanxianzaiweizhi_X+46;
												ziDan_KaishiWeiZhi_Y=723;
												diRen_Y1 = 0;
												break;
											}}}}
								
//								============================
								//==========================================
//								子弹打中了敌人3
								if (kaishi_zanting) {
									if (DIRen2.intersects(ZiDan)) {
										int i;
//										局部变量:获取子弹的位置
										baozhahouzidan=true;
										zidanjizhongdiren_2 = !zidanjizhongdiren_2;
										int  zidanxianzaiweizhi_X = feiJiWeiZhi_X;
										for ( i = 0; i < 4; i++) {
											diRen2 =  "airplane"+feijibaozhanumber[i];
											if (i==3) {	
												diRen2 = null;
												ziDan_KaishiWeiZhi_X=zidanxianzaiweizhi_X+46;
												ziDan_KaishiWeiZhi_Y=723;
												diRen_Y2 = 0;
												break;
											}}}}
								
//								============================
//								战机碰上了敌人
								if (kaishi_zanting) {
									if (Hreo.intersects(DIRen0)||Hreo.intersects(DIRen1)||Hreo.intersects(DIRen2)||Hreo.intersects(DIRen3)) {
										gameBg = "gameover";
										jianpanbukeyong = false;
										break;
									}
								}
//								
								if (baozhahouzidan) {
									if (ziDan_KaishiWeiZhi_Y <= 723 && ziDan_KaishiWeiZhi_Y>0) {
										ziDan_KaishiWeiZhi_Y-=10;
									}else if(ziDan_KaishiWeiZhi_Y<0){
										ziDan_KaishiWeiZhi_Y=723;
										ziDan_KaishiWeiZhi_Y-=10;
										System.out.println("测试提醒:子弹已经返回原处");
									}
									if (diRen_Y3>=0&&diRen_Y3<852) {
										diRen_Y3+=7;
									}else if (diRen_Y3>852) {
										diRen_Y3 = 0;
										diRen_X3 = diRen_X1+98;
									}
									
								}
//								==================================
//								子弹击中3事件:
								if (zidanjizhongdiren_3&&kaishi_zanting) {
									if (diRen_Y0>=0&&diRen_Y0<852) {
										diRen_Y0+=6;
									}else if (diRen_Y0>852) {
										diRen_Y0 = 0;
										diRen_X0 = diRen_X0*4;
									}
//									第二个飞机
									if (diRen_Y1>=0&&diRen_Y1<852) {
										diRen_Y1+=8;
									}else if (diRen_Y1>852) {
										diRen_Y1 = 0;
										diRen_X1 = diRen_X0+49;
									}
//									第三个飞机
									if (diRen_Y2>=0&&diRen_Y2<852) {
										diRen_Y2+=9;
									}else if (diRen_Y2>852) {
										diRen_Y2 = 0;
										diRen_X2 = diRen_X1+49;
									}
									zidanjizhongdiren_3 = !zidanjizhongdiren_3;
																}
//================================================
//								zidanjizhongdiren_0 子弹击中敌人1
								if (zidanjizhongdiren_0&&kaishi_zanting) {
									if (diRen_Y3>=0&&diRen_Y3<852) {
										diRen_Y3+=6;
									}else if (diRen_Y3>852) {
										diRen_Y3 = 0;
										diRen_X3 = diRen_X3*4;
									}
//									第二个飞机
									if (diRen_Y1>=0&&diRen_Y1<852) {
										diRen_Y1+=8;
									}else if (diRen_Y1>852) {
										diRen_Y1 = 0;
										diRen_X1 = diRen_X0+49;
									}
//									第三个飞机
									if (diRen_Y2>=0&&diRen_Y2<852) {
										diRen_Y2+=9;
									}else if (diRen_Y2>852) {
										diRen_Y2 = 0;
										diRen_X2 = diRen_X1+49;
									}
																}
//===================================================
								//================================================
//								zidanjizhongdiren_1 子弹击中敌人2
								if (zidanjizhongdiren_1&&kaishi_zanting) {
									if (diRen_Y0>=0&&diRen_Y0<852) {
										diRen_Y0+=6;
									}else if (diRen_Y0>852) {
										diRen_Y0 = 0;
										diRen_X0 = diRen_X0*4;
									}
//									第4个飞机
									if (diRen_Y3>=0&&diRen_Y3<852) {
										diRen_Y3+=8;
									}else if (diRen_Y3>852) {
										diRen_Y3 = 0;
										diRen_X3 = diRen_X3+49;
									}
//									第三个飞机
									if (diRen_Y2>=0&&diRen_Y2<852) {
										diRen_Y2+=9;
									}else if (diRen_Y2>852) {
										diRen_Y2 = 0;
										diRen_X2 = diRen_X1+49;
									}
																}
//===================================================
								//================================================
//								zidanjizhongdiren_2 子弹击中敌人3
								if (zidanjizhongdiren_2&&kaishi_zanting) {
									if (diRen_Y0>=0&&diRen_Y0<852) {
										diRen_Y0+=6;
									}else if (diRen_Y0>852) {
										diRen_Y0 = 0;
										diRen_X0 = diRen_X0*4;
									}
//									第二个飞机
									if (diRen_Y1>=0&&diRen_Y1<852) {
										diRen_Y1+=8;
									}else if (diRen_Y1>852) {
										diRen_Y1 = 0;
										diRen_X1 = diRen_X0+49;
									}
//									第4个飞机
									if (diRen_Y3>=0&&diRen_Y3<852) {
										diRen_Y3+=9;
									}else if (diRen_Y3>852) {
										diRen_Y3 = 0;
										diRen_X3 = diRen_X3+49;
									}
																}
//===================================================
								//================================================
//								zidanjizhongdiren_0 子弹击中敌人4
//===================================================
						ck.repaint();
					}
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
				
			}
		}
	}

	//main主方法 ,主类的“入口方法”
	public static void main(String[] args)
	{
		
        
		new Game1();
	}
	
}


好了,程序写完了,但是美中不足,缺了啥?对,缺了BGM,背景音乐,好了,上背景音乐的源码:

package com.fntp.mainFrame;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JApplet;
		public class PlayMusic {
			public static AudioClip loadSound(String filename) {
					URL url = null;
						try {
							url = new URL("file:" + filename);
						} catch (MalformedURLException e) {
						}
						return JApplet.newAudioClip(url);
			}
			public void play() {
				AudioClip christmas = loadSound("music/bjmusic.mp3");
				christmas.loop();
				christmas.play();
			}
		}

(这块也很简单,我就不过多赘述了,大家看代码就好了)
除此之外,我给大家提供一个另一种,面向对象的写法:
给大家提供一个面向对象的写法,并且给出面向对象的
附带面向对象版下载链接:
点击此处下载面向对象版本的飞机大战(半成品)

最后附上程序运行截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了20 篇原创文章 · 获赞 37 · 访问量 8202

猜你喜欢

转载自blog.csdn.net/weixin_44085593/article/details/104357901
今日推荐