📄 player.java
字号:
package com.thinkenjoy.feitian;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import com.thinkenjoy.control.Control;
import com.thinkenjoy.control.ThreadCanvas;
import com.thinkenjoy.tools.ImageSet;
import com.thinkenjoy.tools.Tools;
import com.thinkenjoy.feitian.screen.PlayScreen;
/**
*
* 玩家
*/
public class Player extends FightingObject {
int num = 0;
public int bulletPower;
/**
* 玩家的最大血量
*/
private static final int MAX_ENERGY = 100;
/**
* 玩家的最大命条数
*/
private static int MAX_LIFE = 3;
/**
* 玩家再生时的相应状态的持续时间
*/
private static final int DELAY_INITIAL = 40;
/**
* 主角的索引值
*/
private static final int HUMAN = 0;
public static final int BOUND_OFFSETX = 9;
public static final int BOUND_OFFSETY = 8;
/**
* 玩家的图片序列
*/
public static ImageSet playerImageSet;
public static ImageSet bombImageSet;
public static ImageSet headImageSet;
public static ImageSet numberImageSet;
/**
* 用来记录玩家的X轴初始速度,以作它用
*/
protected int DEFAULT_SPEED;
/**
* 玩家从左边初始化出来时,应有段时间自动滑出,并有段时间为不可操作且无敌状态
*/
public int delayInitial;
/**
* 辅助弹1的发射时间延迟
*/
protected int delayAssistantShoot1;
/**
* 辅助弹2的发射时间延迟
*/
protected int delayAssistantShoot2;
/**
* 命
*/
protected int life;
/**
* 分
*/
protected int score;
/**
* 是否处于灵弹爆炸状态
*/
public boolean isBombState;
/**
* 玩家处于灵弹爆炸状态,在这段时间内玩家为不可操作且无敌状态
*/
public int delayBomb;
/**
* 灵弹效果下的爆炸频度
*/
private int bombFrequence;
/**
* 灵弹点数,每30点可换一个灵弹
*/
private int bombPoint;
/**
* 灵弹数
*/
private int bombNum;
private boolean isAutoFire;
/**
* 无敌状态下的闪烁延迟
*/
private int delayShieldFlash;
/**
* 构造一个Player类,并初始化基本的数据
*
* @param type 角色类型
* @param hitPow
* @param speedX X轴移动速度
* @param speedY Y轴移动速度
* @param locX
* @param locY
* @param width 角色宽
* @param height 角色高
*/
public Player(int type, int hitPow, int speedX, int speedY, int locX,
int locY, int width, int height) {
super(type, hitPow, speedX, speedY, locX, locY, width, height);
life = MAX_LIFE;
DEFAULT_SPEED = speedX;
playerImageSet = new ImageSet(1);
bombImageSet = new ImageSet(1);
headImageSet = new ImageSet(1);
numberImageSet = new ImageSet(1);
//#if NOK_QD
//# Image[] number = new Image[10]; //UI--数字
//# for(int i = 0; i<10 ;i++)
//# {
//# number[i] = Tools.getImage("images/stuffs/number"+i);
//# }
//# numberImageSet.addState(number,50);
//# // for(int i = 0; i<10 ;i++){ number[i] = null;}
//#
//# //UI--头像
//# Image[] headImage = new Image[4];
//# for(int i = 0; i<4 ;i++)
//# {
//# headImage[i] = Tools.getImage("images/stuffs/head"+i);
//# }
//# headImageSet.addState(headImage,50);
//# // headImage[0] = null;
//#
//# Image[] bombImage = new Image[4]; //灯神动画
//# for(int i = 0; i<4;i++)
//# {
//# bombImage[i] = Tools.getImage("images/stuffs/bomb"+(Control.currentPlayer*4+i));
//# }
//# bombImageSet.addState(bombImage,500);
//# // for(int i = 0; i<4;i++){ bombImage[i] = null;}
//# // bombImage = null;
//#
//# Image[] tempPlayerImage = new Image[4]; //主角动画
//# for(int i = 0; i<4;i++)
//# {
//# tempPlayerImage[i] = Tools.getImage("images/stuffs/player"+(Control.currentPlayer*4+i));
//# }
//# playerImageSet.addState(tempPlayerImage, 600);
//# // for(int i = 0; i<4;i++){tempPlayerImage[i] = null;}
//# // tempPlayerImage = null;
//#else
Image number = Tools.getImage("images/stuffs/number");
Image headImage = Tools.getImage("images/stuffs/head");
Image bombImage_1 = Tools.getImage("images/stuffs/bomb_"+(Control.currentPlayer+1));
Image tempPlayerImage = Tools.getImage("images/stuffs/player");
//#if NOK_7260 || NOK_7210 || NOK_6101
//# playerImageSet.addState(ImageSet.extractFrames(tempPlayerImage, 0, Control.currentPlayer*17 , 4, 1, 23, 17), 400);
//# if(Control.currentPlayer == 0)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,90,99),800);
//# if(Control.currentPlayer == 1)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,93,83),800);
//# if(Control.currentPlayer == 2)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,95,76),800);
//# if(Control.currentPlayer == 3)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,64,94),800);
//# headImageSet.addState(ImageSet.extractFrames(headImage,0,0,1,4,7,7),400);
//# numberImageSet.addState(ImageSet.extractFrames(number,0,0,10,1,5,7),500);
//#else
playerImageSet.addState(ImageSet.extractFrames(tempPlayerImage, 0, Control.currentPlayer*25 , 4, 1, 34, 25), 400);
if(Control.currentPlayer == 0)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,125,127),800);
if(Control.currentPlayer == 1)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,125,128),800);
if(Control.currentPlayer == 2)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,131,124),800);
if(Control.currentPlayer == 3)bombImageSet.addState(ImageSet.extractFrames(bombImage_1,0,0,4,1,89, 155),800);
headImageSet.addState(ImageSet.extractFrames(headImage,0,0,1,4,9,9),400);
numberImageSet.addState(ImageSet.extractFrames(number,0,0,10,1,5,7),500);
//#endif
tempPlayerImage = null;
bombImage_1 = null;
number = null;
headImage = null;
//#endif
System.gc();
reset();
super.curLoc.setBounds(locX, locY, 15, 15);
}
/**
* 初始化玩家的一些属性
*
*/
public void initial(int type) {
super.energy = MAX_ENERGY;
if(Control.currentPlayer == 2)
{
super.energy = 140;
}
delayInitial = DELAY_INITIAL;
delayAssistantShoot1 = 0;
delayAssistantShoot2 = 0;
setLocation(-30, ThreadCanvas.SCREEN_HEIGHT/2-10);
super.type = type;
if(Control.oldGunLevel>1){
setGunId(type, Control.oldGunLevel);
}else{
setGunId(type, 1); //初始子弹的威力以及等级和他们对应的图片
}
super.initialBullet(type, super.bHitPower,super.bSpeed,0,20,20);
bulletPower =super.bHitPower;
super.currentState = type ;
super.currentFrame = 0;
}
/**
* 玩家死亡
*
*/
public void dead() {
super.reset();
life--;
bombNum = 3;
isAutoFire = true;
delayInitial = DELAY_INITIAL;
delayAssistantShoot1 = 0;
delayAssistantShoot2 = 0;
setLocation( -30, ThreadCanvas.SCREEN_HEIGHT / 2 - 10);
super.energy = MAX_ENERGY;
if (Control.currentPlayer == 2) {
super.energy = 140;
}
setSpeed(DEFAULT_SPEED);
setGunId(super.gunId, 1);
}
public void reset() {
dead();
score = 0;
gunLevel = 0;
life = MAX_LIFE;
bombNum = 3;
bombPoint = 0;
initial(type);
}
public void cycle() {
// if (playScreen == null) {
// playScreen = PlayScreen.getInstance();
// }
if (isAutoFire) {
fire();
}
super.cycle();
if (!isBombState) {
if (delayAssistantShoot1 > 0)
delayAssistantShoot1--;
if (delayAssistantShoot2 > 0) {
delayAssistantShoot2--;
}
} else {
if (delayBomb > 0)
delayBomb--;
}
//玩家自动从屏幕左边滑出来
if (delayInitial > 0 && --delayInitial > 30)
super.moveX(DEFAULT_SPEED);
if (isDestroy()) {
super.moveY(getSpeedY());
}
}
/**
* 获得玩家的可再生数
*
* @return
*/
public int getLife() {
return life;
}
/**
* 设置玩家的可再生数
*
* @param numLife
*/
public void setLife(int numLife) {
life = numLife;
}
/**
* 获得玩家的火力等级
*
* @return
*/
public int getGunLevel() {
return gunLevel;
}
/**
* 获得玩家的子弹索引
*
* @return
*/
public int getGunId() {
return super.gunId;
}
/**
* 设置玩家的子弹索引及等级
*
* @param id 子弹类型
* @param level 子弹等级
*
*/
public void setGunId(int id, int level) {
if (level > 4) {
gunLevel = 4;
System.out.println("gunLevel>4");
} else if (level < 0) {
gunLevel = 0;
System.out.println("gunLevel<0");
} else{
gunLevel = level;
}
super.gunId = id;
switch (id) {
case 0:
super.bSpeed = 12;
super.bWidth = 5;
super.bHeight = 5;
super.bDelayShoot = 2;
switch (level) {
case 1:
super.bHitPower = 3;
break;
case 2:
super.bHitPower = 5;
break;
case 3:
super.bHitPower = 8;
break;
case 4:
super.bHitPower = 10;
delayAssistantShoot1 = 10;
break;
case 5:
delayAssistantShoot2 = 10;
super.bHitPower = 20;
break;
}
break;
case 1 :
super.bSpeed = 12;
super.bWidth = 5;
super.bHeight = 5;
super.bDelayShoot = 3;
switch (level) {
case 1:
super.bHitPower = 5;
break;
case 2:
super.bHitPower = 8;
break;
case 3:
super.bHitPower = 10;
break;
case 4:
super.bHitPower = 10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -