📄 absolute.java
字号:
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 + -