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

📄 fly.java

📁 是一个applet小游戏
💻 JAVA
字号:
import java.awt.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;

public class fly extends Applet
implements Runnable,KeyListener
{
  int          AppletWidth,AppletHeight,FlyWidth,FlyHeight,DrWidth,DrHeight,
               ZdWidth,ZdHeight,DrzdWidth,DrzdHeight;

  //以上是Applet、飞机、敌人、子弹、敌方子弹的宽度,
  int          level,score,sml;//级别、分数\生命力
  int          zds;//子弹数
  Image        fly_image1,fly_image2,OffScreen,dr_image1;//飞机图片
  Image        drzd_image; // 敌人子弹图片
  Image        zd_image;//子弹图片,其中,zd_image为画图的图片,其它为提取的图片
  Image        zdlx_image;//子弹图片,其中,zd_image为画图的图片,其它为提取的图片
  StartScreen  S_Screen;
  Graphics     drawOffScreen;
  MediaTracker MT;
  Thread       newThread;
  boolean      StartGame,EndGame;
  CloseDialog  CD;
  FlyObject    flyobject;
  ZdObject     zdobject[];
  DrObject     drobject[];
  DrzdObject   drzdobject[];//敌人子弹
  int ls;//用于增加步长

  public void init()
   {
      CD      = new CloseDialog(this,new Frame());
      setLayout(new BorderLayout());
      AppletWidth   = getSize().width;
      AppletHeight  = getSize().height;
      setBackground(Color.DARK_GRAY);
      StartGame     = true;
      EndGame       = false;

      level         = 1;//级别
      sml           =100;//生命力
      ls            =0;
      score         = 0;
      zds           =0;//子弹为0
      MT       = new MediaTracker(this);
      fly_image1      = getImage(getDocumentBase(),"fj1.gif");
      fly_image2      = getImage(getDocumentBase(),"fj2.gif");
      dr_image1       = getImage(getDocumentBase(),"dr.gif");
      zd_image        = getImage(getDocumentBase(),"zd0.gif");
      drzd_image      = getImage(getDocumentBase(),"drzd.gif");
      MT.addImage(fly_image1,0);
      MT.addImage(fly_image2,0);
      MT.addImage(dr_image1,0);
      MT.addImage(zd_image,0);
      MT.addImage(drzd_image,0);
      try
      {
         MT.waitForAll();
      }
      catch(InterruptedException E){ }

      S_Screen = new StartScreen(AppletWidth,AppletHeight,this,
                                 fly_image1,fly_image2);
      FlyWidth  = fly_image2.getWidth(this); //我方飞机宽度
      FlyHeight = fly_image2.getHeight(this); //我方飞机高度
      DrWidth  = dr_image1.getWidth(this); //敌方飞机宽度
      DrHeight = dr_image1.getHeight(this); //敌方飞机高度
      ZdWidth    = zd_image.getWidth(this);
      ZdHeight = zd_image.getHeight(this);
      DrzdWidth= drzd_image.getWidth(this);
      DrzdHeight= drzd_image.getHeight(this);

      drobject   = new DrObject[16];
      drzdobject   = new DrzdObject[16];
      for(int i=0;i<16;i++)
      {

         drobject[i] = new DrObject(dr_image1,this,i+100,AppletWidth,AppletHeight,DrWidth,DrHeight,i);
         drobject[i].setLocation(AppletWidth-(i%4+1)*DrWidth,
                                  AppletHeight/2+i/4*DrHeight);
         drzdobject[i] = new DrzdObject(drzd_image,this);

      }
      flyobject      = new FlyObject(fly_image1,this);
      zdobject   = new ZdObject[30];
      for(int i=0;i<30;i++)
      {
        zdobject[i]= new ZdObject(zd_image,this,AppletWidth);
      }

      OffScreen      = createImage(AppletWidth,AppletHeight);
      drawOffScreen  = OffScreen.getGraphics();
      addKeyListener(this);
     }

  public void start()
   {
      newThread = new Thread(this);
      newThread.start();
   }
    public void stop()
   {
      newThread = null;
   }
     public void keyTyped(KeyEvent e)
     {}
     public void keyReleased(KeyEvent e)
     {}

 	public void keyPressed(KeyEvent e)//判断输入的是哪个键,并做出响应
	{
	int fly_x,fly_y;
		switch(e.getKeyCode())
		{
			case KeyEvent.VK_ENTER:
		     if(StartGame){
                StartGame     = false;
                EndGame       = true;
                repaint(); }
				break;
			case KeyEvent.VK_ESCAPE:
 			 if(!StartGame){
  		        newThread.suspend();
                CD.show();   //对话框
                if(StartGame){
                    score         = 0;
                    newThread = new Thread(this);
                    newThread.start();//重新开始
                  }
                }
                break;
             case KeyEvent.VK_8:
             case KeyEvent.VK_UP:
                fly_x=flyobject.getX();
                fly_y=flyobject.getY()-1;
                if (fly_y<2) fly_y=2;
                flyobject.setLocation(fly_x,fly_y);
                break;
            case KeyEvent.VK_4:
            case KeyEvent.VK_LEFT:
                fly_x=flyobject.getX()-1;
                fly_y=flyobject.getY();
                if (fly_x<2) fly_x=2;
                flyobject.setLocation(fly_x,fly_y);
                break;
            case KeyEvent.VK_6:
            case KeyEvent.VK_RIGHT:
                fly_x=flyobject.getX()+1;
                fly_y=flyobject.getY();
                if(fly_x>(AppletWidth-FlyWidth)) fly_x= AppletWidth-FlyWidth;
                flyobject.setLocation(fly_x,fly_y);
                break;
             case KeyEvent.VK_2:
             case KeyEvent.VK_DOWN:
                fly_x=flyobject.getX();
                fly_y=flyobject.getY()+1;
                if (fly_y>(AppletHeight-FlyHeight)) fly_y=(AppletHeight-FlyHeight);
                flyobject.setLocation(fly_x,fly_y);
                break;
             case KeyEvent.VK_5:
                fly_x=flyobject.getX()+20;
                fly_y=flyobject.getY()+2;
                if(zds>19)zds=0;
                zdobject[zds].visible=true;
                zdobject[zds].setLocation(fly_x,fly_y);
                zds++;
                break;
			default:break;
		}
	}
   public void paint(Graphics g)
   {
      drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);

      if(StartGame)

         S_Screen.paintScreen(drawOffScreen);
      else
      {
        ls++;
        if(ls>50)
           ls=0;
        flyobject.paintObject(drawOffScreen);
        for(int i=0;i<30;i++)
            zdobject[i].paintObject(drawOffScreen);
        int X = flyobject.getX();   //飞机位置
        int Y = flyobject.getY();
        for(int i=0;i<16;i++) //刷新敌人飞机、子弹
        {
          drobject[i].setFly_Y(Y);
          drobject[i].paintObject(drawOffScreen);
            if(ls==1&&!drzdobject[i].visible&&drobject[i].visible&&drobject[i].X>AppletWidth/3){
              //发射子弹
                 drzdobject[i].set_X(drobject[i].X);
                 drzdobject[i].set_Y(drobject[i].Y);
                 drzdobject[i].visible=true;
                 drzdobject[i].paintObject(drawOffScreen);
              }else{
              //否则子弹运行
                drzdobject[i].paintObject(drawOffScreen);
              }//end if
        //以下应判断我方是否被敌方子弹打中 ,若击中,我方生命减1,若撞什么,减2,敌方死亡
        //敌方子弹位置+图片宽度>我机X,敌方子弹位置<我机X+我机宽度, 敌方子弹位置+图片高度>我机Y,敌方子弹位置<我机Y+我机高度,且子弹可见
           if((drzdobject[i].X+DrzdWidth)>X&&drzdobject[i].X<(X+FlyWidth-2)&&(drzdobject[i].Y+DrzdHeight)>Y&&drzdobject[i].Y<(Y+FlyHeight)&&drzdobject[i].visible)
           {
               drzdobject[i].visible=false;
               sml--;
           }
        //敌机位置+图片宽度>我机X,敌机位置<我机X+我机宽度, 敌机位置+图片高度>我机Y,敌机位置<我机Y+我机高度,且敌机可见
           if((drobject[i].X+DrWidth)>X&&drobject[i].X<(X+FlyWidth-2)&&(drobject[i].Y+DrHeight)>Y&&drobject[i].Y<(Y+FlyHeight)&&drobject[i].visible)
           {
               drobject[i].visible=false;
               drobject[i].X=AppletWidth-(i%4+1)*DrWidth;
               drobject[i].Y=AppletHeight/2+i/4*DrHeight;
               drobject[i].sml=2;
               sml-=2;
           }
        }//end for

       //以下判断我方子弹是否打重敌人或子弹,打中子弹+1,打中敌人加5分,敌机生生命力减1,对方不可见
        //应根据子弹类型(i),0/4一条,1/2两条,3三条,均有X,Y。
       for(int i=0;i<30;i++)
        {
           if(zdobject[i].visible)//如果子弹可见
            {
            zdobject[i].paintObject(drawOffScreen);
               for(int j=0;j<16;j++)
               {
                if((drzdobject[j].X+DrzdWidth)>=zdobject[i].X&&drzdobject[j].X<=(zdobject[i].X+ZdWidth)&&(drzdobject[j].Y+DrzdHeight)>=zdobject[i].Y&&drzdobject[j].Y<=(zdobject[i].Y+ZdHeight)&&drzdobject[j].visible)
                  {
                    drzdobject[j].visible=false;
                    zdobject[i].visible=false;
                    score++;
                  }
                if(zdobject[i].visible&&(drobject[j].X+DrzdWidth)>=zdobject[i].X&&drobject[j].X<=(zdobject[i].X+ZdWidth)&&(drobject[j].Y+DrzdHeight)>=zdobject[i].Y&&drobject[j].Y<=(zdobject[i].Y+ZdHeight)&&drobject[j].visible)
                  {
                    score+=2;
                    drobject[j].sml--;
                    if(drobject[j].sml<=0)
                    {
                       drobject[j].visible=false;
                       drobject[j].X=AppletWidth-(j%4+1)*DrWidth;
                       drobject[j].Y=Y-2+j/4*DrHeight;
                       drobject[j].sml=2;
                    }
                    zdobject[i].visible=false;
                  }
               }
            }
         }//end for
      }//end if
       g.drawImage(OffScreen,0,0,this);
       if(score/500>=level)
       {
         level++;
         for(int j=0;j<16;j++)
            {
               drobject[j].setShow(50+2*level);
            }
       }
      this.showStatus("生命力:"+sml+"  得分:"+score+"  水平: "+level);
   }

   public void update(Graphics g)
   {
      paint(g);
   }

 public void run()
   {
      while(newThread != null)
      {
         repaint();

         try
         {
            Thread.sleep(33);
         }
         catch(InterruptedException E){ }

         if(StartGame)
            S_Screen.UpdateStatus();
        else
         {
            for(int i=0;i<16;i++)
               drobject[i].updateState();
         }
        }
    }

}

⌨️ 快捷键说明

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