JAVA俄羅斯方塊實(shí)驗(yàn)報(bào)告_第1頁
JAVA俄羅斯方塊實(shí)驗(yàn)報(bào)告_第2頁
JAVA俄羅斯方塊實(shí)驗(yàn)報(bào)告_第3頁
JAVA俄羅斯方塊實(shí)驗(yàn)報(bào)告_第4頁
JAVA俄羅斯方塊實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄一需求分析錯(cuò)誤!未定義書簽。二系統(tǒng)運(yùn)行環(huán)境2三系統(tǒng)功能需求描述:2四總體設(shè)計(jì)2五系統(tǒng)結(jié)構(gòu)圖3六程序模塊設(shè)計(jì)3七、實(shí)驗(yàn)總結(jié)體會(huì)15二需求分析在個(gè)人電腦日益普及的今天,一些有趣的桌面游戲已經(jīng)成為人們?cè)谑褂糜?jì)算機(jī)進(jìn)行工作或?qū)W習(xí)之余休閑娛樂的首選,而俄羅斯方塊游戲是人們最熟悉的小游戲之一,它以其趣味性強(qiáng),易上手等諸多特點(diǎn)得到了大眾的認(rèn)可,因此開發(fā)此游戲軟件可滿足人們的一些娛樂的需求。此俄羅斯方塊游戲可以為用戶提供一個(gè)可在普通個(gè)人電腦上運(yùn)行的,界面美觀的,易于控制的俄羅斯方塊游戲。二系統(tǒng)運(yùn)行環(huán)境操作系統(tǒng)選擇WindowsXP版本,運(yùn)行環(huán)境選擇MyEclipse三系統(tǒng)功能需求描述俄羅斯方塊游戲是一款適

2、合大眾的游戲軟件,它適合不同年齡的人玩。本軟件要實(shí)現(xiàn)的功能如下:1. 游戲區(qū):玩家可以在游戲區(qū)中堆積方塊,并能夠在游戲過程中隨時(shí)了解得分情況。2. 游戲控制:玩家可以通過游戲控制功能來選擇開始新的一局游戲,暫?;蛲顺鲇螒颉?. 級(jí)別設(shè)置:玩家可以根據(jù)自己的需要自行設(shè)定游戲的開始級(jí)別,級(jí)別越高,游戲速度越快,難度越大。四總體設(shè)計(jì)游戲中玩家可以做的操作有:1 .以90度為單位旋轉(zhuǎn)方每一格塊。2 .以格子為單位左右移動(dòng)方塊,讓方塊加速落下。3 .方塊移到區(qū)域最下方或是著地到其他方塊上無法移動(dòng)時(shí),就會(huì)固定在該處,而新的隨機(jī)圖形會(huì)出現(xiàn)在區(qū)域上方開始落下。4 .當(dāng)區(qū)域中某一列橫向格子全部由方塊填滿,則該列

3、會(huì)自動(dòng)消除并成為玩家的得分。同時(shí)刪除的列數(shù)越多,得分指數(shù)上升。5 .當(dāng)固定的方塊堆到區(qū)域最上方,則游戲結(jié)束。五.系統(tǒng)結(jié)構(gòu)圖六.程序模塊設(shè)計(jì)6.1用戶界面設(shè)計(jì)開始游戲暫停游戲游戲控制模塊初始級(jí)別設(shè)置退出游戲6.2程序代碼設(shè)計(jì)packagerussia;importjava.awt.*;importjava.awt.event.*;/俄羅斯方塊類classERS_BlockextendsFrame*/privatestaticfinallongserialVersionUID=1L;publicstaticbooleanisPlay=false;publicstaticintlevel=1,sco

4、re=0;publicstaticTextFieldscoreField,levelField;publicstaticMyTimertimer;GameCanvasgameScr;publicstaticvoidmain(String口argus)ERS_Blockers=newERS_Block("俄羅斯方塊游戲V1.0Author:Vincent");WindowListenerwin_listener=newWinListener();ers.addWindowListener(win_listener);/俄羅斯方塊類的構(gòu)造方法SuppressWarnings(&

5、quot;deprecation")ERS_Block(Stringtitle)super(title);setSize(600,480);setLayout(newGridLayout(1,2);gameScr=newGameCanvas();gameScr.addKeyListener(gameScr);timer=newMyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);PanelrightScr=newPanel();rightScr.setLayout(newGr

6、idLayout(2,1,0,30);rightScr.setSize(120,500);add(rightScr);/右邊信息窗體的布局MyPanelinfoScr=newMyPanel();infoScr.setLayout(newGridLayout(4,1,0,5);infoScr.setSize(120,300);rightScr.add(infoScr);/定義標(biāo)簽和初始值Labelscorep=newLabel("分?jǐn)?shù):",Label.LEFT);Labellevelp=newLabel("級(jí)數(shù):",Label.LEFT);scoreFie

7、ld=newTextField(8);levelField=newTextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(newDimension(20,60);scoreField.setSize(newDimension(20,60);levelp.setSize(newDimension(20,6

8、0);levelField.setSize(newDimension(20,60);scoreField.setText("0");levelField.setText("1");/右邊控制按鈕窗體的布局MyPanelcontrolScr=newMyPanel();controlScr.setLayout(newGridLayout(5,1,0,5);rightScr.add(controlScr);/定義按鈕playButtonplay_b=newButton("開始游戲");play_b.setSize(newDimension(

9、50,200);play_b.addActionListener(newCommand(Command.button_play,gameScr);/定義按鈕LevelUPButtonlevel_up_b=newButton("提高級(jí)數(shù)");level_up_b.setSize(newDimension(50,200);level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr);/定義按鈕LevelDownButtonlevel_down_b=newButton("降低級(jí)數(shù)"

10、;);level_down_b.setSize(newDimension(50,200);level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr);/定義按鈕LevelPauseButtonpause_b=newButton("游戲暫停");pause_b.setSize(newDimension(50,200);pause_b.addActionListener(newCommand(Command.button_pause,gameScr);/定義按鈕QuitButtonqui

11、t_b=newButton("退出游戲");quit_b.setSize(newDimension(50,200);quit_b.addActionListener(newCommand(Command.button_quit,gameScr);controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();/

12、重寫MyPanel類,使Panel的四周留空間classMyPanelextendsPanel/*/privatestaticfinallongserialVersionUID=1L;publicInsetsgetInsets()returnnewInsets(30,50,30,50);/游戲畫布類classGameCanvasextendsCanvasimplementsKeyListener/*/privatestaticfinallongserialVersionUID=1L;finalintunitSize=30;/小方塊邊長introwNum;/正方格的行數(shù)intcolumnNum;

13、/正方格的列數(shù)intmaxAllowRowNum;/允許有多少行未削intblockInitRow;/新出現(xiàn)塊的起始行坐標(biāo)intblockInitCol;/新出現(xiàn)塊的起始列坐標(biāo)intscrArr;/屏幕數(shù)組Blockb;/對(duì)方快的引用/畫布類的構(gòu)造方法GameCanvas()rowNum=15;columnNum=10;maxAllowRowNum=rowNum-2;b=newBlock(this);blockInitRow=rowNum-1;blockInitCol=columnNum/2-2;scrArr=newint3232;/初始化屏幕,并將屏幕數(shù)組清零的方法voidinitScr()

14、for(inti=0;i<rowNum;i+)for(intj=0;j<columnNum;j+)scrArrij=0;b.reset();repaint();/重新刷新畫布方法publicvoidpaint(Graphicsg)for(inti=0;i<rowNum;i+)for(intj=0;j<columnNum;j+)drawUnit(i,j,scrArrij);/畫方塊的方法publicvoiddrawUnit(introw,intcol,inttype)scrArrrowcol=type;Graphicsg=getGraphics();以背景為顏色畫畫正在下

15、落的方塊畫已經(jīng)落下的方法switch(type)/表示畫方快的方法case0:g.setColor(Color.black);break;/case 1: g.setColor(Color.blue);break;/case 2: g.setColor(Color.magenta);break;/g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);g.dispose();publicBlockgetBlock()returnb;/返回block實(shí)例的引用/返回屏幕數(shù)組中(row,

16、col)位置的屬性值publicintgetScrArrXY(introw,intcol)if(row<0|row>=rowNum|col<0|col>=columnNum)return(-1);elsereturn(scrArrrowcol);/返回新塊的初始行坐標(biāo)方法publicintgetInitRow()return(blockInitRow);/返回新塊的初始行坐標(biāo)/返回新塊的初始列坐標(biāo)方法publicintgetInitCol()return(blockInitCol);/返回新塊的初始列坐標(biāo)/滿行刪除方法voiddeleteFullLine()intful

17、l_line_num=0;intk=0;for(inti=0;i<rowNum;i+)booleanisfull=true;L1:for(intj=0;j<columnNum;j+)if(scrArrij=0)k+;isfull=false;breakL1;if(isfull)full_line_num+;if(k!=0&&k-1!=i&&!isfull)for(intj=0;j<columnNum;j+)if(scrArrij=0)drawUnit(k-1,j,0);elsedrawUnit(k-1,j,2);scrArrk-1j=scrAr

18、rij;for(inti=k-1;i<rowNum;i+)for(intj=0;j<columnNum;j+)drawUnit(i,j,0);scrArrij=0;ERS_Block.score+=full_line_num;ERS_Block.scoreField.setText(""+ERS_Block.score);/判斷游戲是否結(jié)束方法booleanisGameEnd()for(intcol=0;col<columnNum;col+)if(scrArrmaxAllowRowNumcol!=0)returntrue;returnfalse;publi

19、cvoidkeyTyped(KeyEvente)publicvoidkeyReleased(KeyEvente)/處理鍵盤輸入的方法publicvoidkeyPressed(KeyEvente)if(!ERS_Block.isPlay)return;switch(e.getKeyCode()caseKeyEvent.VK_DOWN:b.fallDown();break;caseKeyEvent.VK_LEFT:b.leftMove();break;caseKeyEvent.VK_RIGHT:b.rightMove();break;caseKeyEvent.VK_SPACE:b.leftTurn

20、();break;/處理控制類classCommandimplementsActionListenerstaticfinalintbutton_play=1;/給按鈕分配編號(hào)staticfinalintbutton_levelup=2;staticfinalintbutton_leveldown=3;staticfinalintbutton_quit=4;staticfinalintbutton_pause=5;staticbooleanpause_resume=true;intcurButton;/當(dāng)前按鈕GameCanvasscr;/控制按鈕類的構(gòu)造方法Command(intbutton,

21、GameCanvasscr)curButton=button;this.scr=scr;/按鈕執(zhí)行方法SuppressWarnings("deprecation")publicvoidactionPerformed(ActionEvente)switch(curButton)casebutton_play:if(!ERS_Block.isPlay)scr.initScr();ERS_Block.isPlay=true;ERS_Block.score=0;ERS_Block.scoreField.setText("0");ERS_Block.timer.r

22、esume();scr.requestFocus();break;casebutton_levelup:if(ERS_Block.level<10)ERS_Block.level+;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score=0;ERS_Block.scoreField.setText(""+ERS_Block.score);scr.requestFocus();break;casebutton_leveldown:if(ERS_Block.level>1)

23、ERS_Block.level-;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score=0;ERS_Block.scoreField.setText(""+ERS_Block.score);scr.requestFocus();break;casebutton_pause:if(pause_resume)ERS_Block.timer.suspend();pause_resume=false;elseERS_Block.timer.resume();pause_resume=tr

24、ue;scr.requestFocus();break;casebutton_quit:System.exit(0);/方塊類classBlockstaticintpattern=0x0f00,0x4444,0x0f00,0x4444,/用十六進(jìn)至表示,本行表示長條四種狀態(tài)0x04e0,0x0464,0x00e4,0x04c4,;int blockType; / int turnState; / int blockState; /int row,col; /0x4620,0x6c00,0x4620,0x6c00,0x2640,0xc600,0x2640,0xc600,0x6220,0x1700

25、,0x2230,0x0740,0x6440,0x0e20,0x44c0,0x8e00,0x0660,0x0660,0x0660,0x0660塊的模式號(hào)(0-6)塊的翻轉(zhuǎn)狀態(tài)(0-3)快的下落狀態(tài)塊在畫布上的坐標(biāo)GameCanvasscr;/塊類的構(gòu)造方法Block(GameCanvasscr)this.scr=scr;blockType=(int)(Math.random()*1000)%7;turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getInitRow();col=scr.getInitCol();/重新初始化塊,并

26、顯示新塊publicvoidreset()blockType=(int)(Math.random()*1000)%7;turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getInitRow();col=scr.getInitCol();dispBlock(1);/實(shí)現(xiàn)“塊”翻轉(zhuǎn)的方法publicvoidleftTurn()if(assertValid(blockType,(turnState+1)%4,row,col)dispBlock(0);turnState=(turnState+1)%4;dispBlock(1);/實(shí)現(xiàn)

27、“塊”的左移的方法publicvoidleftMove()if(assertValid(blockType,turnState,row,col-1)dispBlock(0);col-;dispBlock(1);/實(shí)現(xiàn)塊的右移publicvoidrightMove()if(assertValid(blockType,turnState,row,col+1)dispBlock(0);col+;dispBlock(1);/實(shí)現(xiàn)塊落下的操作的方法publicbooleanfallDown()if(blockState=2)return(false);if(assertValid(blockType,turnState,row-1,col)dispBlock(0);row-;dispBlock(1);return(true);elseblockState=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論