Java基础 坦克大战01绘制坦克

java绘图坐标体系

坐标体系-像素

1、绘图还必须搞清一个非常重要的概念-像素 一个像素等于多少厘米?

2、计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个就密度单位,而厘米是长度单位,两者无法比较

Java绘图技术

介绍-快速入门

import javax.swing.*;
import java.awt.*;

/**
 * @ClassName DrawCircle
 * @Description 如何在面板上画出圆形
 * @Author 小黄debug
 * @Date 2022/3/17 21:48
 * @Version 1.0
 **/
public class DrawCircle extends JFrame{//JFrame对应窗口,可以理解成是一个画框

    //定义一个面板
    private MyPanel mp = null;

    public static void main(String[] args) {
        new DrawCircle();
        System.out.println("退出 程序 !");
    }

    public DrawCircle (){
        //初始化
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置窗口大小
        this.setSize(400,300);
        //当点击窗口的小X,程序完全退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
//先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {

    //说明:
    //1。MyPanel对象就是一个画板
    //2。Graphics g 把g理解成一支画笔
    //3。Graphics提供了很多绘图的方法

    //当窗口最大化,最小化,窗口大小改变时会调用该类
    @Override
    public void paint(Graphics g) {//绘图方法
        super.paint(g);//调用父类的方法完成初始化
        System.out.println("paint方法被调用了");
        //画出一个圆形
        g.drawOval(10,10,100,100);
    }
}

绘图原理

Component类提供了两个和绘图相关最重要的方法

1、paint(Graphics g)绘制组件的外观

2、repaint()刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。

在以下情况paint()将会被调用

1、窗口最小化,最大化

2、窗口的大小发生变化

3、repaint方法被调用

Graphics类

Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的方法

1、画直接drawLine(int x1,int y1,int x2,int y2)

2、画矩形边框drawRect(int x,int y,int width,int height)

3、画椭圆边框drawOval(int x,int y,int width,int height)

4、填充矩形 fillRect(int x,int y,int width,int height)

5、填充椭圆 fillOval(int x,int y,int width,int height)

6、画图片drawImage(Image img,int x,int y,...)

7、画字符串drawString(String str,int x,int y)

8、设置画笔的颜色setFont(Font font)

9、设置画笔的颜色setColor(Color c)

import javax.swing.*;
import java.awt.*;

/**
 * @ClassName DrawCircle
 * @Description 如何在面板上画出圆形
 * @Author 小黄debug
 * @Date 2022/3/17 21:48
 * @Version 1.0
 **/
public class DrawCircle extends JFrame{//JFrame对应窗口,可以理解成是一个画框

    //定义一个面板
    private MyPanel mp = null;

    public static void main(String[] args) {
        new DrawCircle();
        System.out.println("退出 程序 !");
    }

    public DrawCircle (){
        //初始化
        mp = new MyPanel();
        //把面板放入到窗口(画框)
        this.add(mp);
        //设置窗口大小
        this.setSize(400,300);
        //当点击窗口的小X,程序完全退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}
//先定义一个MyPanel,继承JPanel类,画图形,就在面板上画
class MyPanel extends JPanel {

    //说明:
    //1。MyPanel对象就是一个画板
    //2。Graphics g 把g理解成一支画笔
    //3。Graphics提供了很多绘图的方法

    //当窗口最大化,最小化,窗口大小改变时会调用该类
    @Override
    public void paint(Graphics g) {//绘图方法
        super.paint(g);//调用父类的方法完成初始化
        System.out.println("paint方法被调用了");
        //画出一个圆形
        //g.drawOval(10,10,100,100);

//        1、画直接drawLine(int x1,int y1,int x2,int y2)
        //g.drawLine(10,10,100,100);
//        2、画矩形边框drawRect(int x,int y,int width,int height)
        //g.drawRect(10,10,100,100);
//        3、画椭圆边框drawOval(int x,int y,int width,int height)
        //g.drawOval(10,10,90,100);
//        4、填充矩形 fillRect(int x,int y,int width,int height)
        //g.fillRect(10,10,100,100);
//        5、填充椭圆 fillOval(int x,int y,int width,int height)
        //g.fillOval(10,10,100,100);
//        6、画图片drawImage(Image img,int x,int y,...)
        //1.获取图片资源
        //Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/A11.png"));
        //g.drawImage(image,10,10,100,100,this);
//        7、画字符串drawString(String str,int x,int y)
        g.setColor(Color.red);
        g.setFont(new Font("隶书",Font.BOLD,50));
        //这里设置的100,100是北京欢迎你的左下角
        g.drawString("北京欢迎你",50,100);
//        8、设置画笔的颜色setFont(Font font)
//        9、设置画笔的颜色setColor(Color c)
    }
}

绘制坦克活动区域

/**
 * @ClassName Hero
 * @Description
 * @Author 小黄debug
 * @Date 2022/3/18 6:34
 * @Version 1.0
 **/
public class Hero extends Tank{
    public Hero(int x, int y) {
        super(x, y);
    }
}
import java.awt.*;

/**
 * @ClassName MyPanel
 * @Description 坦克大战绘图区
 * @Author 小黄debug
 * @Date 2022/3/18 6:35
 * @Version 1.0
 **/
public class MyPanel extends Panel {
    //定义我的坦克
    Hero hero = null;
    public MyPanel(){
        hero = new Hero(100,100);   //初始化自己坦克
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillRect(0,0,1000,750);//填充矩形,默认黑色

        //画出坦克-封装方法
        drawTank(hero.getX(), hero.getY(),g,0,0);
    }

    /**
     *
     * @param x 坦克的左上角x坐标
     * @param y 坦克的在左上角y坐标
     * @param g 画笔
     * @param direct    坦克方向(上下左右)
     * @param 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;
        }

        //根据坦克方向,来绘制坦克
        switch(direct){
            case 0:
                g.fill3DRect(hero.getX(),hero.getY(),10,60,false);  //左边的轮子
                g.fill3DRect(hero.getX()+30,hero.getY(),10,60,false);   //右边的轮子
                g.fill3DRect(hero.getX()+10,hero.getY()+10,20,40,false);
                g.fillOval(x+10,y+20,20,20);
                g.drawLine(x+20,y+30,x+20,y);   //画出炮筒
                break;
            default:
                System.out.println("暂时没有处理");
        }
    }
}
/**
 * @ClassName Tank
 * @Description
 * @Author 小黄debug
 * @Date 2022/3/18 6:32
 * @Version 1.0
 **/
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;
    }
}
/**
 * @ClassName HsyTankGame01
 * @Description
 * @Author 小黄debug
 * @Date 2022/3/18 6:38
 * @Version 1.0
 **/
public class HsyTankGame01 extends JFrame {
    MyPanel mp = null;

    public static void main(String[] args) {
        HsyTankGame01 hsyTankGanme01 = new HsyTankGame01();

    }
    public HsyTankGame01(){
        mp = new MyPanel();
        this.add(mp);   //把面板(就是游戏的绘图区域)
        this.setSize(1000,750);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值