📄 playtanksprite.java
字号:
package tankgame611;
import java.applet.Applet;
import java.awt.Image;
import java.awt.event.*;
public class PlayTankSprite extends SpriteDrawing{
int AppletWidth, AppletHeight;
int myTankWidth, myTankHeight;
int direction;
int myTankX, myTankY;
Image myTankImg[];
Applet GameApplet;
static int speed = 5;
ShellSprite shell;
boolean keyIsReleased = false; //是否按键不放
public PlayTankSprite(Image[] myTankImg,
int myTankX,
int myTankY,
ShellSprite shell, //炮弹的实例
Applet GameApplet) {
//调用父类的创建方法
super(myTankImg, myTankX, myTankY, GameApplet);
this.myTankX = myTankX;
this.myTankY = myTankY;
this.myTankImg = myTankImg;
this.shell = shell;
this.GameApplet = GameApplet;
AppletWidth = GameApplet.getWidth();
AppletHeight = GameApplet.getHeight();
direction = 2;
setVisible(true);
setActive(false);
//为Applet加上键盘事件侦听
GameApplet.addKeyListener(new keyAction());
}
//SpiritDirection : 0=左; 1=右; 2=上; 3=下;
public void updatePos(int SpiritDirection) {
//移动坦克
switch (SpiritDirection) {
case 0: //左
if (myTankX <= 0)//设定坦克的左边界
myTankX = 0;
else
myTankX = this.getX() - speed;
break;
case 1: //右
if (myTankX >= AppletWidth - myTankWidth) //设定坦克的右边界
myTankX = AppletWidth - myTankWidth;
else
myTankX = this.getX() + speed;
break;
case 2: //上
if (myTankY <= 0)//设定坦克的上边界
myTankY = 0;
else
myTankY = this.getY() - speed;
break;
case 3: //下
if (myTankY >= AppletHeight - myTankHeight)//设定坦克的下边界
myTankY = AppletHeight - myTankHeight;
else
myTankY = this.getY() + speed;
break;
}
//设定坦克图像的最新位置
this.setPos(myTankX, myTankY);
}
public int getTankDirection(){
return direction;
}
//调整炮弹的位置
public void setShellPos(int direction) {
switch (direction) {
case 0: //左
shell.setPos(myTankX - shell.getWidth(),
myTankY + (myTankHeight - shell.getHeight()) / 2);
break;
case 1:
shell.setPos(myTankX + myTankWidth + shell.getWidth(),
myTankY +
(myTankHeight - shell.getHeight()) / 2);
break;
case 2:
shell.setPos(myTankX +
(myTankHeight - shell.getHeight()) / 2,
myTankY - myTankWidth / 2);
break;
case 3:
shell.setPos(myTankX +
(myTankHeight - shell.getHeight()) / 2,
myTankY + myTankWidth);
break;
}
}
//使用内部类实现按键事件处理
class keyAction extends KeyAdapter {
long startTime, endTime;
public void keyPressed(KeyEvent e) {
startTime = System.currentTimeMillis();
myTankWidth = myTankImg[0].getWidth(GameApplet);
myTankHeight = myTankImg[0].getHeight(GameApplet);
if (e.getKeyCode() == e.VK_SPACE) { //发射炮弹的处理
if (keyIsReleased == true) { //释放了键(防止长按键不放)
shell.setShellDirection(direction);
setShellPos(direction);
shell.setVisible(true);
shell.setActive(true);
keyIsReleased = false; //未释放了键
}
}
if (e.getKeyCode() == e.VK_LEFT) {
direction = 0;
setActive(true);
}
if (e.getKeyCode() == e.VK_RIGHT) {
direction = 1;
setActive(true);
}
if (e.getKeyCode() == e.VK_UP) {
direction = 2;
setActive(true);
}
if (e.getKeyCode() == e.VK_DOWN) {
direction = 3;
setActive(true);
}
}
public void keyReleased(KeyEvent e) {
endTime = System.currentTimeMillis();
if(endTime-startTime>50){ //防止快速按键切换带来的短暂停顿
setActive(false);
}
keyIsReleased = true; //释放了键
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -