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

📄 monsters.java

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

import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.media.*;
//怪物的
public class Monsters{

  public Vector as;//
  private int max;//产生怪物的最大个数
  Random r;
  int rx;//产生随机数
  int ry;
  int mapw;
  int maph;
  int k=1;//计数器
  int time=MyControl.load.addMonsterTime;//刷怪的时间间隔。

int mt=0,pt=0;

  public Monsters(int mapW,int mapH) {
    this.mapw=mapW;
    this.maph=mapH;
    max=MyControl.load.monsterMax;
    as=new Vector();
    r=new Random();
  }

///////////////////////////

  public void Move(int d,int xs,int ys,LayerManager layerManager,MyPlayer player){
    for(int i=0;i<as.size();i++){
      Monster monster=(Monster)as.elementAt(i);
      if((monster.isWarfare)&&(monster.collidesWith(player,true))){//玩家命
        mt++;
        if(mt%4==0){mt=0;
           player.playerHp-=(monster.monsterHit-player.playerRecovery);
        }
         }
      monster.turn(d,xs,ys);
    }
    for(int i=0;i<as.size();i++){
      Monster monster=(Monster)as.elementAt(i);
      if(!monster.getAlive())
      {as.removeElement(monster);//如果怪物死了,就删除
      layerManager.remove(monster);
      }
    }
    k++;
    if(k%time==0){//刷怪
      this.addMonster(layerManager);
     }
  }
  /////////////////
  public void drawMonsterHp(Graphics Mg,int viewx,int viewy){//画怪物生命
    for(int i=0;i<as.size();i++){//这里要把怪物的坐标转成屏幕坐标。
      Monster monster=(Monster)as.elementAt(i);
      Mg.setColor(0x00ff00);
      Mg.fillRect(monster.xpos-viewx,monster.ypos-viewy-10,monster.monsterHp,3);
      Mg.setColor(0x000000);
      Mg.drawRect(monster.xpos-viewx,monster.ypos-viewy-10,monster.monsterMaxHp,3);
  }
}
///////////////
  public void addMonster(LayerManager layerManager){//随机产生怪物//初始化时用的。
    k=1;//恢复计数器
        if(as.size()>max)return;
        else{  int num=max-as.size();//得到还要产生几个怪.
               for(int i=0;i<num;i++)
               {  this.addOneMonster(layerManager);
                } //end if
            }
   }//end addAerolite
////////////////////////
private  void addOneMonster(LayerManager layerManager){
     if(as.size()>max)return;
        int npcwh = MyControl.load.npcwh;
        Image monsterImg_0 = MyControl.load.monsterImg[0]; //目前只有一个Npc,所以这里用0了,
        rx = r.nextInt(mapw - monsterImg_0.getWidth()); //随机位置
        ry = r.nextInt(maph - monsterImg_0.getHeight());
        Monster m=new Monster(monsterImg_0, npcwh << 1, npcwh << 1, rx, ry);
        as.addElement(m);//加入新怪
        layerManager.insert(m,0);
   }



 //////////////////
    public void hitPlayer(MyPlayer Myplayer){//玩家与怪的战斗值变化。

      for(int i=0;i<as.size();i++){
           Monster monster=(Monster)as.elementAt(i);
           if(monster.collidesWith(Myplayer,true)){
             monster.isWarfare=true;


             pt++;
             if(pt%4==0){pt=0;
               Player hitMid=MyControl.load.hitMonsterMid;
              try {
                hitMid.start();
              }
              catch (MediaException ex) {System.out.println("hitMid E");
              }
               monster.monsterHp-=(Myplayer.playerHit-monster.monsterRecovery);//怪命
               Myplayer.playerMp--;
           }

             if(monster.monsterHp<0){///???????????????????每一个怪会测到2~5次死亡。以后要修正。
              Myplayer.playerBooty=true;
              Myplayer.playerEx+=(Myplayer.playerLevel+1)*monster.mEX;//经验。
             }//如果打死怪,获得战利品。
             return;
           }else{
           monster.isWarfare=false;
           }

      }
      Myplayer.isWarfare=false;
    }














}

⌨️ 快捷键说明

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