📄 bnb_player.java
字号:
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
//入场动画 和 死亡动画 未处理
public final class BnB_Player extends Sprite
{
public int speed;//玩家的移动速度。
public int water;//泡泡水柱长度。
public int popo;//泡泡个数。
public static final int MAX_SPEED = 6;//最大速度。
public static final int MAX_WATER = 7;//最大水柱长度。
public static final int MAX_POPO = 6;//最大泡泡个数。
public int life;//生命
private boolean isHaveVehicle;//是否拥有坐骑的标志。
public boolean isL, isR, isD, isU;//4个方向移动的标志。
public int key;//玩家按键值。
private long lastTime, intervalTime;
private Image vehicleimage;//坐骑图片。
private Image paoimg;//泡泡图片
private BnB_Vehicle vehicle;//坐骑对象。
public BnB_Popo pao[];//泡泡对象。
public int index;//指明当前泡泡下标。
public boolean isPlayer;//是否是玩家。
public boolean isKeyPress;//是否允许按键。
public boolean isStart, isDie;//玩家状态。
public static int score;//得分。
private boolean isProtect;//保护状态。
public BnB_Player(Image img, int width, int height, boolean isPlayer)
{
super(img, width, height);
this.isPlayer = isPlayer;
defineCollisionRectangle(getX(), getY() + 4, getWidth(),
getHeight() - 4);
defineReferencePixel(getX() + (getWidth() >>> 1), getY()
+ (getHeight() >>> 1) + 2);
try
{
paoimg = Image.createImage("/res/popo.png");
}
catch (Exception e)
{
e.printStackTrace();
}
if (isPlayer)
{
life = 3;
}
else
{
life = 0;
}
initPlayer(isPlayer);
pao = new BnB_Popo[MAX_POPO];
for (int i = 0; i < MAX_POPO; i++)
{
pao[i] = new BnB_Popo(paoimg, 16, 16);
}
BnB_Popo.popo = popo;
isKeyPress = false;
isStart = true;
}
/***
* @方法说明:初始化玩家属性及坐标。
*/
public final void initPlayer(boolean isPlay)
{
if (isPlay)
{
speed = 3;
water = 1;
popo = 1;
setPosition(112, 140);
}
else
{
speed = 3;
water = 1;
popo = 1;
setPosition(0, 32);
}
BnB_Popo.popo = popo;
}
/***
* @方法说明:玩家移动控制
*/
public final void move()
{
if (isHaveVehicle)
{
if (vehicle.getX() <= 0)
{
vehicle.setPosition(0, vehicle.getY());
}
if (vehicle.getX() + vehicle.getWidth() >= 128)
{
vehicle.setPosition(112, vehicle.getY());
}
if (vehicle.getY() <= 0)
{
vehicle.setPosition(vehicle.getX(), 0);
}
if (vehicle.getY() + vehicle.getHeight() >= 160)
{
vehicle.setPosition(vehicle.getX(), 144);
}
}
else
{
if (this.getX() <= 0)
{
this.setPosition(0, this.getY());
}
if (this.getX() + this.getWidth() >= 128)
{
this.setPosition(112, this.getY());
}
if (this.getY() <= 28)
{
this.setPosition(this.getX(), 28);
}
if (this.getY() + this.getHeight() >= 160)
{
this.setPosition(this.getX(), 140);
}
}
if (isL)
{
moveLeft();
}
if (isR)
{
moveRight();
}
if (isU)
{
moveUp();
}
if (isD)
{
moveDown();
}
}
/***
* @方法说明:玩家向左移动
*/
private final void moveLeft()
{
if (isKeyPress)
if (isHaveVehicle)//设定坐骑坐标,跟随玩家坐标改变而改变
{
vehicle.setFrame(4);
this.setFrame(8);
if (vehicle.getX() > 0)
{
vehicle.moveLeft();
}
}
else
{
runFrame(8, 11);
if (this.getX() > 0)
{
this.move(-speed, 0);
}
}
}
/***
* @方法说明:玩家向右移动
*/
private final void moveRight()
{
if (isKeyPress)
if (isHaveVehicle)
{
vehicle.setFrame(6);
this.setFrame(12);
if (vehicle.getX() < 112)
{
vehicle.moveRight();
}
}
else
{
runFrame(12, 15);
if (getX() < 112)
{
this.move(speed, 0);
}
}
}
/***
* @方法说明:玩家向上移动
*/
private final void moveUp()
{
if (isKeyPress)
if (isHaveVehicle)
{
vehicle.setFrame(0);
this.setFrame(0);
if (vehicle.getY() > 32)
{
vehicle.moveUp();
}
}
else
{
runFrame(0, 3);
if (getY() > 28)
{
this.move(0, -speed);
}
}
}
/***
* @方法说明:玩家向下移动
*/
private final void moveDown()
{
if (isKeyPress)
if (isHaveVehicle)
{
vehicle.setFrame(2);
this.setFrame(4);
if (vehicle.getY() < BnB_Game.H - vehicle.getHeight())
{
vehicle.moveDown();
}
}
else
{
runFrame(4, 7);
if (getY() < BnB_Game.H - getHeight())
{
this.move(0, speed);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
/***
* @方法说明:玩家放泡泡
*/
private final void freePopo()
{
if (isKeyPress)
{
popo = BnB_Popo.popo;
if (popo > 0)
{
int cols;
int rows;
if (isHaveVehicle)
{
if (vehicle.getRefPixelX() < pao[index].getX()
|| pao[index].getX() + pao[index].getWidth() < vehicle
.getRefPixelX()
|| vehicle.getRefPixelY() < pao[index].getY()
|| pao[index].getY() + pao[index].getHeight() < vehicle
.getRefPixelY() || !pao[index].isVisible())
{
if (index == 0)
{
index = MAX_POPO;
}
cols = Tools.toRange(vehicle.getRefPixelX());
rows = Tools.toRange(vehicle.getRefPixelY());
--index;
pao[index].setPopo(cols, rows, this.water);
BnB_Popo.popo--;
}
}
else
{
if (getRefPixelX() < pao[index].getX()
|| pao[index].getX() + pao[index].getWidth() < getRefPixelX()
|| getRefPixelY() < pao[index].getY()
|| pao[index].getY() + pao[index].getHeight() < getRefPixelY()
|| !pao[index].isVisible())
{
if (index == 0)
{
index = MAX_POPO;
}
cols = Tools.toRange(this.getRefPixelX());
rows = Tools.toRange(this.getRefPixelY());
--index;
pao[index].setPopo(cols, rows, this.water);
BnB_Popo.popo--;
}
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
/***
* @方法说明:按键控制
*/
public final void keyPressed(int key)
{
switch (key)
{
case -3://左
case 52:
initKey();
isL = true;
this.key = key;
break;
case -4://右
case 54:
initKey();
isR = true;
this.key = key;
break;
case -1://上
case 50:
initKey();
isU = true;
this.key = key;
break;
case -2://下
case 56:
initKey();
isD = true;
this.key = key;
break;
case 53:
case -5://确定
freePopo();
break;
default:
this.key = 0;
break;
}
}
/***
* @方法说明:按键释放控制
*/
public final void keyReleased(int key)
{
switch (key)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -