坦克大战

坦克类的设计

创建一个坦克的类

  • 考虑坦克的属性(位置、方向、速度)
  • 其中方向采用枚举(上、下、左、右)
  • 加载坦克的图片
  • 接受按键的触发,使坦克根据人的控制来动

代码实现

方向枚举

1
2
3
Enum Direction {
UP, DOWN, LEFE, RIGHT
}

图片资源类(例如坦克图片)

1
2
3
4
5
6
7
8
9
10
11
12
13
public class  {
public static BufferedImage goodTankU, goodTankD, goodTankR, goodTankL;
static{
try {
goodTankU = ImageIO.read(Tank.class.getClassLoader().getResourceAsStream("images/p1tankU.gif"));
goodTankD = ImageIO.read(Tank.class.getClassLoader().getResourceAsStream("images/p1tankD.gif"));
goodTankL = ImageIO.read(Tank.class.getClassLoader().getResourceAsStream("images/p1tankL.gif"));
goodTankR = ImageIO.read(Tank.class.getClassLoader().getResourceAsStream("images/p1tankR.gif"));
} catch(IOException e){
e.printStackTrace();
}
}
}

坦克类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


2):监听键盘按下
3):监听键盘抬起
*/
public class Tank {
private static final int SPEED = 5; // 坦克的速度
private int x, y; //坦克的初始位置
private Direction direction; // 坦克的方向

public Tank(int x, int y, Direction direction){
this.x = x;
this.y = y;
this.direction = direction;
}

// 1):得到窗口传递的画笔,绘制自己
public void paint (Graphics g) {
g.drawImage(ImagesResource.goodTankD, x, y, null);
}

// 2):监听键盘按下
public void keyPressed(KeyEvent e) {

}
// 3):监听键盘抬起
public void keyReleased(KeyEvent e) {

}
}

运行结果

坦克大战

窗口增加键盘和窗口监听

  • 在游戏窗口类构造器中见添加监听,并把监听信号选择性的传给坦克对象
  • 敌方坦克不需要监听信号,自己的坦克需要。
  • 窗口监听,来关闭进程(点击上方X,进行关闭进程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// GameFrame的构造器增加监听
public GameFrame (){
.
. //省略 .....
.
// 键盘监听
this.addKeyListener(new KeyAdapte(

public void keyPressed(KeyEvent e) {
myTank.keyPressed(e);
}

@Override
public void keyReleased(KeyEvent e) {
myTank.keyReleased(e);
}

));

// 窗口监听
this.addWindowListener(new WinodowAdapte(){
@Override
public void windowClosing(WindowEvent e) {
// 关闭进程
System.exit(0);
}
})
}

原文:大专栏  坦克大战


上一篇:day01计算机基础原理


下一篇:DAY01计算机基本原理