俄羅斯方塊實驗報告_第1頁
俄羅斯方塊實驗報告_第2頁
俄羅斯方塊實驗報告_第3頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

河南城建學院《JAVA基礎》課程設計設計說明書課程名稱:《JAVA基礎》課程設計設計題目:俄羅斯方塊指導教師:班級:學號:學生姓名:同組人員:計算機科學與工程學院2014年1月9日目錄目錄TOC\o"1-5"\h\z\o"CurrentDocument"第1章選題 2..\o"CurrentDocument"1.1題目背景 2..\o"CurrentDocument"1.2系統實現的具體分工 2.選題 2...團隊分工 3..\o"CurrentDocument"1.3開發環境 3..\o"CurrentDocument"第2章設計內容 .3...\o"CurrentDocument"2.1實現功能 3..2.2概要設計 4..\o"CurrentDocument"2.3界面設計 6..第3章系統實現 .6...\o"CurrentDocument"3.1涉及知識點 6..3.2系統運行 6..3.3源程序清單 .1Q\o"CurrentDocument"第4章測試與實驗結果 21.\o"CurrentDocument"第5章結束語 21.\o"CurrentDocument"參考文獻 22.第1章選題1.1題目背景在現代,高科技的飛躍發展,人們工作習慣的改變,特別是電腦的大量普及人們生活節奏越來越快,一些有趣的桌面游戲已經成為人們在使用計算機進行工作或學習之余休閑娛樂的首選,而俄羅斯方塊游戲是人們最熟悉的小游戲之一。俄羅斯方塊( Tetris,俄文:Tempuc)是一款風靡全球的電視游戲機和掌上游戲機游戲,它由俄羅斯人阿列克謝?帕基特諾夫發明,故得此名。俄羅斯方塊的基本規則是移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風靡世界。為此,我們設計了一款簡單的俄羅斯方塊JAVA游戲程序,以便更好的滿足廣大電腦工作者閑暇之余的消遣并且也讓我們學到編程技術與團隊意識。1.2系統實現的具體分工選題運行程序開始游戲(俄羅斯方塊)之旅!進入程序界面,你會看到游戲區和游戲控制區(為了營造設計效果和視覺效果以兩個區的顏色不同作為區別) 。點擊開始游戲,28種狀態的方塊隨機產生,自由下落,落下時可由玩家用上、下、左、右控制鍵控制翻轉和移動,以便以玩家所需要的形態和位置落下。如果落下時,方塊的方格能填滿某一行,則這一行可消去。消去一行后,游戲可給玩家加分,若由存在空格的方塊填滿整個窗口, 則游戲失敗。(下落過程方塊和已落下的方塊顏色也不同,同樣也是為了營造設計及視覺效果)下落, 每消除一行將會增加一分,這個游戲也可以提高級數來提高難度,級數越高方塊下落的速度就越快,這個游戲也有暫停功能,可以使游戲者因有事而中斷一下,不影響游戲的繼續進行。游戲功能需求如下:游戲界面需求:設計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性, 游戲的背景色是灰色,方塊用藍色顏色,在一定的區域內運動和變形,落下后的障礙物用水紅色顯示,這樣看起來會有一定的美感。游戲形狀需求:用數組作為存儲方塊 28種狀態的數據結構,即長條形、 Z字形、反Z形、田字形、7字形、反7形、T字型,各個方塊要能實現它的變形,可設為順時針或逆時針變形,一般為逆時針。團隊分工表1.1項目分工一覽表角色姓名承擔的具體任務組長游戲區操作的實現,顯示操作結果以及部分游戲算法的編寫組員游戲結束的結果,方塊構造與變形,以及部分算法的編寫。組員游戲界面設計,游戲控制按鈕功能實現,文檔編寫等。1.3開發環境編程工具:JDK+ECLIPSE(+MySQL計算機:PC操作系統:MicrosoftWindows7.0第2章設計內容2.1實現功能(1) 顯示游戲的方塊形狀游戲玩家打開游戲界面,點擊開始游戲,便會在游戲整個界面的左面依次顯示不同形狀的方塊。(2) 分數顯示根據游戲玩家在游戲當中的操作顯示增加對應分數。(3) 級數顯示根據游戲玩家所選擇的不同等級顯示不同的等級數,級數越高,俄羅斯方塊下落的速度越快,反之則越慢。(4) 開始游戲功能鍵游戲玩家進入游戲界面之后點擊該功能鍵就能開始俄羅斯方塊游戲。(5) 提高級數功能鍵該功能鍵實現俄羅斯方塊游戲的級數的增加,點擊此功能鍵的同時級數顯示功能模塊的數字發生相應的變大,在游戲顯示區顯示的效果為方塊下落的速度加快,使游戲的難度增加。(6) 降低級數功能鍵該功能鍵實現俄羅斯方塊游戲的級數的降低,點擊此功能鍵的同時級數功能模塊顯示的數字發生相應的減小,在游戲顯示區顯示的效果為方塊下落的速度減慢,使游戲的難度降低。

暫停游戲功能鍵在游戲玩家進行游戲的過程中,只要在任何時候單擊該功能鍵就能實現俄羅斯方塊游戲的暫停。退出游戲功能鍵游戲玩家在游戲的過程中,可以在任何時刻點擊該功能鍵按鈕,就可以實現該游戲的退出。2.2概要設計(涉及類的框圖)匚omniandoIxHcnph屯丨?bLttcnI匡welijp:irt0bUtonbvddsv戸iiintQbittenWint0biJHon°-口£程:intQ口~35曾i^ss曾ibo討啟古仃ocurBitteniintQ$匚rf? awvij鬥dinbutton!irtjnstrsGaiyitCain^s)On匚tiortFerfaninetfine;Actit?n£vent);void

GjiiieC^nv^CouritSia;irrt□rouJ'lurn!ivAo^oJumctkiin;irkoiimxAIId'aRo^lun:iriOblocHnitRovtiniqblotklritCdiiri0scrftr:訊qbiBlock0 GameCarwa就)■./initSci(J:mid0pjint(inqiGraphic^;vdd0drawU-iil(inrem:Irijntnl:inbint滬e:int):vmdQ^stBlod<):Bieck■號e占crAri址T(inix?w:lnlrlncd!int)!int0暫我DltEowO;irtQ^etlntCol(J:niQdeleteFiilLineOivoid呂i5GameEnc|):booleaH.kyT弁疏inciK*yEv?nt)ivoid色懈電應顯貞inmibe^veri)!voidQMyPrv計*efin?:K?y£vint);void匚Kane1%二匸gstlr-isst5O*fTrnset5? MtTinierQscri4?rritQnY4$0峠噸口wKeaaM^Timfir'inscr: i)■■-1ini'Jivoid? WinListener'■wndowdcEingjInI:Windc^Ewnl):\>cid

2.3界面設計是是3.1涉及知識點AWT多媒體編程,Swing圖形界面開發,Java基礎算法,GUI編程算法,java異常處理,類與繼承和多態等。3.2系統運行(主要運行界面抓圖)

提示消息框(操作指南)初始界面圖:圉磐廝方決游我V1.0AuthorVincent 〔=I回分皴;退出游戲

提高級數圖:退出游戲功能圖

運行游戲圖:結束游戲圖:packageimportimportimportpublicclassERSBlockextends Frame{publicstaticboolean isPlay=false;publicstaticintpackageimportimportimportpublicclassERSBlockextends Frame{publicstaticboolean isPlay=false;publicstaticintlevel=1,score=0;publicstaticTextField scoreField ,levelField ;//文本框publicstaticMyTimer timer;//timer 具有延緩時間的作用GameCanvasgameScrJpublicstaticvoidmain(String[]argus){ERS_Blockers:二newERS_Block("俄羅斯方塊游戲V1.0Author:Vineent"WindowListenerwinlistener=//俄羅斯方塊類);ers.addWindowListener(win」istener);JOptionPane."\n1:newWinListener();//窗口監聽器(ers,"操作指南:"+"\n2:left"\n3:"\n4:"\n5:"\n6:showMessageDialog方向鍵控制俄羅斯方塊移動的方向為向左移動,right 為向右移動,down為加速向下,up為翻轉變化."+'開始游戲’游戲開始."+游戲暫停’暫停游戲,再次單擊該鍵則繼續游戲 ."+提高等級或降低等級’可以設置難度等級."+退岀游戲’則游戲結束.");單擊單擊單擊單擊3.3源程序清單(關鍵代碼)javax.swing.*;//俄羅斯方塊類的構造方法ERS_Block(Stringtitle){super(title); //super 關鍵詞是用來引用當前對象的父類setSize(619,490);setLayout( newGridLayout(1,2)); //設置面板的布局gameScr=newGameCanvas();gameScr.addKeyListener( gameScr); //鍵盤監聽器timer=newMyTimer(gameScr);//timer 具有延緩時間的作用timer.setDaemon(true);//定時器timer.start();timer.suspend();//掛起疋種主動兀成的仃為add(gameScr); //調用當前類PanelrightScr=newPanel();//面板對象rightScr.setLayout(rightScr.setSize(120,500);add(rightScr);rightScr.setBackground(Color.newGridLayout(2,1,0,1));pink);//行列水平間距行間距//右邊信息窗體的布局MyPanelinfoScr=infoScr.setLayout(infoScr.setSize(120,300);rightScr.add(infoScr);newMyPanel();//infoScr添加newGridLayout(4,1,0,5));//調用infoScr 面板到rightScr//定義標簽和初始值Labelscorep=newLabel("分數:",Label. LEFT);//lable 是用來顯示組件(分數,級數)的;left左對齊Labellevelp=newLabel("級數:"^Label. LEFT);scoreField=newTextField(8);//數字代表文本框的字符長度levelField=newTextField(8);scoreField.setEditable( false);//文本框內容不可編輯levelField.setEditable( false);infoScr.add(scorep);infoScr.add(scoreField );infoScr.add(levelp);infoScr.add(levelField );scoreField.setText( "0");levelField.setText( "1");//右邊控制按鈕窗體的布局newMyPanel();newGridLayout(5,1,0,5));newMyPanel();newGridLayout(5,1,0,5));controlScr.setLayout(rightScr.add(controlScr);newButton( "開始游戲")newButton( "開始游戲");Buttonplay_b=play_b.setSize(newDimension(50,200));//dimension對單個對象的組件的寬度、play_b.setSize(newDimension(50,200));//dimension對單個對象的組件的寬度、高度封裝在一個類中play_b.addActionListener(newCommand(Command. button_play ,gameScr));高度封裝在一個類中play_b.addActionListener(newCommand(Command. button_play ,gameScr));//定義按鈕LevelUP//定義按鈕LevelUPButtonlevel_up_b=level_up_b.setSize(level_up_b.addActionListener(newButton( "提高級數");newDimension(50,200));newCommand(Command.button_levelup ,gameScr));//定義按鈕//定義按鈕LevelDownButtonlevel_down_b=

level_down_b.setSize(newButton("降低級數");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));//定義按鈕QuitButtonquit_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();}}//重寫MyPanel類,使Panel的四周留空間classMyPanelextends Panel{//Insets 對象用作所添加組件的外部填塞//Insets 對象用作所添加組件的外部填塞//lefttoprightbottomreturnnewInsets(30,50,30,50);}}//第一塊//游戲畫布類classGameCanvasextends Canvas implements KeyListener{finalintunitSize =30;//小方塊邊長introwNum;//正方格的行數intcolumnNum;//正方格的列數intmaxAllowRowNum;//允許有多少行未消intblockInitRow ;//新岀現塊的起始行坐標intblockInitCol ;//新岀現塊的起始列坐標int[][] scrArr;//屏幕數組Block b; //對方塊的引用//畫布類的構造方法GameCanvas(){rowNum=15;columnNum=10;rowNum-rowNum-2;b=newBlock(this);blockInitRow=rowNum-1;blockInitCol =columnNum/2-2;scrArr=newint[32][32];}//初始化屏幕,并將屏幕數組清零的方法voidinitScr(){ //initScr 開始for(inti=0;i<rowNum;i++)for(intj=0;j<columnNum;j++)scrArr[i][j]=0;b.reset(); //重置repaint();}//重新刷新畫布方法publicvoid paint(Graphicsg){//畫布填充的方塊for(inti=0;i<for(intj=0;j<drawUnit(i,j,}rowNum;i++)columnNum;j++)scrArr[i][j]);//畫方塊的方法publicvoiddrawUnit(introw,intcol,inttype){scrArr[row][col]=type;Graphicsg=getGraphics();

switch(type){//獲得Graphicscase0:g.setColor(Color.lightGray);break;: //背景顏色case1:g.setColor(Color.blue);break;//正在下落的方塊 的顏色case2:g.setColor(Color.magenta);break;//已經落下的方塊的顏色對象來繪制后備屏幕緩沖//表示畫方塊的方法g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);}publicBlockgetBlock(){//返回//返回block實例的引用}//返回屏幕數組中(row,col)位置的屬性值publicintgetScrArrXY(introw,intcol){publicintgetScrArrXY(introw,intcol){rowNum||col<0||col>=columnNum) //控rowNum||col<0||col>=columnNum) //控制在所設置面板上return(-1);//返回新塊的初始行坐標////返回新塊的初始行坐標//返回新塊的初始列坐標score);elsereturn(scrArr[row][col]);}//返回新塊的初始行坐標方法publicintgetInitRow(){return (blockInitRow );}//返回新塊的初始列坐標方法publicintgetInitCol(){return (blockInitCol );}//滿行刪除方法voiddeleteFullLine(){int full」ine_num=0;intk=0; //此for循環是為了判斷kfor(inti=0;i<rowNum;i++){boolean isfull= true;for(intj=O;j<columnNum;j++)if(scrArr[i][j]==0){k++;isfull= false;break;}if(isfull)full_line_num++;if(k!=0&&k-1!=i&&!isfull)for(intj=0;j< columnNum;j++){if(scrArr[i][j]==0)drawUnit(k-1,j,0);elsedrawUnit(k-1,j,2);scrArr[k-1][j]= scrArr[i][j];}}for(inti=k-1;i< rowNum;i++){for(intj=0;j< columnNum;j++){drawUnit(i,j,0);scrArr[i][j]=0;}}ERS_Block. score +=full_line_num;ERS_Block. scoreField.setText(""+ERS_Block.//判斷游戲是否結束方法boolean isGameEnd(){for(intcol=0;col< columnNum;col++){if(scrArr[maxAllowRowNum][col]!=0)returntruereturnfalsepublic voidkeyTyped(KeyEvente){} //實現KeyListenerde 方法public voidkeyReleased(KeyEvente){}//處理鍵盤輸入的方法publicvoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_DOWNb.fallDown();break;caseKeyEvent.VK_LEFT:b.leftMove();break;caseKeyEvent.VK_RIGHT:b.rightMove();breakcaseKeyEvent.VK_UP:b.leftTurn();break;}}}//處理控制類class Commandimplements ActionListener{staticfinalintbutton_play =1;//給按鈕分配編號staticfinalintbutton_levelup =2;staticfinalintbutton_leveldown =〔3;staticfinalintbutton_quit =4;staticfinalintbutton_pause =5;staticbooleanpause_resume =true;//resum 繼續intcurButtonJ//當前按鈕GameCanvas scr//控制按鈕類的構造方法Command(intbutton,GameCanvasscr){Command(curButton =button;this.scr=scr;//按鈕執行方法publicvoidactionPerformed(ActionEvente){switch(curButton){casebutton_playscr.initScr();ERSBlock.:if(!ERS_Block.isPlaytrueERSBlock.ERSBlock.ERSBlock.score=0;switch(curButton){casebutton_playscr.initScr();ERSBlock.:if(!ERS_Block.isPlaytrueERSBlock.ERSBlock.ERSBlock.score=0;scoreField.setText(timer.resume。;isPlay){"0");scr.requestFocus();break;casebutton_levelup :if(ERS_Block.level<10){ERS__Block.level++;ERS__Block.levelField.setText(""+ERS._Block.ERS__Block.score=0;ERS__Block.scoreField.setText(""+ERS._Block.level);score);}scr.requestFocus();breakcasebutton_leveldown:if(ERS_Block.level>1){ERS__Block.level--;ERS__Block.levelField.setText( ""+ERS__Block.levelERS__Block.score=0;ERS__Block.scoreField.setText( ""+ERS__Block.scorescr.requestFocus();break;casebutton_pause:if(pause_resume){ERS_Block. timer .suspend();pause_resume=false;} else{ERS_Block. timer .resume();pause_resume=true;}scr.requestFocus();break;button_quit :Object[]possibilities1={null;caseIconicon=intQuit?","Information"n=JOptionPane.,JOptionPane.break;button_quit :Object[]possibilities1={null;caseIconicon=intQuit?","Information"n=JOptionPane.,JOptionPane."YES","NO"};showOptionDialog (null,"RellyYES_NO_CANCEL_OPTION,JOptionPane.QUESTIONMESSAGE,icon,possibilities1,possibilities1[0]);if(n==JOptionPane.YES_OPTION){System.exit(0);elseif(n==JOptionPane. NO_OPTION){}if(n==JOptionPane. CANCEL_OPTION){};}}}//第二塊//方塊類classBlock{

staticint[][]pattern={//方塊類classBlock{

staticint[][]pattern={{0x0f00,0x4444,0x0f00,0x4444},{0x04e0,0x0464,0x00e4,0x04c4},//{0x0f00,0x4444,0x0f00,0x4444},{0x04e0,0x0464,0x00e4,0x04c4},//用十六進制表示長條型的四種狀態

型的四種狀態//'T'{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},Block(GameCanvasscr){this.scr=scr;intblockType =({0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},Block(GameCanvasscr){this.scr=scr;intblockType =(范圍的一切整數turnState =(blockState = 1;row=scr.getlnitRow();col=scr.getInitCol();}int//重新初始化塊,并顯示新塊)(Math. random()*1000)%7;)(Math. random()*1000)%4;//初始化為1//獲取方塊的橫坐標//獲取方塊的縱坐標//random() 指可隨機產生一定//狀態{0x6440,0x0e20,0x44c0,0x8e00},//反'7'型的四種狀態{0x0660,0x0660,0x0660,0x0660},//方塊的四種狀態intblockType;//塊的模式號(0-6)intturnState ;//塊的翻轉狀態(0-3)intblockState ;//塊的下落狀態introw,col;//塊在畫布上的坐標//'7'};//反'Z'型的四種狀態//'Z' 型的四種狀態型的四種狀態GameCanvas scr//塊類的構造方法public voidreset(){//實現塊翻轉的操作blockType=(int)(Math.random()*1000)%7;//對產生的隨機數進行求余操作turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getlnitRow();col=scr.getlnitCol();dispBlock(1);}//顯示方塊//實現方塊翻轉的方法publicvoid leftTurn(){publicvoid leftTurn(){if(assertValid(blockType,(turnState +1)%4,row,col)){整形變量turnState=(turnStatedispBlock(1);}publicif+1)%4;//實現塊的左移的方法voidleftMove(){(assertValid(dispBlock(0);col--;dispBlock(1);}publicifblockType////實現塊的右移的方法voidrightMove(){(assertValid(blockTypedispBlock(0);

col++;

dispBlock(1);publicifif,turnState,turnState//實現塊落下的操作的方法booleanfallDown(){==2)1);(blockStatereturn(false(assertValid(dispBlock(0);row--;dispBlock(1);return(true,row,rowelse{blockStatedispBlock(2);booleanintfor=2;return(falseblockType,turnState,row//行坐標自減返回//顯示下落狀態););//判斷是否正確的方法assertValid(intk=0x8000;(inti=0;i<4;i++){for(intj=0;j<4;j++){t,if((int)(pattern//,col-1)){,col+1)){-1,col)

溫馨提示

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

評論

0/150

提交評論