📄 tank.java
字号:
package pack05;
import javax.microedition.lcdui.game.Sprite;
/**
* 坦克类
* @author 孙继磊
*
*/
public class Tank extends Sprite {
private int speed=2; //移动速度
//移动方向
public static final int UP=0;
public static final int DOWN=1;
public static final int LEFT=2;
public static final int RIGHT=3;
//当前移动方向
private int currentDirection=RIGHT;
//可以通过的地图上的元素种类(如水,草地等)
private boolean [] canPassElements;
private MapContainer map;
public Tank(MapContainer gameMap)
{
super(Utility.getImage("/Splash.png"));
super.defineReferencePixel(6, 6);
this.map=gameMap;
System.out.println(this.getWidth()+","+this.getHeight());
canPassElements=new boolean[MapContainer.MapObjectTypeNum+1];
canPassElements[0]=true;
canPassElements[MapContainer.STEEL]=true;
}
/**
* 尝试在地图上移动
* @param direction 要移动的方向
* @return 是否移动成功,如果遇到障碍或者边界则不成功
*/
public boolean tryMove(int direction)
{
changeDirection(direction);
int dx=0,dy=0;
switch(direction)
{
case UP:dx=0;dy=-speed; break;
case DOWN:dx=0;dy=speed; break;
case LEFT:dx=-speed;dy=0; break;
case RIGHT:dx=speed;dy=0; break;
}
this.move(dx,dy);
if(map.isOutOfBorder(this))
{
this.move(-dx, -dy);
return false;
}
int n;
if((n=map.checkCollide(this))>0 )
{
if(!canPass(n))
this.move(-dx, -dy);
return false;
}
return true;
}
private boolean canPass(int element)
{
return canPassElements[element];
}
/**
* 改变移动方向,并在必要时旋转图片
* @param direction 新的移动方向
*/
private void changeDirection(int direction)
{
if(direction==currentDirection)
return;
currentDirection=direction;
switch(direction)
{
case RIGHT:
this.setTransform(Sprite.TRANS_NONE);
break;
case DOWN:
setTransform(Sprite.TRANS_ROT90);
break;
case UP:
setTransform(Sprite.TRANS_ROT270);
break;
case LEFT:
setTransform(Sprite.TRANS_ROT180);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -