JAVA之坦克大战(一)绘画敌我方的坦克

思路:添加Tank父类,EnemyTank和MyTank子类,Panel类(画图),主类,主类需要继承JFrame来建立框架,其中Panel和
Main都需要用构造函数,打开程序时即自启

1.Tank类:
public class Tank {
    int x;

    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 int getDir() {
        return dir;
    }

    public void setDir(int dir) {
        this.dir = dir;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    int y;
    int dir;
    int speed;
    boolean life=true;
    int type;
    Tank(int x,int y)
    {
        this.x=x;
        this.y=y;
    }
}

2.MyTank类

public class MyTank extends Tank {
    MyTank(int x,int y)
    {
        super(x,y);
    }
}

3.EnemyTank类
public class EnemyTank extends  Tank {
    EnemyTank(int x,int y)
    {
        super(x,y);
    }
}

4.MyPanel类
import java.awt.*;
import java.util.Vector;

public class MyPanel extends Panel {
    MyTank myTank =null;
    Vector<EnemyTank> enemyTanks = new Vector<EnemyTank>();//集合类
    int enemynum=12;//坦克数量
    MyPanel()
    {
        myTank =new MyTank(120,220);//初始化我的坦克的初始坐标
        for(int i=0;i<enemynum/2;i++)
        {
            EnemyTank enemyTank=new EnemyTank(i*(230+5),0);//给上面的enemyTank初始化坐标
            enemyTanks.add(enemyTank);//向集合里面添加enemyTank
        }

        for(int i=6;i<enemynum;i++)
        {
            EnemyTank enemyTank =new EnemyTank((12-i-1)*(230+5),930);//给下面的enemyTank初始化坐标
            enemyTanks.add(enemyTank);
        }
    }
    public void paint(Graphics g) //重写paint方法
    {

        g.setColor(Color.black);//画笔着色
        g.fillRect(0,0,1200,1000);//面板
        if(myTank.life)
        {
            drawTank(myTank.getX(),myTank.getY(),myTank.getDir(),g,0);//画我方坦克
        }

        for(int i=0;i<enemyTanks.size();i++)
        {
            EnemyTank enemyTank =enemyTanks.get(i);
            drawTank(enemyTank.getX(),enemyTank.getY(),enemyTank.getDir(),g,1);//画敌方坦克
        }
    }

    public  void drawTank(int x,int y,int dir,Graphics g,int type)//画坦克
    {
        //System.out.println(dir);
        switch (type)
        {
            case 0://我方
                g.setColor(Color.red);
                break;
            case 1://敌方
                g.setColor(Color.green);
                break;
        }

        switch (dir)
        {
            case 0://上
                g.fill3DRect(x,y,5,30,false);//左腿
                g.fill3DRect(x+15,y,5,30,false);//右腿
                g.fill3DRect(x+5,y+5,10,20,false);//中间
                g.fillOval(x+5,y+10,10,10);//圆形
                g.drawLine(x+10,y+15,x+10,y-3);//炮管
                break;
            case 1://左
                g.fill3DRect(x,y,30,5,false);
                g.fill3DRect(x,y+15,30,5,false);
                g.fill3DRect(x+5,y+5,20,10,false);
                g.fillOval(x+10,y+5,10,10);
                g.drawLine(x+15,y+10,x-3,y+10);
                break;
            case 2://下
                g.fill3DRect(x,y,5,30,false);
                g.fill3DRect(x+15,y,5,30,false);
                g.fill3DRect(x+5,y+5,10,20,false);
                g.fillOval(x+5,y+10,10,10);
                g.drawLine(x+10,y+15,x+10,y+33);
                break;
            case 3://右
                g.fill3DRect(x,y,30,5,false);
                g.fill3DRect(x,y+15,30,5,false);
                g.fill3DRect(x+5,y+5,20,10,false);
                g.fillOval(x+10,y+5,10,10);
                g.drawLine(x+15,y+10,x+33,y+10);
                break;
        }
    }
}

5.Main类
import javax.swing.*;

public class Main extends JFrame {
    MyPanel myPanel= new MyPanel();
    Main()
    {
        this.add(myPanel);
        this.setSize(1200,1000);
        this.setLocation(200,10);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static  void main(String agrs[])
    {
        Main main =new Main();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值