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

📄 absolute.java

📁 一个射击类的小游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    if (firecnt != 0) {
      goff.drawImage(fire[firecnt-1], x+( (sxsize-sxfire) / 2 ), y+sysize, this); // engine fire
    }
    firecnt++;
    if (firecnt > 2) firecnt=0;
    Collisions();

    if (shield>0) {
	goff.setColor(new Color(0x00ffff));
	goff.drawOval(x-shield, y-shield, sxsize+shield*2, sysize+shield*2);
	shield--;
    }

  }

  public void ShowScore()
  {
    String s;
    int my;
    sstretch = (xSize-txtalign*2)/Math.max(bmax,smax);
    // Laser bar
    my = d.height-scoreheight+10;
    goff.setColor(new Color(0x00ff96));
    goff.drawRect(txtalign, my-10, bmax*sstretch, 10);
    goff.setFont(smallfont);
    s="laser: "+bcur+"/"+bmax;
    goff.fillRect(txtalign, my-10, bcur*sstretch, 10);
    goff.drawString(s,10,my);
    // Shield bar
    my += 15;
    goff.setColor(new Color(0x00ffff));
    goff.drawRect(txtalign, my-10, smax*sstretch, 10);
    goff.setFont(smallfont);
    s="shield: "+scur+"/"+smax;
    goff.fillRect(txtalign, my-10, scur*sstretch, 10);
    goff.drawString(s,10,my);
    // Score
    my += 20;
    goff.setColor(new Color(0xffffff));
    goff.setFont(largefont);
    s="score: "+score;
    goff.drawString(s,10,my);
  }

  public void MoveShip()
  {
    int xx, yy;
    oldx = x;
    oldy = y;

    xx = mousex;
    if (xx>0) {
	yy = mousey;
	if (xx<x) dx=-1;
	if (xx>x+sxsize) dx=1;
	if (yy<y) dy=-1;
	if (yy>y+sysize) dy=1;
	if (xx>x & xx<x+sxsize & yy>y & yy<y+sysize) {
	  dx = 0;
	  dy = 0;
	  mousex = -1;
	}
    }

    x+=dx*movex;
    y+=dy*movey;

    if (y<=borderwidth || y>=(d.height-sysize-scoreheight))
    {
      dy=0;
      y=oldy;
    }
    if (x>=(d.width-borderwidth-sxsize) || x<=borderwidth)
    {
      dx=0;
      x=oldx;
    }
  }

  public void FireGun()
  {
    int n=0, f=-1;
    while (n<blevel*10 && bx[n]>=0) n++;
    if (n<blevel*10) f = n;
    if (f>=0) {
	bx[f] = x+( (sxsize-bul_xs) / 2);
	by[f] = y;
	bcur--;
	blast.play();
    }
  }

  public void KillEmAll()
  {
    int f;
    for (int n=0; n<blevel*10; n++) {
      if (bx[n]>0) {
	by[n] -= bmy;
	if ( by[n] < borderwidth | MetHit(n) | BirdHit(bx[n], by[n]) ) {
	  bx[n] = -1;
	} else {
	  goff.drawImage(bullet, bx[n], by[n], this); // paint bullet
	}
      }
    }
  }

  public boolean MetHit(int f)
  {
    for (int n=0; n<maxmet; n++) {
      if (metx[n]>=0) {
	if (metr[n] & bx[f]+bul_xs>metx[n] & bx[f]<metx[n]+sxmet & by[f]+bul_ys>mety[n] & by[f]<mety[n]+symet) {
	  DelMeteor(n);
	  kill.play();
	  return true;
	} 
      }
    }
    return false;
  }

  public void ShowMeteors()
  {
    int n;
    mtotal = 0;
    for (n=0; n<maxmet; n++) {
      if (metx[n]>=0) {
	mtotal++;
	mety[n] += metmy;
	if (mety[n] > d.height-borderwidth-scoreheight) {
	  DelMeteor(n);
	} else {
	  if (metr[n]) {
		goff.drawImage(meteor, metx[n], mety[n], this); // paint meteor
	  } else {
		goff.drawImage(boom[bframes-metf[n]], metx[n]+(sxmet-sxbom)/2, mety[n]+(symet-sybom)/2, this); // paint boom
		metf[n]--;
		if (metf[n]<0) DelMeteor(n);
	  }
	}
      }
    }
  }

  public void NewMeteor()
  {
    int n=0, f=-1;
    metcount++;
    if (metcount > mrenew/metmy) {
	metcount = 0;
	while (n<maxmet & metx[n]>=0) n++;
	if (n<maxmet) f = n;
	if (f>=0) {
		metx[f] = (int) (Math.random() * (xSize - sxmet) + 1);
		mety[f] = borderwidth-symet;
		metr[f] = true;
		metf[f] = bframes;
	}
    }
  }

// If a star in the background reaches the bottome then it will go back to the top
        public void moveStars () {
         for (int i = 0; i < numStars; i++) {
          if (starsY[i] + 1 > ySize - (speed * 2 )) {
           starsY[i] = 0;
           starsX[i] = (int) ((Math.random() * xSize - 1) + 1);
	   starsC[i] = NewColor();
          }
          else {
           starsY[i] += speed;
          }
         }
        }

  public void Collisions()
  {

    for (int n=0; n<maxmet; n++) {
      if (metx[n]>=0) {
	if (metr[n] & x+sxsize>metx[n] & x<metx[n]+sxmet & y+sysize>mety[n] & y<mety[n]+symet) {
	  HitShip();
	  DelMeteor(n);
	} 
      }
    }

  }

  public void HitShip()
  {
    crash.play();
    shield=maxshield;
    scur--;
    if (scur<0) GameOver();
  }

  public void DelMeteor(int n)
  {
    if (metr[n]) {
	  metr[n] = false;
	  metf[n] = bframes;
    } else {
          metx[n] = -1;
	  metr[n] = true;
	  metf[n] = 0;
    }
  }

  public Color NewColor()
  {
   int[] rgb;
   int t;
   rgb = new int[3];
   for (int i=0; i<3; i++) rgb[i] = 0;
   t = (int) (Math.random()*3);
   rgb[t] = (int) (Math.random()*128 + 1) + 127;
   return new Color(rgb[0], rgb[1], rgb[2]);
  }

  public void run()
  {
    long  starttime;
    Graphics g;

    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    g=getGraphics();

    while(true)
    {
      starttime=System.currentTimeMillis();
      try
      {
        paint(g);
        starttime += 30;
        Thread.sleep(Math.max(0, starttime-System.currentTimeMillis()));
      }
      catch (InterruptedException e)
      {
        break;
      }
    }
  }

  public void start()
  {
    if (thethread == null) {
      thethread = new Thread(this);
      thethread.start();
    }
  }

  public void stop()
  {
    if (thethread != null) {
      thethread.stop();
      thethread = null;
    }
  }

// This class handles mouse clicking
	public boolean mouseDown(Event e,int xx,int yy)
	{
          if (ingame) {
	    mousex = xx;
	    mousey = yy;
	    keyDown(e, 32);
	  } else {
	    keyDown(e, 'S');
	  }
	  return true;
	}

  // Game Start
  public void GameStart()
  {
    // Set Up Ship variables
    bmax = blevel*blevel;
    bcur = bmax;
    smax = slevel*slevel;
    scur = smax;
    difflev = 3;
    distance=0;
    score=0;
    renew=250;
    for (int n=0; n<maxmet; n++) {
	metx[n] = -1;
	metf[n] = 0;
	metr[n] = true;
    }
    metcount=0;
    metmy=2;
    mrenew=60;

    // Bosses init
    // #1 - SunBird;
    sbx = -1;
    sbmove = 2;
    maxtribe = 1;
    sunbird=false;
    sbefore = true;
    safter = false;
  }

  // Game Over
  public void GameOver()
  {
	ingame=false;
  }

  // Boss #1 - Sunbird's pack
  public void SunBird()
  {
    int[] xcur, ycur;
    xcur = new int[11];
    ycur = new int[11];
    if (sbx<0) {
	sbx = (int) ((Math.random() * xSize - 40) + 1);
	sby = -5;
	sbefore = true;
	safter = false;
    }
    sby += sbmove;
    if (y+sysize/2<sby) safter = true;
    goff.setColor(new Color(0xffff00));
    if (sbefore & safter) {
	// hit ship
	goff.fillRect(0, sby+15, xSize, 2);
	HitShip();
    }
    for (int i=0; i<11; i++) {
	xcur[i] = sbfx[i] + sbx;
	ycur[i] = sbfy[i] + sby;
    }
    goff.fillPolygon(xcur, ycur, 11);
    if (sby>xSize+20) {
	sbx=-1;
	sbefore = true;
	safter = false;
    }
    sbefore=false;
    if (y+sysize/2>sby) sbefore = true;
  }

  public boolean BirdHit(int blx, int bly) {
    if (sunbird) {
 	if (blx+bul_xs>sbx & blx<sbx+40 & bly+bul_ys>sby & bly<sby+20) {
	  tribe--;
	  if (tribe<0) sunbird=false;
	  sbx=-1;
	  sbefore = true;
	  safter = false;
	  return true;
	}
    }
    return false;
  }

}

⌨️ 快捷键说明

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