版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
俄羅斯方塊組員:沈唯唯,李有寧,田園田亮,尹亮2021/5/91界面展示程序運(yùn)行成功后,進(jìn)入游戲界面。如左圖所示。2021/5/92游戲暫停按下鍵盤按鍵“P”(pause)游戲進(jìn)入停止?fàn)顟B(tài),等待用戶按下“C”(Continue)鍵繼續(xù)游戲。2021/5/93退出游戲按下鍵盤按鍵“Q”(Quit)彈出系統(tǒng)提示框,選擇是否要退出游戲。2021/5/94游戲結(jié)束當(dāng)方框到達(dá)頂端時(shí)(Wall[0][4]!=null),判定游戲結(jié)束。按下“S”可重新初始化界面開始游戲2021/5/95具體實(shí)現(xiàn) Cell(格子類) Tetromino(四格方塊類) 7個(gè)子類(T,I,O,S,Z,J,L)
一個(gè)內(nèi)部類(State):
存放四個(gè)方塊旋轉(zhuǎn)時(shí)的坐標(biāo)狀態(tài)。 Tetris(俄羅斯方塊類)extendsJpanel
邏輯處理及方法的具體實(shí)現(xiàn)2021/5/96Cell屬性:row,col,Image方法:drop();//向下降落一個(gè)單位leftMove();//向左移動(dòng)一個(gè)單位rightMove();//向右移動(dòng)一個(gè)單位2021/5/97TetrominoCell[]cells=newCell[4];State[]states;//旋轉(zhuǎn)狀態(tài)Index;//旋轉(zhuǎn)下標(biāo)ProtectedclassState{};//旋轉(zhuǎn)狀態(tài)類(內(nèi)部類)7個(gè)子類7種方塊rotateRight();//向右旋轉(zhuǎn)rotateLeft();//向左旋轉(zhuǎn)softDrop();//下落moveLeft();//左移moveRight();//右移RandomOne();//隨機(jī)生成一個(gè)四格方塊2021/5/98Tetrispaint(Graphicsg);//重寫繪圖方法paintWall(Graphicsg);//繪制墻action();//通過調(diào)用該方法
啟動(dòng)軟件Quit();//退出pauseAction();//暫停continueAction();//繼續(xù)paintTetromino(Graphicsg);//繪制四格方塊paintNextOne(Graphicsg);//繪制下一個(gè)方塊paintScore(Graphicsg);//繪制成績(jī)paintLines(Graphicsg);//繪制已消除行數(shù)paintPause(Graphicsg);//繪制暫/繼續(xù)停提示2021/5/99softDropAction();//下落控制方法canDrop();//判斷是否能夠繼續(xù)下落landToWall();//著陸到墻destroyLines();//銷毀的行數(shù)fullCells(introw);//判斷一行是否滿了deleteLine(introw);//刪除一行checkGameOver();//檢查游戲結(jié)束狀態(tài)moveLeftAction();//判斷左移是否出界moveRightAction();//判斷右移是否出界rotateRightAction();//判斷旋轉(zhuǎn)是否出界outOfBounds();//檢查是否出界coincide();//判斷是否重合hardDropAction();//瞬間下降startAction();//開始動(dòng)作流程2021/5/910簡(jiǎn)單工廠模式實(shí)例化四格方塊T,I,O,S,Z,J,L(田亮)將7個(gè)子類封裝到類Tetromino,在構(gòu)造方法里初始化四格方塊的初始位置(row,col)和相對(duì)位置.初始位置:cell[0]=(0,4);cell[1]=(0,3);cell[2]=(0,5);cell[3]=(1,3);以“L”型四格方塊為例:2021/5/911以編號(hào)為“0”的格子為旋轉(zhuǎn)軸,計(jì)算其他格子的相對(duì)坐標(biāo):states[0]=(0,0,0,-1,0,1,1,-1);states[1]=(0,0,-1,0,1,0,-1,-1);states[2]=(0,0,0,1,0,-1,-1,1);states[3]=(0,0,1,0,-1,0,1,1);states[0]states[1]states[2]states[3]2021/5/912旋轉(zhuǎn),左移,右移(沈唯唯)privateintIndex=10000;表示旋轉(zhuǎn)狀態(tài)下標(biāo).設(shè)置為10000防止旋轉(zhuǎn)次數(shù)過多而使游戲無法正常進(jìn)行.在Tetromino類中添加內(nèi)部類State屬性:row0,col0,row1,col1,row2,col2,row3,col3以上8個(gè)屬性表示4個(gè)方塊的相對(duì)坐標(biāo).構(gòu)造方法:publicState(introw0…){…}2021/5/913旋轉(zhuǎn) rotateRight();下標(biāo)Index自增 rotateLeft();下標(biāo)Index自減 States=states[index%states.length];當(dāng)前狀態(tài)s為四格方塊旋轉(zhuǎn)[index%states.length]次的狀態(tài).
以cells[0]為旋轉(zhuǎn)軸,根據(jù)初始化的相對(duì)坐標(biāo) cells[1].setRow(cells[0].getRow()+s.row1); cells[1].setCol(cells[0].getCol()+s.col1); cells[2].setRow(cells[0].getRow()+s.row2); cells[2].setCol(cells[0].getCol()+s.col2); cells[3].setRow(cells[0].getRow()+s.row3); cells[3].setCol(cells[0].getCol()+s.col3);2021/5/914左移、右移moveLeftAction();//左移
先調(diào)用tetromino.moveLeft();
如果出界,或者重合再調(diào)用tetromino.moveRight();
在moveLeft方法中遍歷當(dāng)前對(duì)象cells中所有cell對(duì)象
循環(huán)調(diào)用cell.leftMove();moveRightAction();//右移的原理同上2021/5/915下落(李有寧)softDropAction();//一步一步下落
if(canDrop())為true(檢查當(dāng)前方塊是否能夠繼續(xù)下落),則調(diào)用tetromino.softDrop();在softDrop()中遍歷cells對(duì)象調(diào)用cell.drop();hardDropAction();//瞬間下降
while(canDrop())為true(檢查當(dāng)前方塊是否能夠繼續(xù)下落),則調(diào)用tetromino.softDrop();在softDrop()中遍歷cells對(duì)象調(diào)用cell.drop();
否則調(diào)用方法: landToWall();//著陸到墻 destroyLines();//銷毀行數(shù) checkGameOver();//檢查游戲是否結(jié)束2021/5/916landToWall();//著陸到墻 Cell[]cells=tetromino.cells;
遍歷當(dāng)前四格方塊對(duì)象將每一個(gè)格子對(duì)象賦值給墻 wall[cell.getRow][cell.getCol]=celldestroyLines();//銷毀行數(shù)
遍歷每行的格子,如果fullCells(row)(遍歷當(dāng)前行的各自是否是滿的)為true,調(diào)用deleteLine(row)消除這行;lines++;
最后加成績(jī)this.score+=scoreTable[lines]; scoreTable[]為得分表2021/5/917判斷方法,暫停、繼續(xù)、退出(田園)checkGameOver();//檢查游戲是否結(jié)束
如果wall[0][4]!=null成立,調(diào)用timer.cancle()關(guān)閉計(jì)時(shí)器,游戲結(jié)束.outOfBounds();//出界檢查方法 Cell[]cells=tetromino.cells;
遍歷當(dāng)前四格方塊對(duì)象的每個(gè)格子
如果(cell.getCol<0||cell.getCol>=COLS||cell.getRow<0||cell.getRow>=ROWS)成立(方塊是否出了長(zhǎng)方形界面),返回true;2021/5/918coincide()//判斷重合方法 Cell[]cells=tetromino.cells;
遍歷當(dāng)前四格方塊對(duì)象的每個(gè)格子
如果(cell.getCol>=0&&cell.getCol<COLS&&cell.getRow>=0&&cell.getRow<ROWS&&wall[cell.getRow][cell.getCol]!=null)成立(在長(zhǎng)方形界面內(nèi)部檢查是否撞到其他方塊),返回true.pauseAction();//暫停游戲 timer.cancel();//終止該計(jì)時(shí)器 pause=true;//將暫停標(biāo)記設(shè)置為true2021/5/919continueAction();//繼續(xù)游戲 pause=false;//設(shè)置暫停標(biāo)記為false timer=newTimer();//創(chuàng)建一個(gè)新的計(jì)時(shí)器對(duì)象 timer.schedule(newTimerTask(){ publicvoidrun(){ softDropAction(); repaint(); } },inteval,inteval); schedule(TimerTask
task,long
delay,long
period)
安排指定的任務(wù)從指定的延遲后開始進(jìn)行重復(fù)的固定延遲執(zhí)行 Inteval為間隔時(shí)間800ms;2021/5/920繪圖方法(尹亮)paint(Graphicsg);//重寫繪圖方法 g.drawImage(background,0,0,null);//畫背景 g.translate(15,15);//將圖形上下文的原點(diǎn)平移到當(dāng)前坐標(biāo)系中的點(diǎn)(x,
y)
繪制墻,四格方塊,下一個(gè)方塊,成績(jī),已消除行數(shù),暫停/繼續(xù)提示
如果游戲結(jié)束標(biāo)記為true,繪制游戲結(jié)束的圖片paintWall(Graphicsg);//繪制墻
將長(zhǎng)方形區(qū)域劃分成20行,10列.遍歷每個(gè)方塊對(duì)象,若cell不為空g.drawImage(cell.getImage(),x-1,y-1,null);
圖像大小x-1,y-1是圖形看起來順眼.2021/5/921paintTetromino(Graphicsg);//繪制四格方塊
如果沒有正在下落的方塊就不繪制,否則遍歷四格方塊對(duì)象的四個(gè)小格子并繪制.paintNextOne(Graphicsg);//繪制下一個(gè)方塊
如果沒有正在下落的方塊,就不繪制,否則遍歷隨機(jī)生成的下一個(gè)四格方塊的四個(gè)小格子并繪制.paintScore(Graphicsg);//繪制成績(jī)paintLines(Graphicsg);//繪制已消除行數(shù)paintPause(Graphicsg);//繪制暫停/繼續(xù)提示
以上3個(gè)方法均是先設(shè)置字體格式,顏色,位置再繪制.2021/5/922程序啟動(dòng)方法(雷凱)通過靜態(tài)代碼塊將背景圖片,7種方塊圖片和游戲結(jié)束圖片加載進(jìn)來,這會(huì)節(jié)省很多時(shí)間. static{ Classcls=Tetris.class; background= ImageIO.read(cls.getResource(image)); //可以讀取圖片文件到內(nèi)存中的對(duì)象 …… }
該靜態(tài)代碼塊需捕捉異常(IOException)2021/5/923action();//啟動(dòng)軟件
調(diào)用startAction()開始動(dòng)作流程.
創(chuàng)建鍵盤按鍵監(jiān)聽對(duì)象newKeyAdapter(){ keyPressed(KeyEvente);
};
如果有按鍵按下完成時(shí)候(pressed)就會(huì)執(zhí)行 VK_Q:quit();//退出 VK_S:startAction();//重新開始游戲 VK_C:contin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鋰輝石合作協(xié)議書
- 2025年氣體檢測(cè)設(shè)備合作協(xié)議書
- 2025年印刷品、記錄媒介復(fù)制品合作協(xié)議書
- 2025年買賣個(gè)人房屋合同(4篇)
- 2025年臨時(shí)工聘用合同協(xié)議標(biāo)準(zhǔn)版本(三篇)
- 山西省2024七年級(jí)道德與法治上冊(cè)第二單元成長(zhǎng)的時(shí)空第七課在集體中成長(zhǎng)情境基礎(chǔ)小練新人教版
- 2025年臨時(shí)工解除合同樣本(2篇)
- 2025年人防門制作安裝工程施工合同模板(2篇)
- 2025年個(gè)人無息借款合同經(jīng)典版(2篇)
- 2025年二人合作經(jīng)營協(xié)議參考模板(三篇)
- 2025代運(yùn)營合同范本
- 武漢2025年湖北武漢理工大學(xué)管理人員招聘筆試歷年參考題庫附帶答案詳解
- 第十一章《功和機(jī)械能》達(dá)標(biāo)測(cè)試卷(含答案)2024-2025學(xué)年度人教版物理八年級(jí)下冊(cè)
- 2025年銷售部年度工作計(jì)劃
- 2024年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試歷年參考題庫含答案解析
- ESG表現(xiàn)對(duì)企業(yè)財(cái)務(wù)績(jī)效的影響研究
- DB3713T 340-2024 實(shí)景三維數(shù)據(jù)接口及服務(wù)發(fā)布技術(shù)規(guī)范
- 八年級(jí)生物開學(xué)摸底考(長(zhǎng)沙專用)(考試版)
- (工作規(guī)范)公路預(yù)防性養(yǎng)護(hù)工作手冊(cè)
- 車間空調(diào)崗位送風(fēng)方案
評(píng)論
0/150
提交評(píng)論