坦克大战第一阶段代码

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) {

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值