1. 程式人生 > >JAVA入門到精通-第34講-繪圖技術-坦克大戰2

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 構造“我的坦克”








 

來自為知筆記(Wiz)