首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 完整實現 2048 小遊戲:Swing 版附全量源碼

     編輯:Java 相關知識

經典 2048 遊戲 Java Swing 完整復刻

基於網友版本重構優化,完整實現數字塊合並、上下左右移動、隨機生成、勝負判定、重新開始。採用 GridLayout 4x4 佈局,JLabel 繼承實現數字塊顏色映射,鍵盤事件驅動遊戲邏輯。

三大核心類

移動合並算法解析(以向上為例)

public void upBlock() {
    for (int col = 0; col < 4; col++) {
        int target = col; // 目標位置
        for (int row = col + 4; row < 16; row += 4) {
            // 1. 下沉非零塊到目標位置
            if (block[target].getValue() == 0) {
                int src = findNextNonZero(target, 4, 16);
                if (src != -1) { move(src, target); } else break;
            }
            int valTarget = block[target].getValue();
            // 2. 尋找下一非零塊
            if (block[row].getValue() == 0) {
                int src = findNextNonZero(row, 4, 16);
                if (src != -1) { move(src, row); } else break;
            }
            int valRow = block[row].getValue();
            // 3. 相等且非零 → 合並
            if (valTarget == valRow && valTarget != 0) {
                block[target].setValue(valTarget + valRow);
                block[row].setValue(0);
                numFlag = true; // 標記可生成新塊
            }
            target = row; // 推進目標位置
        }
    }
}

關鍵輔助方法

  • findNextNonZero(start, step, limit):按步長尋找下一個非零塊索引
  • judgeAppear():掃描 16 格,全滿則 numFlag=false
  • appearBlock():隨機空位生成 2(50%)/4(50%)
  • over():無法移動且無法生成 → 顯示 GAMEOVER,點擊重啟
  • win():出現 2048 → 顯示 YOU WIN,點擊重啟

運行與擴展

javac *.java
java My2048
  • 增加分數統計、最高分持久化、撤銷功能、動畫過渡
  • 遷移至 JavaFX/LibGDX 獲得更流暢動畫與跨平台能力
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類職責關鍵點
Block extends JLabel單個數字塊視圖value 屬性驅動文本/背景色(0=灰,2=米黃,2048=金黃,4096=紅)
My2048 extends JFrame主窗口Substance LookAndFeel 美化,GridLayout(4,4,5,5) 間距
Operation implements KeyListener遊戲邏輯核心16 元素數組建模棋盤,四向移動合並算法,隨機生成 2/4,勝負檢測