俄羅斯方塊Java編寫精髓_第1頁
俄羅斯方塊Java編寫精髓_第2頁
俄羅斯方塊Java編寫精髓_第3頁
俄羅斯方塊Java編寫精髓_第4頁
俄羅斯方塊Java編寫精髓_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、項目評審項目評審俄羅斯方塊俄羅斯方塊主講人:雷凱主講人:雷凱組員:沈唯唯,李有寧,田園組員:沈唯唯,李有寧,田園田亮,尹亮田亮,尹亮界面展示程序運行成功后,進入游戲界面。如左圖所示。游戲暫停按下鍵盤按鍵“P”(pause)游戲進入停止狀態,等待用戶按下“C”(Continue)鍵繼續游戲。退出游戲按下鍵盤按鍵“Q”(Quit)彈出系統提示框,選擇是否要退出游戲。游戲結束當方框到達頂端時(Wall04!=null),判定游戲結束。按下“S”可重新初始化界面開始游戲具體實現Cell(格子類)Tetromino(四格方塊類) 7個子類(T,I,O,S,Z,J,L)一個內部類(State):存放四個方

2、塊旋轉時的坐標狀態。Tetris(俄羅斯方塊類) extends Jpanel邏輯處理及方法的具體實現CellCell屬性:row,col,Image方法:drop(); / 向下降落一個單位 leftMove(); / 向左移動一個單位 rightMove(); / 向右移動一個單位TetrominoCell cells = new Cell4; State states; /旋轉狀態Index; /旋轉下標Protected class State ; /旋轉狀態類(內部類)7個子類7種方塊rotateRight(); /向右旋轉rotateLeft(); /向左旋轉softDrop();

3、 /下落moveLeft(); /左移moveRight(); /右移RandomOne(); /隨機生成一個四格方塊Tetrispaint(Graphics g); /重寫繪圖方法paintWall(Graphics g); /繪制墻action(); /通過調用該方法 啟動軟件Quit(); /退出pauseAction(); /暫停continueAction(); /繼續paintTetromino(Graphics g); /繪制四格方塊paintNextOne(Graphics g); /繪制下一個方塊paintScore(Graphics g); /繪制成績paintLines(

4、Graphics g); /繪制已消除行數paintPause(Graphics g); /繪制暫/繼續停提示softDropAction(); /下落控制方法canDrop(); /判斷是否能夠繼續下落landToWall(); /著陸到墻destroyLines(); /銷毀的行數fullCells(int row); /判斷一行是否滿了deleteLine(int row);/刪除一行checkGameOver(); /檢查游戲結束狀態moveLeftAction(); /判斷左移是否出界moveRightAction(); /判斷右移是否出界rotateRightAction();/判

5、斷旋轉是否出界outOfBounds(); /檢查是否出界coincide(); /判斷是否重合hardDropAction(); /瞬間下降startAction(); /開始動作流程簡單工廠模式實例化四格方塊簡單工廠模式實例化四格方塊T,I,O,S,Z,J,L(T,I,O,S,Z,J,L(田亮田亮) ) 將將7 7個子類封裝到類個子類封裝到類TetrominoTetromino,在構造方法里初始化,在構造方法里初始化四格方塊的初始位置四格方塊的初始位置(row,col)(row,col)和相對位置和相對位置. .初始位置:cell0 = (0,4);cell1 = (0,3);cell2

6、= (0,5);cell3 = (1,3);以以“L L”型四格方塊為例:型四格方塊為例:以編號為“0”的格子為旋轉軸,計算其他格子的相對坐標:states0 = (0,0,0,-1,0,1,1,-1);states1 = (0,0,-1,0,1,0,-1,-1);states2 = (0,0,0,1,0,-1,-1,1);states3 = (0,0,1,0,-1,0,1,1);states0 states1 states2 states3旋轉,左移,右移(沈唯唯)旋轉,左移,右移(沈唯唯)private int Index = 10000; 表示旋轉狀態下標.設置為10000防止旋轉次數過

7、多而使游戲無法正常進行.在Tetromino類中添加內部類State屬性:row0,col0,row1,col1,row2,col2,row3,col3 以上8個屬性表示4個方塊的相對坐標.構造方法:public State(int row0)旋轉rotateRight(); 下標Index自增rotateLeft(); 下標Index自減State s = statesindex%states.length; 當前狀態s為四格方塊旋轉index%states.length次的狀態.以cells0為旋轉軸,根據初始化的相對坐標cells1.setRow(cells0. getRow() + s

8、.row1);cells1.setCol(cells0. getCol() + s.col1);cells2.setRow(cells0. getRow() + s.row2);cells2.setCol(cells0. getCol() + s.col2);cells3.setRow(cells0. getRow() + s.row3);cells3.setCol(cells0. getCol() + s.col3);左移、右移moveLeftAction(); /左移先調用tetromino.moveLeft();如果出界,或者重合再調用tetromino.moveRight();在mov

9、eLeft方法中遍歷當前對象cells中所有cell對象循環調用cell.leftMove();moveRightAction(); /右移的原理同上下落下落( (李有寧李有寧) )softDropAction(); /一步一步下落if(canDrop()為true(檢查當前方塊是否能夠繼續下落),則調用tetromino.softDrop();在softDrop()中遍歷cells對象調用cell.drop();hardDropAction(); /瞬間下降while(canDrop()為true(檢查當前方塊是否能夠繼續下落),則調用tetromino.softDrop();在softDr

10、op()中遍歷cells對象調用cell.drop();否則調用方法:landToWall(); / 著陸到墻destroyLines(); / 銷毀行數checkGameOver(); / 檢查游戲是否結束landToWall(); /著陸到墻Cell cells = tetromino.cells;遍歷當前四格方塊對象將每一個格子對象賦值給墻wallcell.getRowcell.getCol = celldestroyLines(); /銷毀行數遍歷每行的格子,如果fullCells(row)(遍歷當前行的各自是否是滿的)為true,調用deleteLine(row)消除這行; line

11、s+;最后加成績this.score += scoreTablelines;scoreTable為得分表判斷方法,暫停、繼續、退出判斷方法,暫停、繼續、退出( (田園田園) )checkGameOver(); /檢查游戲是否結束如果wall04 != null成立,調用timer.cancle() 關閉計時器,游戲結束.outOfBounds(); /出界檢查方法Cell cells = tetromino.cells;遍歷當前四格方塊對象的每個格子如果(cell.getCol=COLS | cell.getRow = ROWS)成立(方塊是否出了長方形界面),返回true;coincide(

12、) /判斷重合方法Cell cells = tetromino.cells;遍歷當前四格方塊對象的每個格子如果(cell.getCol = 0 & cell.getCol = 0 & cell.getRow ROWS& wallcell.getRowcell.getCol!=null)成立(在長方形界面內部檢查是否撞到其他方塊),返回true.pauseAction(); /暫停游戲timer.cancel(); /終止該計時器pause = true; /將暫停標記設置為truecontinueAction(); /繼續游戲pause = false; /設置暫停標記

13、為falsetimer = new Timer(); /創建一個新的計時器對象timer.schedule(new TimerTask()public void run() softDropAction();repaint();, inteval, inteval);schedule(TimerTask task,long delay,long period)安排指定的任務從指定的延遲后開始進行重復的固定延遲執行Inteval為間隔時間800ms;繪圖方法繪圖方法( (尹亮尹亮) )paint(Graphics g); /重寫繪圖方法g.drawImage(background, 0, 0,

14、null); /畫背景g.translate(15, 15); /將圖形上下文的原點平移到當前坐標系中的點 (x, y) 繪制墻,四格方塊,下一個方塊,成績,已消除行數,暫停/繼續提示 如果游戲結束標記為true,繪制游戲結束的圖片paintWall(Graphics g); /繪制墻 將長方形區域劃分成20行,10列.遍歷每個方塊對象,若cell不為空g.drawImage(cell.getImage(), x-1, y-1, null); 圖像大小x-1,y-1是圖形看起來順眼.paintTetromino(Graphics g); /繪制四格方塊如果沒有正在下落的方塊就不繪制,否則遍歷四

15、格方塊對象的四個小格子并繪制.paintNextOne(Graphics g); /繪制下一個方塊如果沒有正在下落的方塊,就不繪制,否則遍歷隨機生成的下一個四格方塊的四個小格子并繪制.paintScore(Graphics g); /繪制成績paintLines(Graphics g); /繪制已消除行數paintPause(Graphics g); /繪制暫停/繼續提示以上3個方法均是先設置字體格式,顏色,位置再繪制.程序啟動方法程序啟動方法( (雷凱雷凱) )通過靜態代碼塊將背景圖片,7種方塊圖片和游戲結束圖片加載進來,這會節省很多時間.staticClass cls = Tetris.c

16、lass;background = ImageIO.read(cls.getResource(image);/可以讀取圖片文件到內存中的對象 該靜態代碼塊需捕捉異常(IOException)action(); /啟動軟件調用startAction()開始動作流程.創建鍵盤按鍵監聽對象new KeyAdapter()keyPressed(KeyEvent e);如果有按鍵按下 完成時候(pressed)就會執行VK_Q:quit(); /退出VK_S:startAction(); /重新開始游戲VK_C:continueAction(); /繼續游戲VK_P:pauseAction(); /暫停游戲VK_DOWN:softDropAction(); /下落一格VK_UP:rotateRightAction(); /旋轉VK_SPACE:hardDropAction(); /下落到底部VK_LEFT moveLeftAction(); /左移一格VK_RIGHT: moveRightAction();/右移一格startAction(); /開始動作流程pause = false; gameOver = false;sc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論