1. 程式人生 > >JAVA入門到精通-第39講-執行緒.坦克大戰7

JAVA入門到精通-第39講-執行緒.坦克大戰7

 如果沒有做要求,用實現介面的方法寫程序;  至少有繼承的機會;    實際上,更多的情況下是多執行緒計算;    兩個執行緒,t1/t2,同時啟動;  建立了一隻豬,建立了一隻鳥;  第一個執行緒承載豬,第二個執行緒承載鳥;  很可能是交替進行,但也未必;和休眠時間相關;      同時去爭奪一種資源,執行緒同步的問題;  
   Thread類本身就實現了Runnable介面,本身是一家人;  啟動的方式不太一樣;    坦克的子彈自動跑(肯定用到執行緒):  子彈也是一個物件:有座標,有速度;  可以當做執行緒的一個類,可以自動跑動;    子彈也是屬於某個坦克的;     
       這個坦克永遠只能有一顆子彈;
 當用戶按下J的時候,子彈發射:KeyPressed    else if 的致命毛病是找到一個入口,   不會去判斷另外的入口;    按了W鍵,子彈就可能出不來了;
     繪製子彈:  其實是一個點:     怎麼讓子彈跑起來? 讓子彈的座標不停的得到修改。   把子彈做成一個執行緒,不停地修改座標達到目的; 傳方向進去:    傳進速度:      //子彈何時死亡?
啟動子彈:  雖然子彈座標在變化,但子彈不變; paint函式需要不停地重繪,子彈才能跑; 把MyPanel也做成一個執行緒;  螢幕本身也在不停的重新整理:     還得啟動MyPanel執行緒   但是,打一顆子彈,這子彈永遠在跑: 當子彈碰到敵人坦克/邊框的時候子彈死亡; boolean isLive=true; ----------------------------------------------------------
 多執行緒例項演示[Thread03.java]
x   1
/**
2
 *多執行緒Thread使用
3
 *1、一個執行緒通過接收n來執行1+..+n得到和
4
 *2、另一執行緒每隔1秒輸出一次hello world!
5
 */
6
public class Thread03 {
7
    public static void main(String[] args) {
8
        Pig pig=new Pig(10);
9
        Bird bird=new Bird(10);
10
        //建立執行緒
11
        Thread t1=new Thread(pig);
12
        Thread t2=new Thread(bird);
13
        //啟動執行緒
14
        t1.start();
15
        t2.start();
16
    }
17
}
18
19
//列印hello world!
20
class Pig implements Runnable{
21
    int n=0;
22
    int times=0;
23
    public Pig(int n){
24
        this.n=n;
25
    }
26
    
27
    public void run(){
28
        while(true){
29
            try {
30
                Thread.sleep(1000);
31
            } catch (Exception e) {
32
                e.printStackTrace();
33
            }
34
            times++;
35
            System.out.println("我是一個執行緒,正在輸出第"+times+"個hello world!");
36
            if(times==n){
37
                break;
38
            }
39
        }
40
    }
41
}
42
43
//算數學題
44
class Bird implements Runnable{//多執行緒時應使用implements介面來實現,不要使用extends繼承
45
    int n=0;
46
    int res=0;
47
    int times=0;
48
    public Bird(int n){
49
        this.n=n;
50
    }
51
    
52
    public void run() {
53
        while(true){
54
            try {
55
                Thread.sleep(1000);
56
            } catch (Exception e) {
57
                e.printStackTrace();
58
            }
59
            res+=(++times);
60
            System.out.println("當前結果是:"+res);
61
            if(times==n){
62
                System.out.println("最後的結果是:"+res);
63
                break;
64
            }
65
        }
66
    }
67
}
68
  MyTank03:
 


來自為知筆記(Wiz)