?? 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 + -