package tanke.game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
//为了监听键盘事件,实现keylistener
public class mypanel extends JPanel implements KeyListener {
mytanke mytanke = null;
//定义敌人坦克放入到vector集合中
Vector<enemytank> enemytanks=new Vector<>();
int enemytanksize=3;
public mypanel() {
mytanke = new mytanke(100, 100);
//c初始化敌人坦克
for(int i=0;i<enemytanksize;i++){
enemytank enemytank1= new enemytank(100*(i+1),0);
enemytank1.setDirect(2);
enemytanks.add(enemytank1);
}
mytanke.setSpeed(2);
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(0, 0, 1000, 750);//填充矩形默认是黑色
//画出坦克-方封装方法
drawtank(mytanke.getX(), mytanke.getY(), g, mytanke.getDirect(), 1);
//画出敌人坦克,遍历vector
for(int i=0;i<enemytanksize;i++){//取出坦克
enemytank enemytank=enemytanks.get(i);
drawtank(enemytank.getX(),enemytank.getY(),g,enemytank.getDirect(),0);
}
}
//x坦克坐标左上角,g是画笔,direct坦克方向,type 坦克类型
public void drawtank(int x, int y, Graphics g, int direct, int type) {
switch (type) {
case 0://我们的坦克
g.setColor(Color.cyan);
break;
case 1://敌方的坦克
g.setColor(Color.yellow);
break;
}//接下来根据坦克方向绘制坦克
//direct表示方向(0;向上,1;向右 2;向下 3;向左
switch (direct) {
case 0://表示向上
g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
g.fillOval(x + 10, y + 20, 20, 20);//画出圆
g.drawLine(x + 20, y + 30, x + 20, y);//画出炮筒直线
break;
case 1://向右
g.fill3DRect(x, y, 60, 10, false);//画出坦克左边轮子
g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克右边轮子
g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
g.fillOval(x + 20, y + 10, 20, 20);//画出圆
g.drawLine(x + 30, y + 20, x + 60, y + 20);//画出炮筒直线
break;
case 2://向下
g.fill3DRect(x, y, 10, 60, false);//画出坦克左边轮子
g.fill3DRect(x + 30, y, 10, 60, false);//画出坦克右边轮子
g.fill3DRect(x + 10, y + 10, 20, 40, false);//画出坦克盖子
g.fillOval(x + 10, y + 20, 20, 20);//画出圆
g.drawLine(x + 20, y + 30, x + 20, y + 60);//画出炮筒直线
break;
case 3://向左
g.fill3DRect(x, y, 60, 10, false);//画出坦克左边轮子
g.fill3DRect(x, y + 30, 60, 10, false);//画出坦克右边轮子
g.fill3DRect(x + 10, y + 10, 40, 20, false);//画出坦克盖子
g.fillOval(x + 20, y + 10, 20, 20);//画出圆
g.drawLine(x + 30, y + 20, x, y + 20);//画出炮筒直线
break;
default:
System.out.println("暂时没有处理");
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
mytanke.setDirect(0);
mytanke.moveup();
} else if (e.getKeyCode() == KeyEvent.VK_D){
mytanke.setDirect(1);
mytanke.moveright();
}else if (e.getKeyCode()==KeyEvent.VK_A){
mytanke.setDirect(3);
mytanke.moveleft();
}else if (e.getKeyCode()==KeyEvent.VK_S){
mytanke.setDirect(2);
mytanke.movedown();
}
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
}
}