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