本文為初級開發者系列第三部分,延續「Wombat 物件基礎」與「Wombat 類別基礎」,透過 Greenfoot Ants 螞蟻模擬場景,實作講解 Java 套件組織、變數運作、物件間方法呼叫互動。需安裝 Java SE 與 Greenfoot 環境,無程式經驗亦可跟隨學習。
從 Scenario 選單開啟 scenarios/ants,點擊 Compile All 編譯,再按 Run 執行。螞蟻離巢尋食,發現食物後拖運返巢並釋放費洛蒙(信息素)標記路徑,隨更多螞蟻往返,路徑氣味濃度遞增,形成正向回饋機制。場景可動態新增螞蟻與蟻丘觀察群體行為。
開啟 Ant 類別編輯器,首行為匯入宣告:
import greenfoot.*; // World, Actor, GreenfootImage, Greenfoot import java.util.Random; import java.util.List; import java.util.Collection; import java.util.Iterator;
匯入宣告讓應用程式使用 Java API、第三方或自訂類別。首行標示使用 greenfoot 套件。Java 類別透過套件按功能分類:java.lang 基礎類、java.io 輸入輸出、java.util 集合與工具類等。類別首行必須宣告套件。建議閱讀 Java API 文件熟悉可用類別與方法,並對照 Ants 程式碼驗證 Random、List、Collection、Iterator 的實際用途。
Ant 類別中定義多個欄位,欄位宣告包含三要素:修飾詞、型別、名稱。範例:
/** 隨機數產生器 */ private static final Random randomizer = AntWorld.getRandomizer(); /** 每幾步可放置一滴費洛蒙? */ private static final int MAX_PH_LEVEL = 18; /** 發現費洛蒙後保持方向多久? */ private static final int PH_TIME = 30; /** 螞蟻移動速度 -- 每次更新像素數 */ private static final int SPEED = 3; // 當前移動向量 private int deltaX = 0; private int deltaY = 0; /** 家蟻丘位置 */ private AntHill homeHill; /** 是否攜帶食物 */ private boolean carryingFood = false; /** 目前費洛蒙濃度 */ private int pheromoneLevel = MAX_PH_LEVEL; /** 記憶上次費洛蒙程度 -- 數值越大越近期 */ private int foundLastPheromone = 0;
變數代表會改變或固定的值。上例中 SPEED 賦值 3,等號右側為值、左側為變數。這些欄位定義物件狀態:如真實世界球的顏色、直徑;狗的睡醒狀態。對 Ant 而言,狀態包含移動速度、費洛蒙濃度、記憶力等。螞蟻透過費洛蒙尋食並引導同類,欄位 MAX_PH_LEVEL 定義滴釋間隔步數,foundLastPheromone 控制記憶衰減機制。變數初值常設 0 或空值,執行期動態變化。
static 修飾,每個物件實例擁有獨立副本。static 修飾,類別層級僅一份副本,所有實例共享。private 僅類別內可存取,public 所有類別可存取。Food 類別所有欄位皆為 private static final,封裝大小、顏色等常數。Ant 類別 checkFood() 方法展示物件互動:
public void checkFood() {
Food food = (Food) getOneIntersectingObject(Food.class);
if (food != null) {
takeFood(food);
}
}
宣告 Food 型別區域變數 food(類別名大寫、變數名小寫慣例),透過 getOneIntersectingObject 檢測碰撞,若存在則呼叫 takeFood() 處理拾取邏輯。
Food 類別封裝外觀與數量:
private static final int SIZE = 30; private static final int HALFSIZE = SIZE / 2; private static final Color color1 = new Color(160, 200, 60); private static final Color color2 = new Color(80, 100, 30); private static final Color color3 = new Color(10, 50, 0); private int crumbs = 100;
使用 Color 物件以 RGB 定義顏色,整數定義像素大小。takeSome() 方法計算拾取量並呼叫 updateImage() 更新視覺呈現。randomCoord() 利用高斯分布 (nextGaussian) 讓食物碎屑向中心聚集,模擬自然堆疊效果。
本文涵蓋套件組織、匯入機制、變數型別與作用域、物件方法互動核心概念。建議在 Greenfoot 開啟其他場景,閱讀類別程式碼觀察變數定義與方法呼叫,嘗試修改方法改變物件行為。Greenfoot 社群提供豐富進階場景可下載研究,持續探索 Java 程式設計奧秘。