该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
this.speed = speed;
}
//创建坦克向4个方向运动的方法
public void goUp()
{
this.setDirect(0);
y -= speed;
}
public void goDown()
{
this.setDirect(1);
y += speed;
}
public void goLeft()
{
this.setDirect(2);
x -= speed;
}
public void goRight()
{
this.setDirect(3);
x += speed;
}
}
//开始定义详细的坦克类
class MyTank extends Tank
{
//坦克开火时创建一个子弹,并启动线程
Shot shot = null;
//构造函数,创建一个新对象
public MyTank(int x ,int y ,int color,int direct)
{
super(x,y,color,direct);
}
//开火的方法
public void fire()
{
//根据坦克的方向确定在哪个点画出子弹
switch(this.getDirect())
{
case 0:
shot = new Shot(this.getX()-1, this.getY()-23,0);
break;
case 1:
shot = new Shot(this.getX()-1, this.getY()+20,1);
break;
case 2:
shot = new Shot(this.getX()-23, this.getY()-1,2);
break;
case 3:
shot = new Shot(this.getX()+20, this.getY()-1,3);
break;
} //画出子弹后,启动子弹的线程
Thread t1 = new Thread(this.shot);
t1.start();
}
} //定义敌人类
class EnemyTank extends Tank
{
public EnemyTank(int x ,int y ,int color,int direct)
{
super(x,y,color,direct);
}
}
//开始定义JPanel类,开始画坦克
class MyJPanel extends JPanel
{
MyTank mt1 = null;
int size = 3;
Vector aa = new Vector();
//在构造方法里直接添加一个我的坦克对象,那么new panel时也吧new 坦克的任务完成了
public MyJPanel(MyTank mt1)
{
this.mt1=mt1;
//画敌人的坦克
for(int i=0;i
{
EnemyTank tmp = new EnemyTank((i+1)*50,50,0,1);
aa.add(tmp);
}
}
//重写paint方法,在里面初始化
public void paint(Graphics g)
{
//先初始化画笔,这句话必须写的
super.paint(g);
//开始画画了,先画出一块黑的屏幕出来,就是画出一个屏幕那么大的黑块
g.setColor(Color.BLACK);
g.fillRect(0, 0, 500, 500);
this.drawTank(mt1.getX(), mt1.getY(), g, mt1.getColor(), mt1.getDirect());
this.drawShot(g);
for(int i =0;i
{
this.drawTank(aa.get(i).getX(), aa.get(i).getY(), g,aa.get(i).getColor(),aa.get(i).getDirect());
}
}
//把话坦克的内容封装成一个方法,在这直接添加
//开始写画坦克的程序了
public void drawTank(int x,int y,Graphics g ,int color,int direct)
{
//选择颜色
switch(color)
{
case 0:
g.setColor(Color.BLUE);
break;
case 1:
g.setColor(Color.YELLOW);
break;
}
//0上 1下 2左 3右
switch(direct)
{
case 0:
g.fill3DRect(x-15, y-15, 5, 30,false);
g.fill3DRect(x-10,y-10,20,20,false);
g.fill3DRect(x+10, y-15, 5, 30, false);
g.fillOval(x-5, y-5, 10, 10);
g.drawLine(x,y,x,y-20);
break;
case 1:
g.fill3DRect(x-15, y-15, 5, 30,false);
g.fill3DRect(x-10,y-10,20,20,false);
g.fill3DRect(x+10, y-15, 5, 30, false);
g.fillOval(x-5, y-5, 10, 10);
g.drawLine(x,y,x,y+20);
break;
case 2:
g.fill3DRect(x-15, y-15, 30, 5,false);
g.fill3DRect(x-10,y-10,20,20,false);
g.fill3DRect(x-15, y+10, 30, 5, false);
g.fillOval(x-5, y-5, 10, 10);
g.drawLine(x,y,x-20,y);
break;
case 3:
g.fill3DRect(x-15, y-15, 30, 5,false);
g.fill3DRect(x-10,y-10,20,20,false);
g.fill3DRect(x-15, y+10, 30, 5, false);
g.fillOval(x-5, y-5, 10, 10);
g.drawLine(x,y,x+20,y);
break;
}
}
//画子弹
public void drawShot(Graphics g)
{
g.fill3DRect(mt1.shot.getX(), mt1.shot.getY(), 3, 3, false);
}
} //设计监听类
class MyListener implements KeyListener
{ private MyTank mt = null;
private MyJPanel mp =null;
public MyListener(MyTank mt,MyJPanel mp)
{
this.mt=mt;
this.mp=mp;
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP)
{
mt.goUp();
}else if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
mt.goDown();
}else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
mt.goLeft();
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
mt.goRight();
}
if(e.getKeyCode()==KeyEvent.VK_J)
{
mt.fire();
}
mp.repaint();
} @Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
} @Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}