Java-坦克绘制(面向对象思想)

Java-坦克绘制(面向对象思想)

实现过程

  • 普通Tank类;
/**
 * 坦克
 * @author: SEA
 * @date: 2023/3/2
 */
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;
    }
}
  • 玩家坦克类,顾名思义,继承了坦克类;
/**
 * 游戏玩家坦克
 * @author: SEA
 * @date: 2023/3/2
 */
public class Hero extends Tank{

    public Hero(int x, int y) {
        super(x, y);
    }
}
  • 坦克游戏窗口;
/**
 * 坦克游戏窗口
 * @author: SEA
 * @date: 2023/3/2
 */
class GameFrame extends JFrame {//画框
    GamePanel gamePanel = null;

    public void draw() {
        gamePanel = new GamePanel();

        this.add(gamePanel);
        this.setSize(1000, 800);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}
  • 坦克游戏绘制区域;
  • 面向对象思想:在将坦克抽象为类后,通过实现drawTank(int x, int y, Graphics g, int direction, int type)方法来绘制多个坦克对象;
import javax.swing.*;
import java.awt.*;

/**
 * 坦克大战绘图区域
 * @author: SEA
 * @date: 2023/3/2
 */


class GamePanel extends JPanel {//画板

    //定义玩家的坦克
    Hero hero = null;

    public GamePanel() {
        hero = new Hero(100, 100);//初始化玩家坦克
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);

        //游戏窗口背景
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, 1000, 800);

        //标题
        g.setFont(new Font("楷体", Font.BOLD, 32));
        g.setColor(Color.RED);
        g.drawString("TankGame V0.1", 60, 40);

        //绘制坦克->封装成方法
        drawTank(hero.getX(), hero.getY(), g, 0, 0);
        drawTank(hero.getX() + 100, hero.getY(), g, 0, 1);
        drawTank(hero.getX(), hero.getY() + 100, g, 0, 1);
        drawTank(hero.getX() + 100, hero.getY() + 100, g, 0, 0);

    }

    /**
     *
     * @param x 坦克左上方x轴坐标
     * @param y 坦克左上方y轴坐标
     * @param g 画笔
     * @param direction 坦克的朝向
     * @param type 坦克类型:0 => 玩家坦克,1 => 敌方坦克
     */
    public void drawTank(int x, int y, Graphics g, int direction, int type){

        //不同坦克类型,颜色不同
        switch (type){
            case 0://玩家坦克
                g.setColor(Color.YELLOW);
                break;
            case 1://敌方坦克
                g.setColor(Color.CYAN);
                break;
        }

        //不同方向的坦克
        switch (direction){
            case 0://向上坦克
                g.fill3DRect(x, y, 10, 60, false);//坦克左矩形(履带)
                g.fill3DRect(x+34, y, 10, 60, false);//坦克右矩形(履带)
                g.fill3DRect(x+10, y+10, 24, 40, false);//坦克中间矩形(驾驶仓)
                g.fillOval(x+10, y+18, 24, 24   );//坦克中间圆形(炮台)
                g.fill3DRect(x+22, y, 2, 22, false);//坦克中间矩形(炮筒)
                break;
            default:
                System.out.println("未处理其他方向的坦克");
                break;
        }
    }
}

绘制效果

  • 如图所示:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEA-365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值