南港高中高慧君老師 ( 五 ) 9:00~12:00
英國肯特大學所發表的自由軟體。 它是程式設計教學軟體,可以用來學習 Java 語法與物件導向程式設計概念。 你可以使用 Greenfoot 來開發互動遊戲。 特別適合 14 歲以上的青少年使用。
類別關係圖圖 場景 執行控制列
Greenfoot 使用 Java 物件導向程式語言。 類別 (class) 是定義物件的基礎,用來描述物件 的特性與行為。
以「 Wombat ( 袋熊 ) 」類別為例,它用來描述 袋熊這類物件的行為和特性。 類別定義完成後,就可以根據類別來產生物 件,根據類別所產生的物件,稱為實體 (instance) 。
類別中所定義的行為稱為方法 (method) 。 在物件實體上按右鍵檢視物件所具備的方法
方法前面的關鍵字,如 void 、 boolean 、 int 等, 代表方法的傳回值型態,即這個方法被呼叫 時,會傳回什麼的資訊。 void 代表這個方法沒有傳回值。 int 代表這個方法將傳回一個整數。 boolean 代表這個方法將傳回一個布林值。
方法名稱後面小括弧內的資訊,稱為參數, 即這個方法被呼叫時,需傳入什麼資訊。 void act( ) :代表呼叫時,不需傳遞額外資訊。 void setDirection(int direction) :代表呼叫時, 需傳一個整數資料給 setDirection 這個方法, 而且 setDirection 方法內部以 direction 這個名稱 來代表所接收的參數值。
由「執行控制列」也可以呼叫物件中的方法。 按「單步執行」按鈕: 會呼叫每一個物件的 act 方法一次。 按「執行」按鈕: 會重複呼叫每一個物件的 act 方法。
如果把整個 Greenfoot 的場景視為一個微世界 (microworld ),那麼微世界中的每一個物件 就像是演員,我們程式要操弄的也就是這些 演員間的互動方式。 放到微世界中的物件(演員)都有 Act() 方法。 不同類別物件的 Act() 方法都各自定義自己的 程式功能,所以執行不同類別物件的 Act() 方 法將產生不同的結果。
以袋熊的 Act() 方法為例,其程式功能如下: (1) 若袋熊剛好坐在樹葉上,那就吃了樹葉。 (2) 若袋熊沒遇到邊界,那就往前走; (3) 若遇到邊界就左轉。
在沙灘上有一隻螃蟹,會不停地往右走。 你可以用方向鍵控制它的方向。 螃蟹會吃掉沙灘上的蟲蟲。 螃蟹遇到龍蝦就會被它吃掉。
專案中所包含的類別有 Actor 、 Animal 、 Crab Actor 是多數專案均會具備的類別。 Animal 與 Actor 間的連結符號代表繼承,所以 Animal 類別繼承 Actor 類別。同樣地, Crab 繼 承 Animal 。
Crab 可以繼承使用在 Animal 中定義的方法。 boolean atWorldEdge() void move() void turn(int angle) boolean canSee(java.lang.Class clss) void eat(java.lang.Class clss)
編輯 Crab 類別的 act() 方法。 public void act() { move(); }
public void act() { turn(10); } 編輯 Crab 類別的 act() 方法。
public void act() { move(); turn(10); } 編輯 Crab 類別的 act() 方法。
程式語法:單向選擇結構 if ( 條件式 ) { 程式敘述 ; }
public void act() { move(); if (atWorldEdge()) { turn(10); } 編輯 Crab 類別的 act() 方法。
在 Animal 類別中,按下滑鼠右鍵,從選單中 選取「新建子類別」。 輸入類別名稱「 Worm 」 ( 注意:類別名稱的命名 慣例以大寫字母開始 ) 選取圖片「 worm.png 」
判斷是否遇見某類別的物件 boolean canSee (java.lang.Class clss) 移除指定某類別的物件 void eat (java.lang.Class clss)
if (canSee(Worm.class)) { eat (Worm. class) ; } 修改 Crab 類別的 act() 方法。
修正 CrabWorld 類別,讓專案一開始啟動時, 也能在場景中自動建立一些角色。 在 CrabWorld 建構子中加入以下指令: addObject(new Crab(), 150, 100); 試著增加 3 隻蟲蟲在不同的位置上。 addObject(new Worm(), 100, 200);
在 Greenfoot 類別中有一個方法,用於偵測某 鍵盤是否被按下,如下: static boolean isKeyDown(String key) 傳回值是 boolean ,所以可做為 if 的條件式 判斷使用者是否按下左鍵 Greenfoot.isKeyDown(“left”)
增加 Crab 類別中 act() 方法的程式碼。 if (Greenfoot.isKeyDown("left")) { turn(5); }
為了讓遊戲更有趣,所以增加會吃螃蟹的龍 蝦到專案中,我們希望龍蝦追逐螃蟹,而螃 蟹追逐蟲蟲。 當螃蟹被龍蝦抓到時,結束遊戲。 Greenfoot.stop();
當龍蝦吃掉螃蟹或螃蟹吃掉蟲蟲時,播放適 放的音效,會讓遊戲更生動。 在專案的 sounds 資料夾中,找到兩個聲音檔 「 au.wav 」及「 slurp.wav 」 找到龍蝦吃掉螃蟹那一段程式,增加音效。 Greenfoot.playSound(“au.wav”); 找到螃蟹吃掉蟲蟲那一段程式,增加音效。 Greenfoot.playSound(“slurp.wav”);