⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 planegame.java

📁 飞机小游戏
💻 JAVA
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
class userclass implements Serializable//玩家信息类
{
	 int uscore;
     String uname;
}

class Login//登陆窗体类
{
	JFrame frame;
	JPanel panel;
	JLabel user,pass;
	JTextField Tu;
	JPasswordField Tp;
	JButton ok,cancle;
	String username;
	String pass1;
	public Login()
	{
		frame=new JFrame("Login");
		panel=new JPanel();
		panel.setLayout(null);
		panel.setBackground(Color.yellow);
		user=new JLabel("UserName:");
		pass=new JLabel("PassWord:");
		Tu=new JTextField(10);
		Tp=new JPasswordField(10);
		ok=new JButton("确 定");
		cancle=new JButton("取 消");
		okand o=new okand();
		user.setBounds(20,20,100,50);
		pass.setBounds(20,40,100,50);
		Tu.setBounds(90,30,150,20);
		Tp.setBounds(90,60,150,20);
		ok.setBounds(50,100,70,30);
		ok.addActionListener(o);
		ok.setMnemonic(KeyEvent.VK_ENTER);
		cancle.setBounds(150,100,70,30);
		cancle.addActionListener(o);
		username="longking";
		pass1="game";
		panel.add(user);
		panel.add(pass);
		panel.add(Tu);
		panel.add(Tp);
		panel.add(ok);
		panel.add(cancle);
		frame.getContentPane().add(panel);
		frame.setSize(300,200);
		frame.setVisible(true);
		
	}
	class okand implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			JButton source=(JButton)e.getSource();
			if(source==ok)
			{
				if(username.equals(Tu.getText()) && pass1.equals(Tp.getText()))
				{
					
					new GameFrame();
					
				}
				else
				{
		            JOptionPane.showMessageDialog(null,"你的输入有误,请重新输入","错误",JOptionPane.CANCEL_OPTION);
				}
				 
			}
			if(source==cancle)
			{
				System.exit(0);
			}
		}
	}
}

class GameFrame//游戏主窗体类
{
	JFrame frame;
	JLabel backgroud;
	JPanel panel;
	JLabel planeLabel;
	JLabel lifeLabel;
	JLabel scoreLabel;
	JLabel gamendLabel;
	JLabel sname;
	JLabel sscore;
	Icon []dong;

	int score=0;//分数
	int life=100;//生命值
	int myboombx,myboomby;//用于存放我机子弹的随机位置
	Icon []boom;
	int x=250,y=550;//我机的初始位置
	Random r1=new Random();
	Random r2=new Random();
	Random r3=new Random();
	Random r4=new Random();
	int x1,y1,x2,y2;
	boolean flag=true;
	boolean flag1=true;
	planeMove p=new planeMove();//
	
	GameFrame()
	{
		boom=new Icon[16];//爆炸的16张图片
		
		boom[0]= new ImageIcon("e1.gif");
		boom[1]= new ImageIcon("e2.gif");
		boom[2]= new ImageIcon("e3.gif");
		boom[3]= new ImageIcon("e4.gif");
		boom[4]= new ImageIcon("e5.gif");
		boom[5]= new ImageIcon("e6.gif");
		boom[6]= new ImageIcon("e7.gif");
		boom[7]= new ImageIcon("e8.gif");
		boom[8]= new ImageIcon("e9.gif");
		boom[9]= new ImageIcon("e10.gif");
		boom[10]= new ImageIcon("e11.gif");
		boom[11]= new ImageIcon("e12.gif");
		boom[12]= new ImageIcon("e13.gif");
		boom[13]= new ImageIcon("e14.gif");
		boom[14]= new ImageIcon("e15.gif");
		boom[15]= new ImageIcon("e16.gif");
       
        dong=new Icon[10];//广告的10张动态图片
        dong[0]=new ImageIcon("001.gif");
        dong[1]=new ImageIcon("002.gif");
        dong[2]=new ImageIcon("003.gif");
        dong[3]=new ImageIcon("004.gif");
        dong[4]=new ImageIcon("005.gif");
        dong[5]=new ImageIcon("006.gif");
        dong[6]=new ImageIcon("007.gif");
        dong[7]=new ImageIcon("008.gif");
        dong[8]=new ImageIcon("009.gif");
        dong[9]=new ImageIcon("010.gif");
        
        userclass us=new userclass();
        try
        {
            FileInputStream file=new FileInputStream("data.txt");//从文件读入玩家信息
		    ObjectInputStream in=new ObjectInputStream(file);
		    us=(userclass)in.readObject();	
        }
        catch(Exception e){}
		System.out.println("reader has done");
        sname=new JLabel("上次玩家姓名:"+us.uname);
        sname.setBounds(450,550,150,30);
        sname.setForeground(Color.green);
        sscore=new JLabel("上次玩家分数:"+us.uscore);
        sscore.setBounds(450,567,110,30);
        sscore.setForeground(Color.white);
        scoreLabel=new JLabel("分数为:"+score);
        scoreLabel.setBounds(450,612,100,30);
        scoreLabel.setForeground(Color.WHITE);
        lifeLabel=new JLabel("生命值:"+life);
        lifeLabel.setBounds(450,595,100,30);
        lifeLabel.setForeground(Color.RED);
        gamendLabel=new JLabel("GAME  OVER");
        gamendLabel.setForeground(Color.WHITE);
        gamendLabel.setBounds(219,500,100,50);
        gamendLabel.setVisible(false);
        Icon girls=new ImageIcon("123.jpg");
        JLabel tu=new JLabel(girls);
        tu.setBounds(456,30,230,200);
        Icon tian=new ImageIcon("069.jpg");
        JLabel Tian=new JLabel(tian);
        Tian.setBounds(450,0,250,550);
        
		frame=new JFrame("女子星际大战");//为什么是女子,因为我喜欢
		frame.getContentPane().setLayout(null);
		frame.getContentPane().setBackground(Color.BLACK);
		frame.getContentPane().add(tu);
		panel=new JPanel();
	    
		panel.setLayout(null);
		panel.setBackground(Color.BLACK);
		Icon plane=new ImageIcon("plane.gif");
		planeLabel=new JLabel(plane);
		planeLabel.setBounds(x,y,50,50);
		planeboomb o=new planeboomb();
		JTextField jf=new JTextField(10); 
		jf.addKeyListener(o);
		new BackView();
        new BackView();
	    panel.add(jf);	    
		panel.add(planeLabel);
		panel.add(gamendLabel);	
		frame.getContentPane().add(sname);
		frame.getContentPane().add(sscore);
		frame.getContentPane().add(lifeLabel);
		frame.getContentPane().add(scoreLabel);
		panel.setAutoscrolls(false);
		panel.setBounds(0,0,450,700);
		frame.getContentPane().add(panel);
		frame.getContentPane().add(Tian);
		
		frame.setSize(700,700);
		frame.setVisible(true);
		
	}
	class jilu//记录玩家的信息类
    {
	   JFrame frame;
	   JPanel panel;
	   JLabel user,pass;
	   JTextField Tu;
	   JButton ok,cancle;
	   Socket s;
	   userclass u;
	   ObjectOutputStream ou;
	   ObjectInputStream oi;
	   public jilu()
	  {
		frame=new JFrame("玩家签名");
		panel=new JPanel();
		panel.setLayout(null);
		user=new JLabel("PlayerName:");
		Tu=new JTextField(10);
		ok=new JButton("OK");
		okand o=new okand();
		cancle=new JButton("Cancle");
		user.setBounds(20,20,100,50);
		Tu.setBounds(100,36,150,20);
		ok.setBounds(50,75,90,30);
		cancle.setBounds(160,75,90,30);
		ok.addActionListener(o);
		cancle.addActionListener(o);
		panel.add(Tu);
		panel.add(ok);
		panel.add(user);
		panel.add(cancle);
		panel.setBackground(Color.PINK);
		frame.getContentPane().add(panel);
		frame.setSize(300,150);
		frame.setVisible(true);
		
	   }
	   class okand implements ActionListener
	   {
		public void actionPerformed(ActionEvent e)
		{
			JButton source=(JButton)e.getSource();
			if(source==ok)
			{
				try
				{
					u=new userclass();
					u.uscore=score;
					u.uname=Tu.getText();
					s=new Socket("127.0.0.1",5000);
					ou=new ObjectOutputStream(s.getOutputStream());
					ou.writeObject(u);
				}
				catch(Exception bb){System.out.println(bb);}
				System.exit(0);
			 }
			 if(source==cancle)
			 {
			 	System.exit(0);
			 }
		   }
	   }
}
	class BackView extends Thread //背景类
	{
		Random r7=new Random();
		JLabel planeboom;
		JLabel dongtu;
		int k;
		public BackView()
		{
			dongtu=new JLabel(dong[5]);
			dongtu.setBounds(490,520,290,180);
			planeboom=new JLabel(boom[0]); 			
 			panel.add(planeboom);
 			frame.getContentPane().add(dongtu);
 		    new Thread(this).start();
 		    this.setPriority(10);
		}
		public void run()
 		{
	        while(y1<=700)
	        {
	        	k=r7.nextInt(10);
	        	dongtu.setIcon(dong[k]);
	        	x1=r1.nextInt(500);
	        	y1=r2.nextInt(300);
	        	planeboom.setBounds(x1,y1,100,100);
	        	try
	        	{
	        		this.wait(1000);
	        	}
	        	catch(Exception w){}
	        	for(int i=1;i<16;i++)
 			    {
 				   planeboom.setIcon(boom[i]);
 				   try
				   {
					  this.sleep(80);						   
				   }
			       catch(InterruptedException e)
				   {
				   }  
	        	} 
	        }	
 		}
	}

	
	class planeboomb implements KeyListener //键盘事件,用来控制我机子弹的发射和敌机的出现
	{
		public void keyTyped(KeyEvent e)
		{}
		public void keyPressed(KeyEvent e)
		{
			char c=e.getKeyChar();
			if(c=='s')
			{
			   if(flag==true)
			   {
			   	new myboomMove(planeLabel);
			   }		
			}
			if(c=='w')
			{
			   panel.addMouseMotionListener(p);
			   if(flag==true)
			   {
			     new EnemyPlane();
			   }			   
			}
		}
		public void keyReleased(KeyEvent e)
		{}
	}
	
	class planeMove implements MouseMotionListener//鼠标事件,用来控制我机的运动
	{
        public void mouseMoved(MouseEvent e)
        {
        	x=e.getX();
        	y=e.getY();
        	if(flag==true)
        	{
        		planeLabel.setLocation(x-20,y-20);
        	}
        }
        public void mouseDragged(MouseEvent e)	
        {
        }       
 	}
 	
 	class myboomMove extends Thread//我机子弹的线程
 	{
 		JLabel picplane;
 		JLabel Eplane;
 		JLabel planeboom;
 		enemy enemyplane;
 		myboomMove(JLabel pic)
 		{
 			picplane=pic;
 			planeboom=new JLabel(boom[0]);
 			planeboom.setBounds(x+25,y,50,50);
 			panel.add(planeboom);
 			planeboom.setLocation(planeboom.getX()-45,planeboom.getY()-78);
 			
 			new Thread(this).start();
 		}
 		public void run()
 		{
	        while(true)
	        {
	        	myboombx=planeboom.getX();myboomby=planeboom.getY();
	        	planeboom.setLocation(myboombx,myboomby-50); 
	        	try
	        	{
	        		this.sleep(70);
	        		if(planeboom.getY()<=10)
				    {
					    this.stop();  	 
				    }	
	        	}
	        	catch(Exception e){}	
	        }
 		}
 	}
 	
 	class EnemyPlane extends Thread//敌机的运动线程
 	{
 		JLabel Eplane;
 		JLabel planeboom;
 		int k=0;
 		int x,y;
	    Random r3=new Random();
	    Random r4=new Random();
 		public EnemyPlane()
 		{
 			x2=r3.nextInt(500);
	        y2=r4.nextInt(80);
 			Icon Ep=new ImageIcon("plane2.gif");
 			Eplane=new JLabel(Ep);
 	        panel.add(Eplane);	
 	    	Eplane.setBounds(x2,y2,60,100);
 			planeboom=new JLabel(boom[0]);
 			planeboom.setVisible(true); 				
 			panel.add(planeboom);
 			new Thread(this).start();
 			Eplane.setVisible(true);
 		}		
 		public void run()
 		{
 			//Random r8=new Random();
 		    Random r6=new Random();	
 			while(Eplane.getY()<=700&&Eplane.getX()<=600)
 			{  
 			   
 			    double ro=300;
 			    double  ex=Eplane.getX();
 			    double  ey=Math.sqrt(ro*ro-ex*ex);
 			    Eplane.setLocation((int)ex+10,(int)ey+5);
 			    x1=Eplane.getX();
 			    y1=Eplane.getY();
 			    if(flag==true&&k%8==0)
 			    {
 			    	new Enemyboomb(x1+15,y1);
 			    }
 				try
 				{	 
 					this.sleep(100);
 				    if((myboombx+25)<=(Eplane.getX()+50)&&(myboombx+25)>=(Eplane.getX())&&(myboomby+25)<=(Eplane.getY()+50))
 				    {
                    	score+=100;
 
 				    	String a=Integer.toString(score);
 				    	scoreLabel.setText("分数为:"+a);
 				        for(int m=0;m<16;m++)
 			            {
 			               
 				           Eplane.setIcon(boom[m]);
 				           try
				           {
					           this.sleep(100);						   
				           }
			               catch(InterruptedException e)
				           {
				           }  
	        	        } 
	        	        Eplane.setVisible(false);
 				    	Eplane=null;
	        	        flag1=false;
	        	        this.stop();
	        	          	
 				    }
 				}
 				catch(Exception e){}
 				if(flag1==false&&flag==true)
 				{
 					new EnemyPlane();
 					flag1=true;
 				}
 			}			
 		}
 		
 	}
 	
 	class Enemyboomb extends Thread//敌机子弹的线程
 	{
 		JLabel Eboomb;
 		public Enemyboomb(int a,int b)
 		{
 			int c=a,d=b;
 			Eboomb=new JLabel(boom[0]);
 			Eboomb.setBounds(c,d,50,100);
 			Eboomb.setVisible(true);

 			lifeLabel.setVisible(true);
 			panel.add(Eboomb);

 			new Thread(this).start();
 		};
 		public void run()
 		{ 			
 			while(Eboomb.getY()<=700)
 			{
 				Eboomb.setLocation(Eboomb.getX(),Eboomb.getY()+50);
 				if(Eboomb.getX()>=planeLabel.getX()-30&&Eboomb.getX()<=planeLabel.getX()+30&&Eboomb.getY()>=planeLabel.getY()-40&&Eboomb.getY()<=planeLabel.getY()+40)
 				{
 					life-=5;
 					String b=Integer.toString(life);
 					lifeLabel.setText("生命值:"+b);
 					if(life==0)
 					{
 						planeLabel.setVisible(false);
					    planeLabel=null;
					    flag=false; 
 					   for(int i=1;i<16;i++)
 			           {
 				           Eboomb.setIcon(boom[i]);
 				           try
				           {
					           this.sleep(150);
					       }
			               catch(Exception e)
				           {	       
	   			           }
	   			       }
	   			       lifeLabel.setText("生命值:"+b);
	   			       while(gamendLabel.getY()>=300)
	   			       {
	   			       	   gamendLabel.setVisible(true);
					       gamendLabel.setLocation(gamendLabel.getX(),gamendLabel.getY()-4);
					       try
					       {
					       	this.sleep(50);
					       }
					       catch(Exception e){}
					         
					   }
					   new jilu();
	        	    }
	        	    Eboomb.setVisible(false);
		            Eboomb=null;
		            
 				}
 				try
 				{
 					this.sleep(150);
 				}
 				catch(Exception e){}
 				
 			}
 		}
 	}
}


public class planeGame
{
     public static void main(String s[])
     {
       new Login();   
     }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -