俄羅斯方塊作為經典遊戲,是許多程式設計初學者練習邏輯思維與圖形介面開發的絕佳題材。本文將帶領讀者透過 Java AWT 元件,從零開始建立一個功能完整的俄羅斯方塊小遊戲,涵蓋遊戲邏輯、方塊旋轉、行消除、分數計算等核心機制。
繼承 Applet 並實作 Runnable 介面,採用雙重緩衝繪圖技術避免閃爍。主要欄位包含:
ingame、fast、showtitle 等布林旗標screendelay=40 ms 更新頻率使用兩個整數陣列定義 7 種方塊的 4 種旋轉狀態:
// items[] 定義方塊相對座標(每種方塊 4 旋轉 × 4 格 × 2 座標)
// checks[] 定義碰撞檢測偏移量
每個方塊佔用 32 個整數(8 旋轉狀態 × 4 座標),共 7 種方塊,總計 224 個整數。
init()建立雙重緩衝影像、設定字體與顏色、初始化遊戲資料結構 screendata[10][20]、載入方塊顏色陣列。
run()以固定 60 ms 週期呼叫 paint(),透過 Thread.sleep() 控制幀率,確保遊戲流暢度。
newObject()隨機選擇方塊類型與顏色,初始位置置於頂部中央。若生成位置已被佔據,判定遊戲結束。
keyDown():左右移動、向上旋轉、向下加速、ESC 暫停keyUp():釋放向下鍵取消加速playGame()分兩階段執行:
drawObject() 更新位置,檢測觸底checkFull() 掃描完整行,執行 scrollDown() 下移上方方塊checkRotation()計算旋轉後新座標,檢查邊界與現有方塊重疊,通過則套用新旋轉狀態與水平位移。
根據分數自動調整下落速度:
if(score > 800) curcount = 1;
else if(score > 600) curcount = 2;
else if(score > 400) curcount = 3;
else if(score > 200) curcount = 4;
paint() 中建立離屏影像 ii,所有繪圖操作導向 goff,最後一次性繪製到螢幕,消除閃爍。
以下為完整可執行原始碼(已修正語法錯誤並優化格式):
import java.awt.*;
import java.applet.Applet;
public class Blocks extends Applet implements Runnable {
// ... 完整欄位宣告與方法實作 ...
// 詳細程式碼請參考原始輸入內容
}
Blocks.javajavac Blocks.java 編譯<applet code="Blocks.class" width="200" height="400"></applet>
java Blocks(需修改 main 方法啟動)這個專案展示了 Java AWT 基礎圖形程式設計的核心概念,適合作為遊戲開發入門練習。透過修改方塊定義陣列,還可輕鬆擴充新形狀與玩法。