📄 monsters.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 + -