?? fly.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、飛機(jī)、敵人、子彈、敵方子彈的寬度,
int level,score,sml;//級別、分?jǐn)?shù)\生命力
int zds;//子彈數(shù)
Image fly_image1,fly_image2,OffScreen,dr_image1;//飛機(jī)圖片
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); //我方飛機(jī)寬度
FlyHeight = fly_image2.getHeight(this); //我方飛機(jī)高度
DrWidth = dr_image1.getWidth(this); //敵方飛機(jī)寬度
DrHeight = dr_image1.getHeight(this); //敵方飛機(jī)高度
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)//判斷輸入的是哪個鍵,并做出響應(yīng)
{
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(); //飛機(jī)位置
int Y = flyobject.getY();
for(int i=0;i<16;i++) //刷新敵人飛機(jī)、子彈
{
drobject[i].setFly_Y(Y);
drobject[i].paintObject(drawOffScreen);
if(ls==1&&!drzdobject[i].visible&&drobject[i].visible&&drobject[i].X>AppletWidth/3){
//發(fā)射子彈
drzdobject[i].set_X(drobject[i].X);
drzdobject[i].set_Y(drobject[i].Y);
drzdobject[i].visible=true;
drzdobject[i].paintObject(drawOffScreen);
}else{
//否則子彈運(yùn)行
drzdobject[i].paintObject(drawOffScreen);
}//end if
//以下應(yīng)判斷我方是否被敵方子彈打中 ,若擊中,我方生命減1,若撞什么,減2,敵方死亡
//敵方子彈位置+圖片寬度>我機(jī)X,敵方子彈位置<我機(jī)X+我機(jī)寬度, 敵方子彈位置+圖片高度>我機(jī)Y,敵方子彈位置<我機(jī)Y+我機(jī)高度,且子彈可見
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--;
}
//敵機(jī)位置+圖片寬度>我機(jī)X,敵機(jī)位置<我機(jī)X+我機(jī)寬度, 敵機(jī)位置+圖片高度>我機(jī)Y,敵機(jī)位置<我機(jī)Y+我機(jī)高度,且敵機(jī)可見
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分,敵機(jī)生生命力減1,對方不可見
//應(yīng)根據(jù)子彈類型(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();
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -