飞机大战 java源代码DOCWord文件下载.docx
《飞机大战 java源代码DOCWord文件下载.docx》由会员分享,可在线阅读,更多相关《飞机大战 java源代码DOCWord文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
g.drawString("
Score:
"
+Play01.count,20,60);
publicvoidmove(){
if(isUP&
&
!
isDown&
isLeft&
isRight){
//上
y=y-5;
}elseif(!
isUP&
//下
y=y+5;
//左
x=x-5;
//右
x=x+5;
}elseif(isUP&
//左上
//左下
//右上
//右下
booleanisUP=false;
booleanisDown=false;
booleanisLeft=false;
booleanisRight=false;
//摁下
publicvoidkeyPressed(KeyEvente){
intkeyCode=e.getKeyCode();
if(keyCode==KeyEvent.VK_RIGHT||keyCode==KeyEvent.VK_D){
isRight=true;
}elseif(keyCode==KeyEvent.VK_LEFT||keyCode==KeyEvent.VK_A){
isLeft=true;
}elseif(keyCode==KeyEvent.VK_UP||keyCode==KeyEvent.VK_W){
isUP=true;
}elseif(keyCode==KeyEvent.VK_DOWN||keyCode==KeyEvent.VK_S){
isDown=true;
//放开
publicvoidkeyReleased(KeyEvente){
isRight=false;
isLeft=false;
isUP=false;
isDown=false;
publicRectanglegetRectangle(){
returnnewRectangle(x,y,feijiImage.getWidth(null),feijiImage.getHeight(null));
}
publicclassPlaneStatus{
publicstaticintroleNum=1;
publicstaticintplayStatus=0;
//0游戏开始前1第一关-1游戏结束
publicclassPower{
ImagePowerImage=null;
intx=20;
inty=0;
publicPower(){
this.x=(int)(Math.random()*540)+20;
PowerImage=
images/power.png"
//画血瓶图片
g.drawImage(PowerImage,x,y,null);
//血瓶移动
y++;
returnnewRectangle(x,y,PowerImage.getWidth(null),PowerImage.getHeight(null));
//第一关
publicclassPlay01{
staticintcount=0;
ImagebgImage=null;
//战机
Planeplane=newPlane();
//战机子弹
List<
MyZiDan>
mzds=newArrayList<
();
//敌机
Diji>
dijis=newArrayList<
//敌机子弹
//List<
DijiZiDan>
dijizidans=newArrayList<
//血瓶
Gift>
gifts=newArrayList<
Power>
powers=newArrayList<
publicPlay01(){
bgImage=
images/bg_01.jpg"
intbgY1=0;
intbgY2=-600;
intfireTime=0;
booleanflag=false;
//画背景图片
g.drawImage(bgImage,0,bgY1,null);
bgY1+=5;
if(bgY1<
=600){
bgY1=0;
g.drawImage(bgImage,0,bgY2,null);
bgY2+=5;
if(bgY2>
=0){
bgY2=-600;
//清理战机子弹
for(inti=0;
i<
mzds.size();
i++){
MyZiDanmyZidan=mzds.get(i);
if(myZidan.x>
800){
mzds.remove(i);
}
//添加子弹
if(isFire1==true&
flag==false){
if(fireTime%8==0){
mzds.add(newMyZiDan(plane.x+25,plane.y+0));
fireTime++;
flag==true){
if(fireTime%4==0){
mzds.add(newMyZiDan(plane.x+8,plane.y+0));
mzds.add(newMyZiDan(plane.x+52,plane.y+0));
//画战机子弹
myZidan.draw(g);
//清理敌机
dijis.size();
Dijidj=dijis.get(i);
if(dj.x<
-100){
dijis.remove(i);
//抽奖:
添加敌机
if((int)(Math.random()*20)==5){
dijis.add(newDiji());
//抽奖:
添加血瓶
if((int)(Math.random()*1000)==5){
gifts.add(newGift());
gifts.size();
Giftgift=gifts.get(i);
gift.draw(g);
//
添加power
if((int)(Math.random()*1000)==5){
powers.add(newPower());
}
for(inti=0;
powers.size();
Powerpower=powers.get(i);
power.draw(g);
//画敌机
dj.draw(g);
//画飞机
plane.draw(g);
//判断战机相撞
//先得到每一个敌机
Rectangler1=dj.getRectangle();
Rectangler2=plane.getRectangle();
if(r1.intersects(r2)){
plane.lifeCount=plane.lifeCount-1;
if(plane.lifeCount>
0)
flag=false;
if(plane.lifeCount<
1){PlaneStatus.playStatus=-1;
//判断战机和血瓶相撞
//先得到每一个血瓶
Rectangler1=gift.getRectangle();
gifts.remove(i);
5){
plane.lifeCount=plane.lifeCount+1;
////判断战机和Power相撞
//先得到每一个power
Powerpower=powers.get(i);
Rectangler1=power.getRectangle();
powers.remove(i);
flag=true;
//判断敌机在中弹
//得到每个战机子弹
MyZiDanmyzidan=mzds.get(i);
Rectangler1=myzidan.getRectangle();
for(intj=0;
j<
j++){
//每一个敌机
Dijidiji=dijis.get(j);
Rectangler2=diji.getRectangle();
if(r1.intersects(r2)){
mzds.remove(i);
dijis.remove(j);
count++;
booleanisFire1=false;
booleanisFire2=false;
plane.keyPressed(e);
if(e.getKeyCode()==KeyEvent.VK_J){
isFire1=true;
/*if(e.getKeyCode()==KeyEvent.VK_K){
isFire2=true;
}*/
plane.keyReleased(e);
isFire1=false;
fireTime=0;
isFire2=false;
if(e.getKeyCode()==KeyEvent.VK_P){
for(inti=0;
i++)
dijis.remove(i);
//游戏结束
publicclassOver{
Imageobg=null;
Imageng=null;
publicOver(){
obg=
ng=
g.drawImage(obg,0,0,null);
g.drawImage(ng,120,100,null);
g.setColor(Color.black);
Font.BOLD,40));
游戏结束啦!
200,600);
publicclassMainFrameextendsJFrame{
Beforebefore=newBefore();
Play01play01=newPlay01();
Overover=newOver();
publicMainFrame(){
//设置标题
this.setTitle("
让子弹飞一会~"
);
//设置大小
this.setSize(600,800);
//定位居中
this.setLocationRelativeTo(null);
//添加关闭操作
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//禁止重置大小z
this.setResizable(false);
//添加键盘监听器
//KeyListener-->
KeyAdapter
this.addKeyListener(newKeyAdapter(){
@Override
publicvoidkeyPressed(KeyEvente){
if(PlaneStatus.playStatus==0){
before.keyPressed(e);
}elseif(PlaneStatus.playStatus==1){
play01.keyPressed(e);
}elseif(PlaneStatus.playStatus==-1){
over.keyPressed(e);
publicvoidkeyReleased(KeyEvente){
before.keyReleased(e);
play01.keyReleased(e);
over.keyReleased(e);
});
//启动一个线程:
每隔20毫秒执行一次
newThread(){
publicvoidrun(){
while(true){
try{
Thread.sleep(20);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}.start();
//显示
this.setVisible(true);
ImagebufferImage=null;
//这个方法也是20毫秒执行一次
publicvoidpaint(Graphicsg){
if(bufferImage==null){
bufferImage=this.createImage(600,800);
Graphicsg4Image=bufferImage.getGraphics();
g4Image.setColor(Color.BLACK);
g4Image.fillRect(0,0,600,800);
this.draw(g4Image);
g.drawImage(bufferImage,0,0,null);
if(PlaneStatus.playStatus==0){
before.draw(g);
}elseif(PlaneStatus.playStatus==1){
play01.draw(g);
}elseif(PlaneStatus.playStatus==-1){
over.draw(g);
publicstaticvoidmain(String[]args){
newMainFrame();
publicclassMyZiDan{
ImagezidanImage=null;
intx;
inty;
publicMyZiDan(intx,inty){
this.x=x;
this.y=y;
zidanImage=
images/zidan.png"
//画我军子弹图片
g.drawImage(zidanImage,x,y,null);
//我的飞机子弹移动速度
y-=20;
returnnewRectangle(x,y,zidanImage.getWidth(null),zidanImage.getHeight(null));
publicclassDiji{
ImagedijiImage=null;
inty=-20;
intx=10;
//20~760
intr;
publicDiji(