📄 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、飞机、敌人、子弹、敌方子弹的宽度,
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 + -