坦克大战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事件处理机制

一个小球滚动的案例

  1. 先在面板上画出小球,跟上述画坦克方法类似

  2. 利用KeyListener监听器, 监听键盘事件

  3. 通过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()很重要,为了重新画出经过你的方向改变后的小球

还不会插入动图.....

continue...

posted @ 2022-03-22 21:44  z轩  阅读(147)  评论(0)    收藏  举报