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