坦克大战02
java绘出自己的坦克
设置面板大小
this.add(mp);//把面板(就是游戏的绘图区域)
this.setSize(1000,750);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
设置坦克的位置和形状大小
public class Tank {
private int x;//坦克的横坐标
private int y;//坦克的纵坐标
public Tank(int x,int y){
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
利用的是坐标系

设置坦克形状
public class MyPanel extends JPanel {
//定义我的坦克
Hero hero =null;
public MyPanel(){
hero=new Hero(100,100);//初始化自己坦克
}
public void paint(Graphics g){
super.paint(g);
g.fillRect(0,0,1000,750);//填充矩形,默认黑色
//画出坦克,封装方法
drawTank(hero.getX(), hero.getY(), g,0,0);
}
//编写方法,画出坦克
/**
*
* @param x 坦克的左上角横坐标
* @param y 坦克的左上角纵坐标
* @param g 画笔
* @param direction 坦克方向
* @param type 坦克类型
*/
public void drawTank(int x,int y,Graphics g,int direction,int type){
switch (type){
case 0://我们的坦克
g.setColor(Color.cyan);
break;
case 1://敌人的坦克
g.setColor(Color.yellow);
break;
}
//根据坦克方向,来绘制坦克
//利用fill3DRect打印效果更明显
switch (direction){
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.fill3DRect(x+10,y+20,20,20,false);
g.drawLine(x+20,y+30,x+20,y);//画出炮筒
break;
default:
System.out.println("暂时没有处理");
}
}
}

这个是画出的坦克,可以根据自己的实际需要去改变坦克的形状颜色。
java事件处理机制
一个小球滚动的案例
-
先在面板上画出小球,跟上述画坦克方法类似
-
利用KeyListener监听器, 监听键盘事件
-
通过e.getKeyCode() == KeyEvent.VK_DOWN(这个是控制向下运动的,向上是up,左是left,右是right)来控制小球向上下左右四个方向运动
public class BallMove extends JFrame { MyPanel mp=null; public static void main(String[] args) { BallMove ballMove = new BallMove(); } //构造器 public BallMove(){ mp=new MyPanel(); this.add(mp); this.setSize(400,300); //窗口JFram对象可以监听键盘事件,即可以监听到面板发生的键盘事件 this.addKeyListener(mp); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } //面板,可以画出小球 //KeyListener是监听器,可以监听键盘事件 class MyPanel extends JPanel implements KeyListener{ //为了让小球可以移动,把他左上角的坐标设置成变量 int x=10; int y=10; public void paint(Graphics g){ super.paint(g); g.fillOval(x,y,20,20); } //有字符输出时,该方法就会触发 @Override public void keyTyped(KeyEvent e) { } //当某个键按下,该方法会触发 @Override public void keyPressed(KeyEvent e) { } //当某个键释放(松开),该方法会触发 @Override public void keyReleased(KeyEvent e) { // System.out.println((char)e.getKeyChar()+"被按下..."); //根据用户按下的不同键,来处理小球的移动(上下左右键) //在java中,会给每一个键,分配一个值(int) if(e.getKeyCode()==KeyEvent.VK_DOWN){//KeyEvent.VK_DOWN是向下的箭头对应的code值 y++; }else if(e.getKeyCode()==KeyEvent.VK_UP){ y--; }else if(e.getKeyCode()==KeyEvent.VK_LEFT){ x--; }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ x++; } //让面板重绘 this.repaint(); } }
这个repaint()很重要,为了重新画出经过你的方向改变后的小球


还不会插入动图.....
浙公网安备 33010602011771号