1. 程式人生 > >Java實現俄羅斯方塊附原始碼

Java實現俄羅斯方塊附原始碼

Java實現俄羅斯方塊

軟體的開發過程:
1) 搞清需求,就是軟體的功能描述

俄羅斯方塊的基本規則:
1、一個用於擺放小型正方形的平面虛擬場地,其標準大小:
行寬為10,列高為20,以每個小正方形為單位。
2、一組由4個小型正方形組成的規則圖形,
英文稱為Tetromino,中文通稱為方塊共有7種,
分別以S、Z、L、J、I、O、T這7個字母的形狀來命名。
I:一次最多消除四層
J(左右):最多消除三層,或消除二層
L:最多消除三層,或消除二層
O:消除一至二層
S(左右):最多二層,容易造成孔洞
Z (左右):最多二層,容易造成孔洞
T:最多二層

(1)玩家操作有:旋轉方塊,以格子為單位左右移動方塊,
      讓方塊加速落下。
(2)方塊移到區域最下方或是著地到其他方塊上無法移動時,
     就會固定在該處,而新的方塊出現在區域上方開始落下。
(3)當區域中某一列橫向格子全部由方塊填滿,則該列會消失
  併成為玩家的得分。同時刪除的列數越多,得分指數上升。
(4)當固定的方塊堆到區域最上方而無法消除層數時,則遊戲結束。
(6)一般來說,遊戲還會提示下一個要落下的方塊,熟練的玩家會計算到下一個方塊,評估要如何進行。由於遊戲能不斷進行下去對商業用遊戲不太理想,所以一般還會隨著遊戲的進行而加速提高難度。
(7)預先設定的隨機發生器不斷地輸出單個方塊到場地頂部

2)需求分析
 2.1 找物件,找東西
   物件關係模型
  tetris (俄羅斯方塊)
    |-- tetromino 一個正在下落的方塊
    |     |-- cells 4個格子
    |-- nextOne 下一個 準備下落的方塊
    |     |-- cells 4個格子
    |-- wall 牆, 是方塊下落到底部 打散著陸到牆上
          |-- rows 20行
               |-- cols 10列 個格子
 
  2.2 數學模型設計
    
  2.3 類的設計: 是根據數學模型 設計的屬性
   Tetris (俄羅斯方塊)類 繼承 JPanel
     |-- Tetromino tetromino 正在下落的方塊
     |-- Tetromino nextOne 下一個準備下落的方塊
     |-- Cell[][] wall 是2維陣列
  
   Tetromino 類
     |-- Cell[] cells 4個格子
    
   T 型方塊 繼承  Tetromino 類
   I 型方塊 繼承  Tetromino 類
   ...
  
   Cell 類
 |-- int row 行號
 |-- int col 列號
  
3)功能分析,和 演算法實現
   功能分析 對映到 數學模型的資料計算
    數學模型的資料計算:演算法
 
  分析策略:功能就是方法,功能的描述中的動詞也是方法   
   
  3.1 下落功能:(softDropAction())
     如果(檢查)能夠下落就下落,否則就著陸到牆上,
    而新的方塊出現在區域上方開始落下。
       (檢查)能夠下落: tetrominoCanDrop()
       著陸到牆上: tetrominoLandToWall()
      
   根據數學模型分析 方法實現的計算策略.
  
  3.2 移動(左右)功能 moveRightAction()
   
    可以移動方塊,移動邊界就不能再移動了,如果碰到牆上的方塊
    也不能再移動了。
   
    變通解決方案:先移動方塊,移動以後立即檢查移動結果,如果
    發現出界,就立即移動回來。也就是原地不動。
     如果移動以後,檢查發現與牆上的方塊重合,也移動回來。
   
    功能分析:
      1)檢查是否出界  outOfBound()
      2)檢查是否重合  coincide()
   
    tetromino.moveLeft();
    if(outOfBound() || coincide()){
     tetromino.moveRight();
    }
 
 
  3.3 旋轉功能  rotateRightAction()
   
    tetromino.rotateRight();
    if(outOfBound() || coincide()){
      tetromino.rotateLeft();
    }
 
  3.4 開始功能: 開始自動下落 startAction()
  1) 遊戲開始時候執行 action() 方法中執行這個方法!
  2) 開始流程
     1.清空牆
     2.生成下落的方塊
     3.清空分數
     4.清理暫停 和 結束狀態
     5.啟動定時器 定時執行 softDropAction
 
  3.5 清除滿行功能(計分)
 
  3.6 暫停、繼續功能  pauseAction() continueAction()
    1) 暫停流程
      1. 停止定時器
      2. 暫停狀態設定為 true
     
    2)暫停事件繫結到 [P] 按鍵。一定要攔截其它按鍵的處理
      暫停期間只能處理 [C] 按鍵事件
   
    3)繼續流程
      1. 重新建立並且啟動定時器!
      2. 暫停狀態設定為 false

  3.7 結束遊戲功能 checkGameOver()
      1) 流程
        1. 檢查wall[0][4] 是否有方塊,如果有,遊戲遊戲結束
        2. 如果遊戲結束 gameOver = true
        3. 停止timer
         
      2) 事件處理
            如果遊戲結束,只能處理 [S] 重新開始遊戲
     
      3)在清理滿行以後檢查遊戲結束!
        修改 softDropAction hardDropAction     
     
  3.8 繪製 分數,繪製下一個方塊
    paint()
   
    paintTetromino()
    paintNextOne()
    paintScore()

======================================================================================

效果圖

======================================================================================

完整原始碼