0.1最低版本
(1)要求:产生一个空白窗口
(2)掌握技巧:
a.通过eclipse建立新的项目
b.为新的项目指定不同的源代码和输出目录
c.指定项目所用的JDK
d.通过eclipse建立新的类
(3)注意事项:
a.类名和方法名的命名
b.见名知意
c.类名首字母大写
d.方法名、变量名首字母小写
e.应用驼峰标识
程序如下:
import java.awt.*;
public class TankClient extends Frame {
public void launchFrame(){
this.setLocation(400, 300);//设置屏幕的左上角位置
this.setSize(800, 600);//设置屏幕的宽度和高度
setVisible(true);
}
public static void main(String[] args) {
TankClient tc=new TankClient();
tc.launchFrame();
}
}
会出来一个空白的可随意变大的窗口
0.2
(1)功能:添加关闭窗口的事件处理;不允许窗口的大小改动
(2)掌握:
a.匿名类的用法:其应用场合:类短小,不涉及将来的扩展、不涉及重要的业务逻辑
b.通过eclipse重写父类的方法:双击方法点右键——source——override——勾上要重写的函数
(3)注意事项:没掌握匿名类的先照抄,不写也行;不影响最后的运行效果
程序如下:
需将0.1版的src导入该版本中:新建新工程——右击新的src——导入——general——文件系统——下一步——选择0.1版中的src勾中——完成
import java.awt.*;
import java.awt.event.*;
public class TankClient extends Frame {
public void launchFrame(){
this.setLocation(400, 300);
this.setSize(800, 600);
this.setTitle("TankWar");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
TankClient tc=new TankClient();
tc.launchFrame();
}
}
0.3
(1)功能:画出代表坦克的实心圆
(2)掌握:如何重写paint方法
(3)注意:不要改变原来的前景色
程序如下:
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.RED);
g.fillOval(50, 50, 30, 30);
g.setColor(c);
}
结果如下:
0.4
(1)功能:让坦克动起来
步骤如下:
a.将位置改变为变量
b.启动线程不断重画:线程重画更均匀,更能控制重画的速度;按键重画不能解决子弹自动飞行的问题
c.每次重画改变Tank的位置
(2)掌握:内部类的使用:可以方便的访问包装类的方法。不方便公开的,只为包装类服务的类应当定义为内部类
(3)注意:x,y值的含义:小方块的左上角点
程序如下:
int x=50,y=50;
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 30, 30);
g.setColor(c);
y+=5;
private class PaintThread implements Runnable{
public void run(){
while(true){
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
去除闪烁的程序:
Image offScreenImage=null;
public void update(Graphics g) {
if(offScreenImage==null){
offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
}
Graphics goffScreen=offScreenImage.getGraphics();
Color c=goffScreen.getColor();
goffScreen.setColor(Color.GREEN);
goffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
goffScreen.setColor(c);
paint(goffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
0.5
(1)功能:代码重构:将以后可能需要多处改变的量定义为常量(如Frame的宽度和高度),常量名一般大写
(2)注意:常量一般是public static final....
程序:
public static final int GAME_WIDTH=800;
public static final int GAME_HEIGHT=600;
0.6
(1)功能:让坦克他从我们的指挥;添加键盘监听器类KeyMonitor;TankCient添加键盘监听器;针对不同的键改变坦克的位置与重画线程结合产生不同方向运动
(2)注意:switch case语句中break语句中的运用;写程序要循序渐进
键盘监听器类程序:
public void keyPressed(KeyEvent e) {
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
x-=5;
break;
case KeyEvent.VK_UP:
y-=5;
break;
case KeyEvent.VK_RIGHT:
x+=5;
break;
case KeyEvent.VK_DOWN:
y+=5;
break;
}
}
0.7 (重要版本)
(1)功能:将坦克单独包装成类
步骤如下:
建立Tank类;为Tank类添加成员变量x,y;添加draw方法,使Tank类控制自己的画法;添加Tank类处理按键的方法;根据Tank类修改TankClient类
(2)掌握:
面向对象的思考方法:细节隐藏、构建单独的类、首先考虑系统中有哪些类;合适的方法应该出现在合适的类中
Tank类程序:
import java.awt.*;
import java.awt.event.*;
public class Tank {
int x,y;
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g){
Color c=g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 30, 30);
g.setColor(c);
}
public void keyPressed(KeyEvent e){
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
x-=5;
break;
case KeyEvent.VK_UP:
y-=5;
break;
case KeyEvent.VK_RIGHT:
x+=5;
break;
case KeyEvent.VK_DOWN:
y+=5;
break;
}
}
}