任务
代码
将坦克的一些属性,如产生地点,窗口大小,和一些方法,比如如何画出坦克,对键盘事件的处理打包,重新创建出一个 Tank 类,用来封装坦克信息
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
public class Tank {
public static final int TANK_WIDTH = 30;
public static final int TANK_HEIGH = 30;
int x,y;
int GAME_WIDTH,GAME_HEIGH;
public Tank(int x, int y,int GAME_WIDTH,int GAME_HEIGH) {
super();
this.x = x;
this.y = y;
this.GAME_WIDTH = GAME_WIDTH;
this.GAME_HEIGH = GAME_HEIGH;
}
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.BLUE);
g.fillOval(x, y, TANK_WIDTH, TANK_HEIGH);
g.setColor(c);
}
public void keyPress(KeyEvent e) {
//获得按键虚拟码
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_RIGHT:
if(x < GAME_WIDTH-TANK_WIDTH-10)
x = x + 5;
break;
case KeyEvent.VK_LEFT:
if(x > TANK_WIDTH)
x = x - 5;
break;
case KeyEvent.VK_DOWN:
if(y < GAME_HEIGH-TANK_HEIGH-10)
y = y + 5;
break;
case KeyEvent.VK_UP:
if(y > TANK_HEIGH+10)
y = y - 5;
break;
}
}
}
创建 Tank 实例,将原来画坦克和处理按键的地方,将画笔和事件传递给 Tank 类让其自己处理即可
public void paint(Graphics g) {
super.paint(g);
myTank.draw(g);
}
private class keyMonitor extends KeyAdapter{
public void keyPressed(KeyEvent e) {
myTank.keyPress(e);
}
}
总结
1.应用面向对象编程思想,针对一个一个的类进行处理,不必关心类的内部是如何进行的