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

📄 plan.java

📁 手机RPG游戏
💻 JAVA
字号:
package obj;
import javax.microedition.lcdui.*;

import main.*;
import thread.*;
public class Plan{
private int myPlanId;
  private   Image img;
  private int imgW,imgH;
  public  int x=0;//飞机的起坐标
  public  int y=0;
  public int d=Cntrl.load.d;//飞机的移动量。
  private  int space;//距边界的距离
  private int w,h;
  int tw=0;
  int th=0;
  int myPlan_y;//最后画飞机的Y坐标  //以后要修正。
  int myPlanHp;

  int HpMax;//生命最大值.
  public int score=0;//玩家的分数
  int ss=Cntrl.load.bootyScore;//得到金币加分
  int reduceScore=Cntrl.load.myPlanOverScore;//玩家飞机死后减少分数。
  int myPlanTime=Cntrl.load.myPlanTimes;//玩家可以有几次生命
  int addHp=Cntrl.load.bootyAddHp;//生命加奖励的ID*10
  public boolean myPlanAlive=true;//玩家的飞机.是否存活.
  int time=1; //计数器
  int times=Cntrl.load.myPlanOverTime;//玩家死后过多长时间再出现。
  int bulletHit=Cntrl.load.enemyBulletHit;//敌机子弹的打击力
  int bossBulletHit=Cntrl.load.bossBulletHit;//Boss子弹的打击力
  int bossLevinHit=Cntrl.load.bossLevinHit;//Boss闪电的打击力.
  int pass;
  int passNum=Cntrl.load.passNum;//玩家每过几关加一条命。
  int scoreAdd=Cntrl.load.scoreAdd;//玩家过多少分加一条命。
  int pN=passNum;//到下一次加命的关数。
  int sA=scoreAdd;//到下一次加命的分数。

public Plan(int bw,int bh){
    w=bw;
    h=bh;
    myPlanId=Cntrl.load.myPlanId;
    img=Cntrl.load.myplanImg[myPlanId];
    imgW=img.getWidth();
    imgH=img.getHeight();

    space=Cntrl.load.space;

  planInit();

}
public void planInit(){
  x=w/2;//玩家飞机的起始点
  y=h-30;
  this.myPlanAlive=true;
  myPlanHp=Cntrl.load.myPlanHp;
  HpMax=Cntrl.load.myPlanHpMax;
}

/////////////////////////////////
  ///加入玩家飞机
public void drawMyPlan(Graphics g,Action action,Booty booty,Aerolites aerolites,Enemys enemys,Boss boss){
    drawHpScore(g);//画生命值,分数
    if(this.myPlanAlive){//如果玩家飞机死了,就不做以下的了。
        moveMyPlan(action);//飞机移动
        screenInspect();//边界检测.
        myPlan_y=y-img.getHeight()/2;//Y从标.
        myPlanHit(booty,aerolites,enemys,boss);//飞机的碰撞检测
        g.drawImage(img,x,myPlan_y,Graphics.LEFT|Graphics.TOP);//画玩家飞机.
        }
    else{ if(this.myPlanTime<0)
             {gameOver(g);return;}
          this.time++;   //过几次开始生飞机.
          if(0==time%times){
          planInit();
          this.myPlanTime--;
          time=1;}
        }//end if

}//end drawMyPlan
//      private Font overFont(){//设置文字。
//      return Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE);
//      }

//////////////////////////////
      private void gameOver(Graphics g){
        Image overImg=Cntrl.load.gameOverImg;
        g.drawImage(overImg,
                    (w-overImg.getWidth())/2,
                    (h-overImg.getHeight())/2,
                    Graphics.LEFT|Graphics.TOP);
//        g.setColor(0xff0000);
//        g.setFont(overFont());
//        g.drawString("你的军队都挂了!请大侠从新来过。",50,50,0);
      }
  /////////////////////////
  public void drawHpScore(Graphics g){

    g.setColor(255,0,0);
    g.fillRect(10,h-15,myPlanHp,5);
    g.setColor(255,255,0);//玩家飞机的生命值.
    g.drawRect(10,h-15,HpMax,5);

    pass=Cntrl.load.pass;//关卡数
    if(pass==pN){  pN+=passNum;myPlanTime=myPlanTime+1; }//玩家每过几关加一条命。
    if(score>sA){  sA+=scoreAdd;myPlanTime=myPlanTime+1;}//玩家每过多少分加一条命。

    for (int i=0;i<=this.myPlanTime;i++){//画出玩家还有几次生命。
      g.drawImage(img,w-(i+1)*imgW,space,Graphics.TOP|Graphics.LEFT);
    }
    g.drawRect(w-(myPlanTime+1)*imgW,space,(myPlanTime+1)*imgW-1,imgH);

    g.setColor(255,255,255);//分数.
    g.drawString("得分:"+Integer.toString(score),w/2,h-20,0);
    g.drawString("关卡[  "+Integer.toString(pass+1)+"  ]",10,10,0);
}
////////////////////////
  private void myPlanHit(Booty booty,Aerolites aerolites,Enemys enemys,Boss boss){
      myPlanHitBoss(boss);//与Boss的碰撞
      myPlanHitBossBullet(boss);//与Boss子弹的碰撞
      myPlanHitBossLevin(boss);//与Boss的闪电的碰撞
      myPlanHitEnemy(enemys);//与敌机相碰撞
      myPlanHitEnemyBullets(enemys);//与敌机子弹相碰撞
      myPlanHitBooty(booty);//与奖励物品碰撞
      myPlanHitAerolites(aerolites);//与陨石碰撞
  }
  ///////////////////////////
  private void myPlanHitBossLevin(Boss boss){//与Boss的闪电的碰撞
    if(boss.getAlive() && boss.isdrawLevin)//boss闪电的状态
      { int Lx=boss.getLevinXpos();
       tw=x>Lx?boss.getLevinW():this.imgW;
       if(tw>Math.abs(x-Lx)){
         myPlanHp-=bossLevinHit;
         this.myPlanOver();
       }
     }
  }
  ///////////////////////////////
  private void myPlanHitBossBullet(Boss boss){//与Boss子弹的碰撞
    if(boss.getAlive())
    { for(int i=0;i<boss.bs.size();i++){
       BossBullet boosBullet=(BossBullet)boss.bs.elementAt(i);//取出每个敌机子弹。
       tw=x>boosBullet.getXPos()?boosBullet.imgW:this.imgW;
       th= myPlan_y>boosBullet.getYPos()?boosBullet.imgH:this.imgH;

       if(tw>Math.abs(x-boosBullet.getXPos()) && th>Math.abs(myPlan_y-boosBullet.getYPos()) )//检测是否相碰。
           { myPlanHp-=bossBulletHit;//生命值减少Boss子弹打击力数值.
             boosBullet.alive=false;
             myPlanOver();//看是否玩家飞机生命为0
           }
  }//end for
  }//end if(boss.getAlive())
  }
  //////////////////////////////
  private void myPlanHitBoss(Boss boss){//与Boss的碰撞
    if(boss.getAlive())
    {
          tw=x>boss.getX()?boss.getImgw():this.imgW;
          th= myPlan_y>boss.getY()?boss.getImgh():this.imgH;
          if(th>Math.abs(myPlan_y-boss.getY()) &&  tw>Math.abs(x-boss.getX()) )//检测是否相碰。
            {  int k=boss.bossHp<myPlanHp?boss.bossHp:myPlanHp;//比较谁生命值小,就全减谁的.
              myPlanHp-=k;//生命值减少.
              boss.bossHp-=k;
              myPlanOver();//看是否玩家飞机生命为0
              boss.bossOver();//看是否Boss的生命小于0
            }
    }//end if(boss.getAlive())
  }
  //////////////////////////////
  private void myPlanHitEnemyBullets(Enemys enemys){//与敌机子弹相碰撞
    for(int i=0;i<enemys.ebs.size();i++){
               EnemyBullets eb=(EnemyBullets)enemys.ebs.elementAt(i);//取出每个敌机子弹。
               tw=x>eb.getXPos()?eb.imgW:this.imgW;
               th= myPlan_y>eb.getYPos()?eb.imgH:this.imgH;

               if(tw>Math.abs(x-eb.getXPos()) && th>Math.abs(myPlan_y-eb.getYPos()) )//检测是否相碰。
                  {  myPlanHp-=this.bulletHit;//生命值减少子弹打击力.
                     eb.alive=false;
                     myPlanOver();//看是否玩家飞机生命为0
                  }
        }
  }
  ///////////////////////////////
  private void myPlanHitEnemy(Enemys enemys){//与敌机相碰撞
    for(int i=0;i<enemys.es.size();i++){
           Enemy e=(Enemy)enemys.es.elementAt(i);//取出每个陨石。
           tw=x>e.getXPos()?e.imgW:this.imgW;
           th= myPlan_y>e.getYPos()?e.imgH:this.imgH;

               if(tw>Math.abs(x-e.getXPos()) && th>Math.abs(myPlan_y-e.getYPos()) )//检测是否相碰。
                  {
                     myPlanHp-=e.enemyId+1;//生命值减少敌机 (ID 号+1)
                     e.alive=false;
                     myPlanOver();//看是否玩家飞机生命为0
                  }
    }
  }

  ///////////////////////////////
  private void myPlanHitAerolites(Aerolites aerolites){//与陨石碰撞
    for(int i=0;i<aerolites.as.size();i++){
           Aerolite a=(Aerolite)aerolites.as.elementAt(i);//取出每个陨石。
           tw=x>a.getXPos()?a.imgW:this.imgW;
           th= myPlan_y>a.getYPos()?a.imgH:this.imgH;
           if(a.aeroliteId<a.n)//检测是不是流星。第n个图片是游戏流星图
                 {
                 if(tw>Math.abs(x-a.getXPos()) && th>Math.abs(myPlan_y-a.getYPos()) )//检测是否相碰。
                {
                       myPlanHp-=a.aeroliteId+1;//生命值减少陨石 (ID 号+1)
                       a.alive=false;
                       myPlanOver();//看是否玩家飞机生命为0
                    }
           }
  }
}
///////////////////////////////////////
private void myPlanHitBooty(Booty booty){//和奖励物品相碰撞
           if(booty.alive){
           tw=x>booty.getXPos()?booty.imgW:this.imgW;
           th= myPlan_y>booty.getYPos()?booty.imgH:this.imgH;
               if(tw>Math.abs(x-booty.getXPos()) && th>Math.abs(myPlan_y-booty.getYPos()) )       //检测是否相碰。
                  {if(booty.bootyId==0)
                         { score+=ss;}
                    else {
                          myPlanHp=myPlanHp+booty.bootyId*addHp;//生命加奖励的ID*10
                          if(myPlanHp>HpMax){
                          score+=(myPlanHp-HpMax);//如果加的生命大于生命最大值,则把多的加到分数中。
                           }
                          myPlanHp=myPlanHp>HpMax?HpMax:myPlanHp;//让生命不超过上限。
                         }
                    booty.alive=false;
                  }//end 检测是否相碰。
            }//end if(booty.alive)
  }
  ////////////////////////////////////
private void myPlanOver(){//如果玩家生命值没有了,就爆炸。
      if(myPlanHp<=0){
          Cntrl.gameBoard.explodes.Add(new Explode(x,myPlan_y));//加入爆炸效果
          this.score-=reduceScore;//玩家飞机死后减少分数。
          score=score>0?score:0;//防止分数小于0.
          myPlanHp=0;
          this.myPlanAlive=false;
          Cntrl.gameBoard.mybullets.bs.removeAllElements();//玩家飞机死了,清除所有子弹
      }
}
//////////////////////////////////////
 private void moveMyPlan(Action action){////玩家飞机移动
       x+=action.left+action.right;
       y+=action.up+action.down;
     }
/////////////////////////////////////
  private void screenInspect(){//边界检测
       if(x<0)x=0;
       if(y<space)y=space;
       if(x>w-img.getWidth())x=w-img.getWidth();
       if(y>h-space-15)y=h-space-15;
  }
////////////////////////////////////
}

⌨️ 快捷键说明

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