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

Java Swing 實現俄羅斯方塊小遊戲完整源碼

     編輯:Java 相關知識

功能特性

  • 7 種經典方塊 (I, S, Z, J, O, L, T) 旋轉、下落、左右移動。
  • 消行計分、等級加速、Game Over 重玩/退出。
  • 暫停/繼續、菜單欄、鍵盤控制 (方向鍵、F1/F2 作弊鍵)。

核心類結構

  • Tetris extends JFrame:主窗口、菜單欄、啟動入口。
  • TetrisPanel extends JPanel:遊戲邏輯、繪製、定時器、鍵盤監聽。
  • TimerKeyListener:實現 ActionListener(定時下落) + KeyAdapter(鍵盤)。

關鍵算法

方塊定義 (4x4 矩陣,4 種旋轉態)

int[][][] shapes = {
    // I
    {{0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0},
     {0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0},
     {0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0},
     {0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0}},
    // S, Z, J, O, L, T ...
};

碰撞檢測

private int crash(int x, int y, int type, int state) {
    for (int a=0;a<4;a++) for (int b=0;b<4;b++)
        if ((shapes[type][state][a*4+b] & map[x+b+1][y+a]) == 1) return 0; // 撞牆/塊
    return 1; // 可移動
}

消行邏輯

private void tryDelLine() {
    for (int row=0; row<21; row++) {
        int full = 1;
        for (int col=0; col<12; col++) full &= map[col][row];
        if (full == 1) {
            // 上方所有行下移一行
            for (int r=row; r>0; r--)
                for (int c=0; c<11; c++) map[c][r] = map[c][r-1];
            score += 100;
            delay /= 1.05; // 加速
            timer.setDelay(delay);
        }
    }
}

運行方式

  1. 將代碼保存為 cn/hncu/Tetris.java。
  2. 編譯運行 java cn.hncu.Tetris。
  3. 方向鍵控制,F1 加分、F2 重置速度(作弊鍵)。

擴展建議

  • 下一塊預覽、幽靈塊提示、硬降落。
  • 高分記錄持久化 (文件/數據庫)。
  • 聲音特效、粒子動畫、雙人對戰模式。

總結

約 300 行代碼實現完整俄羅斯方塊,展示了 Swing 定時器驅動、矩陣碰撞檢測、雙緩衝繪製核心遊戲循環思想。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved