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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

6、= (0,5);cell3 = (1,3);以以“L L”型四格方塊為例:型四格方塊為例:以編號為“0”的格子為旋轉(zhuǎn)軸,計算其他格子的相對坐標(biāo):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旋轉(zhuǎn),左移,右移(沈唯唯)旋轉(zhuǎn),左移,右移(沈唯唯)private int Index = 10000; 表示旋轉(zhuǎn)狀態(tài)下標(biāo).設(shè)置為10000防止旋轉(zhuǎn)次數(shù)過

7、多而使游戲無法正常進行.在Tetromino類中添加內(nèi)部類State屬性:row0,col0,row1,col1,row2,col2,row3,col3 以上8個屬性表示4個方塊的相對坐標(biāo).構(gòu)造方法:public State(int row0)旋轉(zhuǎn)rotateRight(); 下標(biāo)Index自增rotateLeft(); 下標(biāo)Index自減State s = statesindex%states.length; 當(dāng)前狀態(tài)s為四格方塊旋轉(zhuǎn)index%states.length次的狀態(tài).以cells0為旋轉(zhuǎn)軸,根據(jù)初始化的相對坐標(biāo)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(); /左移先調(diào)用tetromino.moveLeft();如果出界,或者重合再調(diào)用tetromino.moveRight();在mov

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

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

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

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

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

14、null); /畫背景g.translate(15, 15); /將圖形上下文的原點平移到當(dāng)前坐標(biāo)系中的點 (x, y) 繪制墻,四格方塊,下一個方塊,成績,已消除行數(shù),暫停/繼續(xù)提示 如果游戲結(jié)束標(biāo)記為true,繪制游戲結(jié)束的圖片paintWall(Graphics g); /繪制墻 將長方形區(qū)域劃分成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); /繪制已消除行數(shù)paintPause(Graphics g); /繪制暫停/繼續(xù)提示以上3個方法均是先設(shè)置字體格式,顏色,位置再繪制.程序啟動方法程序啟動方法( (雷凱雷凱) )通過靜態(tài)代碼塊將背景圖片,7種方塊圖片和游戲結(jié)束圖片加載進來,這會節(jié)省很多時間.staticClass cls = Tetris.c

16、lass;background = ImageIO.read(cls.getResource(image);/可以讀取圖片文件到內(nèi)存中的對象 該靜態(tài)代碼塊需捕捉異常(IOException)action(); /啟動軟件調(diào)用startAction()開始動作流程.創(chuàng)建鍵盤按鍵監(jiān)聽對象new KeyAdapter()keyPressed(KeyEvent e);如果有按鍵按下 完成時候(pressed)就會執(zhí)行VK_Q:quit(); /退出VK_S:startAction(); /重新開始游戲VK_C:continueAction(); /繼續(xù)游戲VK_P:pauseAction(); /暫停游戲VK_DOWN:softDropAction(); /下落一格VK_UP:rotateRightAction(); /旋轉(zhuǎn)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論