JAVA入门到精通-第34讲-绘图技术-坦克大战2

椭圆的X/Y轴在左上角;
 
 Toolkit是一个类;
 用Panel里面的getResource方法把图片加载到Toolkit里面;

dx1/2图片左上角;
dy1/dy2图片的宽高;
this表示JPanel本身;表示把图片画到JPanel上;
str画出什么东西;
x ,y 出现的位置;
Font有三个参数:“字体”,“字体粗体还是斜体”,“字体的大小”
 一般不会用现成图片,耗费资源比较大;
class Tank
 坦克下面有各种各样的坦克,先抽象出来一个父类;


   用父类的构造函数初始化子类的对象;


 坦克的活动区域在JPanel上;
 将来的坦克是生活在Panel区域里面的;

 可以认为,坦克是一个Panel的成员变量的;
 一个类里面是可以有引用类型的;

 
以左上角的参照点来计算;
 
X/Y轴坐标从hero中取得;
g.fill填充的 颜色;
 
把整个代码进行封装-画出坦克的函数:敌人的函数、我的函数
:横坐标X,纵坐标Y,画笔g,方向,坦克的类型;
 
switch判断什么类型的坦克,敌人的坦克?我的坦克?
 
这样画不同的坦克,一次就搞定了;

/画图Graphics画图类--画图片--画字[Window015.java]
xxxxxxxxxx
40
 
1
import java.awt.*;
2
import javax.swing.*;
3
public class Window015 extends JFrame{
4
    //定义组件
5
    MyPanel1 mp=null;
6
    public static void main(String[] args) {
7
        Window015 th=new Window015();
8
    }
9
    public Window015(){
10
        //构建组件
11
        mp=new MyPanel1();
12
        //加入组件
13
        this.add(mp);
14
        //设置窗体
15
        this.setSize(400, 300);
16
        this.setLocationRelativeTo(null);
17
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18
        this.setVisible(true);
19
    }
20
}
21
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
22
class MyPanel1 extends JPanel{
23
    //重写(覆盖)JPanel的paint方法
24
    public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔
25
        //1、调用父类函数,完成初始化任务
26
        super.paint(g);
27
        //在面板上画出图片
28
        Image im=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/F22.jpg"));
29
        //实现
30
        g.drawImage(im, 0, 0, 300, 200, this);
31
        
32
        //如何画出字
33
        g.setColor(Color.red);
34
        g.setFont(new Font("黑体",Font.BOLD,40));
35
        g.drawString("祖国万岁", 100, 100);
36
        //画弧形
37
        g.drawArc(100, 100, 120, 200, -50, -100);
38
    }
39
}
40
 

x
 
1
package com.guiTest.www.model;
2
import java.awt.*;
3
import javax.swing.*;
4
public class MyTank01 extends JFrame
5
{
6
    //定义组件
7
        MyPanel mp=null;
8
    public static void main(String[] args) {
9
        // TODO Auto-generated method stub
10
        MyTank01 mt=new MyTank01();
11
    }
12
13
14
15
//构造函数
16
public MyTank01(){
17
    //构建组件
18
    mp=new MyPanel();
19
    
20
    //加入组件
21
    this.add(mp);
22
    
23
    //设置JFrame窗体
24
    this.setTitle("坦克大战");//JFrame标题
25
    this.setSize(400, 300);//JFrame窗体大小
26
    this.setLocationRelativeTo(null);//在屏幕中心显示
27
    this.setVisible(true);//显示
28
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame
29
    
30
    }
31
}
32
//我的面板Panel
33
class MyPanel extends JPanel{
34
    //定义一个我的坦克
35
    Hero hero=null;
36
    
37
    //构造函数
38
    public MyPanel(){
39
        hero=new Hero(10,10);//我的坦克初始位置
40
    }
41
    
42
    //重写paint函数
43
    public void paint(Graphics g){
44
        super.paint(g);//调用父类paint方法
45
        //设置Panel底色
46
        g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域
47
        //调用坦克
48
        this.drawTank(hero.getX(), hero.getY(), g, 0, 1);
49
        
50
    }
51
    
52
    //画出坦克的函数
53
    public void drawTank(int x,int y,Graphics g,int direct,int type){
54
        //判断是什么类型的坦克
55
        switch(type){
56
        case 0:
57
            g.setColor(Color.cyan);//我的坦克颜色
58
            break;
59
        case 1:
60
            g.setColor(Color.yellow);//敌人坦克颜色
61
            break;
62
        }
63
        
64
        //判断坦克的方向
65
        switch(direct){
66
        //向上走
67
        case 0:
68
            //画出我的坦克(到时再封装成一个函数)
69
            //1、画出左边的矩形
70
            g.fill3DRect(x, y, 5, 30, false);
71
            //2、画出右边的矩形
72
            g.fill3DRect(x+15, y, 5, 30, false);
73
            //3、画出中间矩形
74
            g.fill3DRect(x+5, y+5, 10, 20, false);
75
            //4、画出中间圆形
76
            g.fillOval(x+5, y+10, 10, 10);
77
            //5、画出线(炮筒)
78
            g.drawLine(x+10, y+15, x+10, y);
79
            break;
80
        }
81
    }
82
    
83
}
84
85
//定义坦克类
86
class Tank{
87
    //表示坦克的X横坐标Y纵坐标
88
    int x=0,y=0;
89
90
    public Tank(int x,int y){
91
        this.x=x;
92
        this.y=y;
93
    }
94
    
95
    public int getX() {
96
        return x;
97
    }
98
    public void setX(int x) {
99
        this.x = x;
100
    }
101
    public int getY() {
102
        return y;
103
    }
104
    public void setY(int y) {
105
        this.y = y;
106
    }
107
}
108
109
//我的坦克
110
class Hero extends Tank{
111
    public Hero(int x,int y){
112
        super(x,y);
113
    }
114
}
 

 1、public构造函数-构造JFrame;
 2、class MyPanel  构造面板
 3、class Tank  构造坦克
 4、class Hero extends Tank 构造“我的坦克”









 




猜你喜欢

转载自www.cnblogs.com/xuxaut-558/p/10045720.html